[unix] ZSH의 vi 모드에서 역 이력 검색을 어떻게 수행합니까?

필자 vim는 본질적으로 모든 편집 요구에 사용하므로 쉘에 대해 vi 모드를 다시 시도하기로 결정했지만 (현재 OS X에서는 oh-my-zsh가있는 ZSH) Ctrl-R끊임없이 사용하려고 시도하고 실패했습니다 . 동등한 키 바인딩은 무엇입니까? 그리고 나중에 참조하기 위해 어떻게 이것을 스스로 알아낼 수 있습니까? 나는 bind -Pbash에서 사용할 수 있다고 확신한다 .



답변

bindkey기존 바인딩 목록을 얻기 위해 인수없이 실행할 수 있습니다 . 예를 들면 다음과 같습니다.

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

emacs 모드에서 원하는 바인딩은입니다 history-incremental-search-backward. 그러나 vi 모드에서는 기본적으로 바인딩되지 않습니다. Ctrl-R을 직접 바인딩하려면이 명령을 실행하거나 다음에 추가하십시오 ~/.zshrc.

bindkey "^R" history-incremental-search-backward

zshzle맨 페이지 ( man zshzle) zsh을의 행 편집기, bindkey 및 이맥스 / VI 모드에 대한 자세한 정보가 있습니다.


답변

이것은 고대의 질문이지만 유일하게 (그리고 받아 들여지는) 대답은 기본적으로 “emacs-like” history-incremental-search-backward를 vi 모드 로 이식하는 방법을 알려줍니다 . 이것이 완벽하게 수행 가능하고 귀하에게 적합한 솔루션 일지 모르지만, 역사를 검색하는 “vi way”를 언급 한 사람이 아무도 없다는 것은 조금 이상합니다.

zsh의 vi 모드는 표준 vi / vim 키를 사용하여 검색 기록을 지원합니다 : /?. 둘 다 명령 모드에서 사용할 수 있습니다. (히트 <Esc>단지 VI 또는 정력처럼, 명령 모드로 삽입에서 전환합니다.)

셸 히스토리를 /역순으로 검색하려면 역방향 검색을 수행하지만 ?정방향 검색은 수행합니다.

첫 번째 적중이 표시되면 (vi / vim과 마찬가지로) n같은 방향으로 더 많은 적중을 계속 찾거나 N검색 방향을 반대로하는 데 사용할 수 있습니다.

vicmd키맵 의 관련 기본 키 바인딩은 다음 과 같습니다.

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search


답변