zsh를 사용하고 있으며 열렬한 Vim 사용자이기 때문에 명령 줄에서 Vim 스타일 편집을 사용하기로 전환했습니다. (즉, 입력 ls foo/bar
하고 cd
대신 결정하려는 경우 Esc ^
, 처음으로 되돌아 가서 cw cd
로 변경할 ls
수 cd
있습니다.
그것은 모두 멋지지만 문제는 더 이상 Ctrl+R
재귀 기록 검색을 수행 하는 데 사용할 수 없다는 것 입니다. 다른 방법이 있습니까? 아니면 Vim 키 바인딩을 재정 의하여 다시 가져올 수 있습니까?
답변
물론 더 이상 Ctrl+를 사용할 수 없습니다 R. Z Shell 매뉴얼을 참고 history-incremental-search-backward
하면 emacs
키맵에 위젯에 대한 키 바인딩 만 있다는 것을 알 수 있습니다 . vi 키맵에는 키 바인딩이 없습니다.
그러나 설명서를 읽으면 (18 장 참조), 키 바인딩을 추가하는 것은 bindkey
명령을 사용할 때 매우 간단한 연습입니다 .
bindkey "^R" history-incremental-search-backward
zle
표준 위젯이므로 명령 을 사용하여 위젯을 쉘 함수에 맵핑 할 필요도 없습니다 .
당신이 상담하는 경우 는 Z 쉘 위키에이 같은 질문에 대한 답변을 , 당신은 특히 VI “명령”과 “삽입 모드”키맵이를 추가하는 명령을 볼 수 있습니다 :
bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward
또한 garyjohn이 지적한 것처럼 vi “command”키맵에서 /캐릭터는 vi-history-search-backward
위젯에 바인딩됩니다 . 이 위젯과 위젯의 차이점은 히스토리 검색 모드 에history-incremental-search-backward
있는 위젯 동작입니다 . 다음은 몇 가지 차이점입니다.
- vi 모드 전환 :
- 검색 모드는 여전히 검색 모드를 유지하면서 위젯을 호출 할 때 및 키맵
history-incremental-search-backward
사이 를 전환 합니다. 즉에서 모드 누르는 것이 키 또는 + + 키 사이의 검색 모드 전환 및 키맵을. (호출 로부터 키맵하면 바인드 뭔가하지 않는 한에 따라서 번거로운 에서 뿐만 아니라 키맵.)main
vicmd
vi-cmd-mode
emacs
EscCtrlXCtrlVemacs
vicmd
history-incremental-search-backward
vicmd
vi-cmd-mode
vicmd
- 의 검색 모드
vi-history-search-backward
는vi-cmd-mode
위젯을 처리하고accept-line
검색을 종료 한 후 검색을 입력 한 명령 모드로 다시 들어갑니다. 즉, (기본 바인딩으로) /명령 모드에서 검색 모드로 들어가서 명령 모드 Esc로 돌아갑니다.
- 검색 모드는 여전히 검색 모드를 유지하면서 위젯을 호출 할 때 및 키맵
- 검색 반복
- 에서
history-incremental-search-backward
, 양쪽history-incremental-search-backward
과vi-rev-repeat-search
위젯이 인식됩니다. 즉 (위와 같이 바인딩을 변경했다고 가정) Ctrl+ R와 N이전의 일치하는 줄을 검색합니다. - 에서
vi-history-search-backward
만vi-rev-repeat-search
위젯은 인정된다. 즉 (위와 같이 바인딩을 변경했다고 가정) Ctrl+ R경고음이 발생하고 무시됩니다.
- 에서
답변
bash의 vi 모드에서을 입력 <Esc>/<string><Enter>
하면 명령 기록을 검색합니다 <string>
. n
역사에서 다시 검색합니다. N
앞으로 검색합니다. zshell은 동일 할 수 있습니다.
답변
나는 사용하는 것을 선호합니다 :
bindkey -M vicmd '/' history-incremental-search-backward
이렇게 ESC /text
하면 명령 줄을 입력 하고 볼 수 있습니다 . 다음 경기에 가고 싶다면ESC n