ZSH의 vi 모드에서 역방향 기록 검색을 수행하는 방법은 무엇입니까?

ZSH의 vi 모드에서 역방향 기록 검색을 수행하는 방법은 무엇입니까?

기본적으로 모든 편집 요구 사항에 사용 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-backwardvi 모드에서는 기본적으로 바인딩되지 않습니다. Ctrl-R을 직접 바인딩하려면 이 명령을 실행하거나 다음 명령에 추가할 수 있습니다 ~/.zshrc.

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

맨페이지 zshzle( man zshzle)에는 zsh 줄 편집기, 바인딩 키 및 emacs/vi 모드에 대한 자세한 정보가 포함되어 있습니다.

답변2

이것은 오래된 질문이지만 유일하게(그리고 받아들여지는) 대답은 기본적으로 사람들에게 "emacs와 유사한" 것을 history-incremental-search-backwardvi 모드로 포팅하는 방법을 알려줍니다. 이것이 완전히 실행 가능하고 귀하에게 적합한 솔루션일 수 있지만 검색 기록의 "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

맨 아래에 다음을 추가한 ~/.zshrcsource ~/.zshrc

bindkey -M vicmd '/' history-incremental-search-backward

관련 정보