Bash 단어 이동을 위한 다양한 구분 기호

Bash 단어 이동을 위한 다양한 구분 기호

명령줄에서 커서를 특정 수의 인수 뒤로 이동하는 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-bigwordAlt+B바인딩 할 수 있습니다 ( 다른 텍스트 스타일 중에서 선택할 수도 있는 것과 동일 ).vi-forward-bigwordAlt+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", $(, echosecondthird모두 )쉘 태그입니다. 일반적으로 원하는 대로 명령 대체를 인용하면 이는 쉘 태그가 됩니다.

답변2

라이브러리의 emacs 모드 키보드 단축키를 사용하여 얻을 수 있는 가장 가까운 것은 - - readline이며 , 뒤로 검색하여 거기에 커서를 놓는 것입니다. 커서가 줄의 시작 부분에 있는 경우 -를 사용하여 커서 위치에서 앞으로 검색할 수도 있습니다 .CtrlMeta]vvCtrl]v

답변3

이것은 실제로 네비게이션을 어떻게 사용하느냐에 대한 질문이며 readline, 기본 모드는 emacs 스타일의 이동입니다. set -o vivi 키 바인딩에 관심이 있을 수 있습니다 .

귀하의 예에서는 set -o vi다음 중 하나를 수행할 수 있습니다.

Esc F--

또는: Esc F-v

또는 B커서가 원하는 위치에 도달할 때까지 계속 매싱하세요. 아니면 그냥 클릭하여 Esc명령 v을 편집 vim하고 :wq실행하세요. 실제로 가능성은 무궁무진합니다.

관련 정보