bash에서 Vi 모드로 히스토리 검색을 실행하는 방법

bash에서 히스토리를 검색하는 대신 Ctrl + R 대신 사용할 수있는 방법을 찾고 싶습니다. bash에서 vi 모드를 활성화 할 수 있지만 검색 할 수 없습니다. /search 또는 ?search를 수행해도 아무 일도 일어나지 않습니다. 더 눌러야 할 것이 있습니까? Enter 키를 누르면 다음과 같은 일이 발생합니다.

$ set -o vi $ ls|grep f $ /gr -bash: /gr: No such file or directory $ 

댓글

  • <C-r> 정말 readline 용 vi-mode에서 작동하지 않습니까? 최신 버전의 bash에서 잘 작동합니다.
  • @ D.BenKnoble 예, 그렇습니다.하지만 <C-r>가 emacs 모드라고 생각하며 배우고 싶습니다. vi 모드.
  • <C-r>는 재귀 검색입니다. 특히 bash 특정 확장 일 수 있으므로 emacs 대 vi와 관련이 있는지 확실하지 않습니다 (내 메모리는 그 세부 사항에 대해 모호합니다). / 사용을 권장하지 않습니다. 단지 각각의 용도가 다릅니다.

답변

bash / readline에서 Vim 스타일 검색이 확실히 있습니다. 사실, 명령 줄은 기본적으로 Vim 편집기의 축소 된 버전이며 상당한 수의 일반 모드 명령을 사용할 수 있습니다. 이에 대해 더 자세히 설명하지만 첫 번째 검색입니다. 필요한 정보의 핵심은 명령 줄에서 깜박이는 커서를 볼 때 Vim의 삽입 모드에 해당한다는 것입니다. 그러면 어떻게 일반 모드로 전환 할 수 있습니까? Esc 물론입니다.

여기서 / 를 누르고 검색어를 입력 한 다음 Enter 를 누르십시오. 이제 n N 를 사용하여 결과를 앞뒤로 이동합니다. (n를 사용하면 기본적으로 뒤로 검색하는 것이 효과적입니다. 처음부터 앞으로 검색합니다. 미래에 기록이 없기 때문에 어떤 결과도 제공하지 않을 것입니다!) 현재 결과를 명령으로 실행하려면 Enter 를 다시 누르십시오.

당신을 잊지 마십시오. re는 일반 모드이므로 찾고있는 내용을 찾지 못하고 삽입 모드에서 텍스트를 다시 입력하려면 Vim에서 일반적으로 수행하는 작업을 수행하십시오. 예를 들어 i 를 누르면됩니다. 또는 Vim 명령 C을 사용하여 커서 뒤의 모든 텍스트를 제거하고 삽입 모드로 전환 할 수 있습니다. (커서를 첫 번째 열로 이동 한 경우 0 앞에 올 수 있습니다.) 또는 A, , R, s, s, I, Ctrl-C ... 당신은 그림을 얻습니다.

삽입 모드로 들어가는 다양한 명령 외에도 b, B, e, E , w, W, 0, $ 등 Yank / delete / put도 있으며 yB, c2e, d$ 1 마지막으로 u ndo도 작동합니다! 계속해서 다른 것을 직접 시도하십시오.

아, 그리고 만약 당신이 조금 길을 잃거나 가끔 저에게 일어나는 것처럼, 줄 바꿈이있는 약간의 펑키함이 당신의 c / l을 뒤흔들면 당신은 가식을 버리고 v. 이렇게하면 명령 줄의 내용이 Vim의 실제 인스턴스로 가져 와서 완전 무장 및 운영 텍스트 편집기 로 편집 할 수 있습니다. . 완료되면 :wq 실행을 위해 셸에 제출합니다.

1 아아, 연산자 + 모션 명령 (caw, dis, yap 등)은 지원되지 않습니다. 하지만 아래 @EdNeville "의 댓글에는 겉보기에 추가되는 일부 readline 설정 링크 가 있습니다. 모든 op-motion 명령과 기타 여러 명령이 있습니다. 명령 줄 기반 Vim 경험을 .inputrc 파일에 추가하여 마무리 할 수 있습니다.


추가 정보 : set -o vi 또는 set -o emacs가 제공합니다. 사용 가능한 readline 명령을 사용할 수 있습니다. Ctrl-R는 Vim 모드에서도 사용할 수 있어야한다고 생각하지만 그렇지 않은 경우 시도해 볼 수 있습니다. 이것을 ~/.inputrc에 넣습니다 ...

set editing-mode vi "\C-r": reverse-search-history "\C-s": forward-search-history 

아직 더 좋은 점은

"\C-o": operate-and-get-next 

히스토리에서 명령을 선택하면 (예 :Vim 검색을 통해) Enter 대신 Ctrl-O를 누르면 Bash가 명령을 실행하고 실행 준비가 된 기록에서 다음 명령을 삽입합니다.

전체 목록은 Bash 맨 페이지의 Readline 명령 이름 섹션을 참조하세요.

(명령 줄에서 명령을 내렸지 만 이미 여기에서 너무 멀어졌습니다.)

댓글

  • 좋습니다. 배우는 순간입니다.
  • @niklas, 이것이 당신의 대답입니다
  • @glennjackman이 기능을 많이 사용합니다. 정말 유용합니다.
  • @NiklasRosencrantz 네, 이해했습니다. 질문자에게만 집중하기보다는 일반적으로 유용한 답변을 작성하여 여러 모드의 명령 혼합에 대한 추가 정보를 추가했습니다.
  • ciw .inputrc를 수정하는 경우 : usenix.org.uk/content/bash.html#input

답변

@ B-Layer가 언급 한 내용은 bash와 zsh에서도 잘 작동합니다.

VIM을 이미 사용하고 있기 때문에 , neovim 또는 vim8를 사용하는 경우 :terminal를 사용해 볼 수도 있습니다. vim에서 기본 터미널이 열립니다.

그런 다음 vim 명령을 사용하여 터미널 명령의 기록을 탐색 할뿐만 아니라 터미널의 출력을 탐색 할 수 있습니다.

Ref.

  1. http://vimcasts.org/episodes/neovim-terminal/
  2. https://neovim.io/doc/user/nvim_terminal_emulator.html
  3. https://github.com/vim/vim/blob/master/runtime/doc/terminal.txt

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다