기본적으로 모든 편집 요구 사항에 사용 vim
하기 때문에 쉘의 vi 모드(현재 OS X에서는 oh-my-zsh가 있는 ZSH)를 다시 시도하기로 결정했지만 끊임없이 시도하고 실패했습니다 Ctrl-R
. 동등한 키 바인딩이란 무엇입니까? 나중에 참고할 수 있도록 이 문제를 직접 해결하려면 어떻게 해야 합니까? 나는 bind -P
이것을 bash에서 사용할 수 있다고 확신합니다.
답변1
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 줄 편집기, 바인딩 키 및 emacs/vi 모드에 대한 자세한 정보가 포함되어 있습니다.
답변2
이것은 오래된 질문이지만 유일하게(그리고 받아들여지는) 대답은 기본적으로 사람들에게 "emacs와 유사한" 것을 history-incremental-search-backward
vi 모드로 포팅하는 방법을 알려줍니다. 이것이 완전히 실행 가능하고 귀하에게 적합한 솔루션일 수 있지만 검색 기록의 "vi 방식"에 대해 아무도 언급하지 않았다는 것이 약간 이상합니다.
zsh의 vi 모드는 표준 vi/vim 키인 /
및 를 사용하여 기록 검색을 지원합니다. ?
둘 다 명령 모드에서 사용할 수 있습니다. ( <Esc>
vi나 vim처럼 삽입 모드에서 명령 모드로 전환하려면 클릭하세요.)
그러나 그 의미는 반대입니다. 일반적으로 쉘의 기록을 역방향으로 검색하려고 하므로 /
역방향 검색이 수행되고 ?
정방향 검색이 수행됩니다.
첫 번째 일치 항목이 표시된 후 (vi/vim에서와 마찬가지로) n
같은 방향으로 더 많은 일치 항목을 계속 찾거나 N
검색 방향을 반대로 할 수 있습니다.
키맵의 관련 기본 키 바인딩은 다음 vicmd
과 같습니다.
"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search
답변3
맨 아래에 다음을 추가한 ~/.zshrc
후source ~/.zshrc
bindkey -M vicmd '/' history-incremental-search-backward