oh-my-zsh 업그레이드 후 기록 검색이 중단됨

oh-my-zsh 업그레이드 후 기록 검색이 중단됨

며칠 전 oh-my-zsh 자동 업그레이드를 했습니다. 이제 내 필터 기록(몇 글자와 위쪽 화살표 입력)이 더 이상 작동하지 않습니다. 나는 내가 그것에 얼마나 의존하고 있는지 깨닫지 못했습니다.


편집하다:

예를 들어, 명령의 몇 글자를 입력한 다음 위쪽 화살표를 눌러 내 기록을 검색한 적이 있습니다.

➜  scratch git:(develop) up   # press ↑ arrow key

프롬프트가 다음으로 변경됩니다.

➜  scratch git:(develop) upupdowndownleftrightleftrightbabastartselect # 3 key presses

내가 실행중인 버전이 무엇인지 모르겠습니다. 지금:

➜  scratch git:(develop) echo $ZSH_VERSION
5.0.2

다음은 증분 검색이 작동한다고 생각되는 .zshrc 파일의 몇 줄입니다.

# Set bindkeys to start search from last word
bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward

답변1

커서 키에는 사실상 두 가지 표준 이스케이프 시퀀스가 ​​있으며, 동일한 터미널의 다른 모드에서도 그 중 하나를 보낼 수 있습니다. 예를 들어, xterm은 "응용 프로그램 커서 모드" 등 \eOA으로 전송됩니다 . 왜냐하면 두 가지를 동시에 만날 수 있기 때문입니다.Up\e[ADown\e[B\eOB

한 가지 해결책은 바인딩을 복사하는 것입니다. 하나의 이스케이프 시퀀스를 바인딩할 때마다 다른 이스케이프 시퀀스를 동일한 명령에 바인딩합니다.

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

또 다른 접근 방식은 항상 하나의 이스케이프 시퀀스를 바인딩하고 다른 이스케이프 시퀀스에 다른 이스케이프 시퀀스를 삽입하도록 하는 것입니다.

bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward
bindkey -s '\eOA' '\e[A'
bindkey -s '\eOB' '\e[B'

oh-my-zsh를 업그레이드하면 쉘이 터미널에서 수신하는 이스케이프 시퀀스에 영향을 미치는 이유를 모르겠습니다. 어쩌면 새 버전에서는 응용 프로그램 커서 모드를 활성화하기 위해 다른 터미널 초기화를 수행할 수도 있습니다.

관련 정보