현재 터미널 라인(사용자가 계속 편집할 수 있는 라인)을 어떻게 얻나요?

현재 터미널 라인(사용자가 계속 편집할 수 있는 라인)을 어떻게 얻나요?

현재 사용자 입력 줄을 쉘 함수의 변수로 사용하는 방법이 필요합니다.

내 현재 코드는 ctrl+r을 통해 호출할 수 있습니다.

zle -N search

bindkey "^R" search

search () {
read str;
fc -ln -30 | grep $(printf "%q\n" "$str");
}

아니면 간단히 함수라고 부르세요.

search () {
fc -ln -30 | grep $(printf "%q\n" "$1");
}

업데이트: 대상 의사코드(ctrl+r로 호출되는 함수 호출), 추가 입력 프롬프트가 필요하지 않음

zle -N search

bindkey "^R" search

search ()
echo ""; #for better formatting because ctrl+R is not enter so the BUFFER(current line) gets corrupted and looks messy and the current input is not correctly shown
fc -ln -30 | grep $(printf "%q\n" "$BUFFER"); #edited to be the solution where $BUFFER is the current terminal line
}

답변1

zle 위젯에서는 편집 버퍼의 내용을 변수에서 사용할 수 있습니다 $BUFFER. $LBUFFER커서 왼쪽의 내용( 과 동일 $BUFFER[1,CURSOR-1])과 $RBUFFER오른쪽의 내용( 과 동일 $BUFFER[CURSOR,-1])을 포함합니다.

지금까지 입력한 문자열(마지막 30개)이 포함된 이전 명령줄 보고서를 인쇄하는 위젯의 경우 다음을 수행할 수 있습니다.

search() {
  zle -I
  print -rC1 -- ${(M)${history:0:30}:#*$BUFFER*}
}
zle -N search
bindkey '^R' search

관련 정보