명령줄에서 커서를 특정 수의 인수 뒤로 이동하는 bash emacs 모드 바로 가기를 찾고 있습니다. 내가 찾고 있는 것을 설명하기 위해 구체적인 예( []
커서가 있는 위치) 를 사용하겠습니다 .
시작: $ prog -v a/b/c d/e/f[]
표적: $ prog -[]v a/b/c d/e/f
또는$ prog -v[] a/b/c d/e/f
이상적으로는 bash에게 커서를 뒤로 이동하라고 효과적으로 말하고 싶습니다.N여기서 매개변수는 공백이 아닌 문자로 구성된 연속 문자열입니다.
내가 시도한 것:
충분히 오래 기다리면 left-arrow내가 가고 싶은 곳으로 갈 수 있지만 비효율적입니다.
C-a, 그런 다음 right-arrow충분히 오래 앉아 있습니다. 또한 비효율적입니다.
M-breadline이 "단어"라고 생각하는 것을 반환하지만 실제로는 공백, 슬래시, 대시에서 멈추는 것처럼 보입니다. 그러나 공백 문자에서만 멈추기를 원합니다. 주어진 예에서는 가고 싶은 곳 으로 M-b가려면 M-b+ + + + +를 사용해야 하며 , 원하는 만큼 두 번 사용해야 합니다.M-bM-bM-bM-bM-b
M-7+ 일곱 번 M-b해서 M-b효율성은 높아지지만, "단어" 구분 기호의 개수를 세는 데는 두뇌의 힘이 필요합니다. readline이 "단어" 구분 기호를 고려하는 것보다 공백 문자를 계산하는 것이 훨씬 쉽습니다.
이상적으로는 반환할 인수 수를 지정한 다음 M-2+와 같이 반환하도록 지시할 수 있습니다 M-b.
B@m0dular는 vi 모드에서 매개변수 경계가 원하는 대로 처리되지만 Emacs 모드를 유지하고 싶고 명령 자체를 반복적으로 반환하지 않고도 반환할 매개변수 수를 지정할 수 있기를 원한다고 지적했습니다. .
노트:나는 원래이 버전을 출시했습니다StackOverflow에 있지만 프로그래밍과 직접적인 관련이 없기 때문에 여기로 오라고 제안했습니다.
답변1
원하는 동작을 얻기 위해 언제든지 vi-backward-bigword
에 Alt+B바인딩 할 수 있습니다 ( 다른 텍스트 스타일 중에서 선택할 수도 있는 것과 동일 ).vi-forward-bigword
Alt+Fzsh
bind '"\eb": vi-backward-bigword'
bind '"\ef": vi-forward-bigword'
그러면 그것을 사용할 수 있습니다 Alt+2 Alt+B.
shell-backward-word
또한 및 shell-forward-word
건너뛰기 쉘 플래그도 있습니다 . 예를 들어:
cmd "first arg" $(echo second third)
"first arg"
, $(
, echo
및 second
는 third
모두 )
쉘 태그입니다. 일반적으로 원하는 대로 명령 대체를 인용하면 이는 쉘 태그가 됩니다.
답변2
라이브러리의 emacs 모드 키보드 단축키를 사용하여 얻을 수 있는 가장 가까운 것은 - - readline
이며 , 뒤로 검색하여 거기에 커서를 놓는 것입니다. 커서가 줄의 시작 부분에 있는 경우 -를 사용하여 커서 위치에서 앞으로 검색할 수도 있습니다 .CtrlMeta]vv
Ctrl]v
답변3
이것은 실제로 네비게이션을 어떻게 사용하느냐에 대한 질문이며 readline
, 기본 모드는 emacs 스타일의 이동입니다. set -o vi
vi 키 바인딩에 관심이 있을 수 있습니다 .
귀하의 예에서는 set -o vi
다음 중 하나를 수행할 수 있습니다.
Esc F--
또는: Esc F-v
또는 B커서가 원하는 위치에 도달할 때까지 계속 매싱하세요. 아니면 그냥 클릭하여 Esc명령 v을 편집 vim
하고 :wq
실행하세요. 실제로 가능성은 무궁무진합니다.