bash에서 히스토리를 검색하는 대신 Ctrl + R 대신 사용할 수있는 방법을 찾고 싶습니다. bash에서 vi 모드를 활성화 할 수 있지만 검색 할 수 없습니다. /search
또는 ?search
를 수행해도 아무 일도 일어나지 않습니다. 더 눌러야 할 것이 있습니까? Enter 키를 누르면 다음과 같은 일이 발생합니다.
$ set -o vi $ ls|grep f $ /gr -bash: /gr: No such file or directory $
댓글
답변
bash / readline에서 Vim 스타일 검색이 확실히 있습니다. 사실, 명령 줄은 기본적으로 Vim 편집기의 축소 된 버전이며 상당한 수의 일반 모드 명령을 사용할 수 있습니다. 이에 대해 더 자세히 설명하지만 첫 번째 검색입니다. 필요한 정보의 핵심은 명령 줄에서 깜박이는 커서를 볼 때 Vim의 삽입 모드에 해당한다는 것입니다. 그러면 어떻게 일반 모드로 전환 할 수 있습니까? Esc kbd를 눌러 > 물론입니다.
여기서 / 를 누르고 검색어를 입력 한 다음 Enter 를 누르십시오. 이제 n kbd를 사용할 수 있습니다. > 및 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.
<C-r>
정말 readline 용 vi-mode에서 작동하지 않습니까? 최신 버전의 bash에서 잘 작동합니다.<C-r>
가 emacs 모드라고 생각하며 배우고 싶습니다. vi 모드.<C-r>
는 재귀 검색입니다. 특히 bash 특정 확장 일 수 있으므로 emacs 대 vi와 관련이 있는지 확실하지 않습니다 (내 메모리는 그 세부 사항에 대해 모호합니다)./
사용을 권장하지 않습니다. 단지 각각의 용도가 다릅니다.