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


47

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


2
'man zshzle'에 따르면 history-incremental-search-backward는 기본적으로 Vi 모드 (vicmd, viins)에 바인딩되지 않습니다.
paul

답변:


56

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 모드에 대한 자세한 정보가 있습니다.


3
특히 감사합니다 zshzle. 그것은 매우 유익하고 유용합니다.
행크 게이

사랑해. 진심으로. OSX El Capitan으로 업그레이드 한 후 리버스 검색이 사라졌고 일상 작업 과정에서 다른 것보다 더 많이 놓쳤습니다.
Christian

24

이것은 고대의 질문이지만 유일하게 (그리고 받아 들여지는) 대답은 기본적으로 "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

2
또한 사용하기 좋은 "^P" history-beginning-search-backward"^N" history-beginning-search-forward대한 VIM-처럼 자동 완성 (당신이 입력 한 다음 시작을 누릅니다 ctrl+p또는 ctrl+n).
cprn

나를 위해, 내가 찾던 정확히을 ?가져옵니다 bck-i-search. 감사합니다.
geowa4

@wjv 히스토리 증가 검색의 장점은 glob 패턴을 지원한다는 것입니다. 디폴트 /또는`? ' not
alpha_989

@ alpha_989 참조한 블로그 게시물이 잘못되었습니다. 작성자가 ^R키 바인딩 을 오버로드하는 일부 zsh "프레임 워크"가 설치되었을 수 있습니다 . history-search-backwardand history-incremental-search-backward가 지원하는 유일한 "regex-like"문자 ^는 검색 문자열을 줄의 시작 부분에 고정합니다. 실제 history-incremental-search-backward장점은 이름에서 알 수 있듯이 증분 검색을 수행한다는 것입니다. vicmd그런 이유로 키맵에 바인딩하고 싶을 수도 있습니다 .
wjv

@wjv, 당신은 바로 .. 내가 작성해야하는 history-incremental-pattern-search-backward,하지 history-incremental-search-backward. history-incremental-pattern-search-backwards어쩌면 위젯 ..하지만 기본적으로 zsh에 설치되어 있다고 생각합니다. zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators에서 올바르게 지적 glob하지 않은 패턴을 지원합니다 . 게시물에 실제로 실수가 있습니다 ..regex
alpha_989
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.