기록이 포함된 zsh 자동 완성이 로그인마다 일관되지 않게 작동하는 이유는 무엇입니까?

기록이 포함된 zsh 자동 완성이 로그인마다 일관되지 않게 작동하는 이유는 무엇입니까?

내 .zshrc에 다음 줄을 추가한 후:

autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
bindkey "^[[B" down-line-or-beginning-search

(zsh에서) 실행했는데 exec zsh위 줄이 적용되지 않았습니다. 그런 다음 다음을 수행했습니다(이 컨텍스트가 필요한지 확실하지 않지만 관련이 있을 수 있음). exit다시 로그인 셸(bash)에 넣고 exit로그아웃한 다음 ssh machine다시 로그인 exec zsh하면 위의 줄이 작동하기 시작했습니다.

이유를 아는 사람 있나요?

편집하다

내 제목 질문이 잘못되었습니다. .zsh는 위의 줄에서만 로그인에서 로그인까지 일관되지 않게 동작하는 것으로 나타났습니다. 예상대로 작동할 때도 있고 그렇지 않을 때도 있습니다. 패턴을 찾으려고 노력했지만 찾을 수 없었습니다. 제 생각에는 (확실하지는 않지만)로그인중요합니다. 일단 ssh컴퓨터에 접속하면 zsh 인스턴스에 관계없이 동작이 동일하게 유지되는 것 같습니다.

from 의 출력은 read (up) (down)항상 from 의 출력과 동일 history 0하며 위쪽 및 아래쪽 화살표가 잘 작동하는 것 같습니다.

유용한 정보일 수도 있고 아닐 수도 있는 실패한 사례의 경우(한동안 제대로 작동하지 못했습니다):

%bindkey | grep 'or-beginning'
"^[[A" up-line-or-beginning-search
"^[[B" down-line-or-beginning-search
%zmodload | grep zle
zsh/zle
%up-line-or-beginning-search
up-line-or-beginning-search:zle:19: widgets can only be called when ZLE is active
up-line-or-beginning-search:zle:21: widgets can only be called when ZLE is active
%read
^[[A^[[B^C% (up,down,ctrl-c)

답변1

% echo echo echo >> ~/.zshrc
% exec zsh
echo
% 

따라서 는 방금 추가 exec zsh한 것을 실행합니다 . 아마도 실행될 것입니다.echo~/.zshrc

zsh -ixc exit >grepthis 2>&1

그런 다음 grepthis파일이 해당 줄을 읽었는지 또는 bindkey그 후에 관련된 다른 일이 발생하는지 확인하십시오.

답변2

때때로 왜 작동하는지 아직도 모르지만 다음이 도움이 되었습니다. http://zshwiki.org/home/zle/bindkeys

키 시퀀스로 '<ctrl-v><up>'(대신 )을 누르면 트릭이 수행됩니다. "^[[A"다행히 vim에서도 작동합니다.

<ctrl-v><up>시퀀스는 인쇄할 수 있지만 직접 입력할 수는 없습니다. 0x1B 0x4F 0x42

또한 (기사에서도 언급했듯이) 내 시스템에 정의된 일부 간단한 키에 대한 친숙한 바인딩이 있습니다 /etc/zsh/zshrc.

따라서 내 시스템에서는 다음도 작동합니다.

bindkey "$key[Up]" up-line-or-beginning-search

관련 정보