zsh 라인 편집기: 매개변수를 통해 탐색하고 편집할 수 있나요?

zsh 라인 편집기: 매개변수를 통해 탐색하고 편집할 수 있나요?

명령을 실행하려고 할 때 셸에서 일반적인 상황이 발생합니다.

command "/some/complex/and terrible/path" -vf --various --flags --and -- things --config-file="/some other/annoyingly/large/path/to/somewhere"

알고 보니 나는 대부분의 시간을 거기에 있었지만 몇 가지 물건을 옮겨야 했습니다. 다음 단계를 시도하기 전에 마지막 매개변수를 맨 앞으로 이동해야 한다고 가정해 보겠습니다.

command --config-file="/some other/annoyingly/large/path/to/somewhere" "/some/complex/and terrible/path" -vf --various --flags --and -- things

이것을 키스트로크 골프의 관점에서 살펴보세요. 무서운 상황입니다. 이는 실제로 명령의 거의 절반을 다시 입력(또는 복사하여 붙여넣기)해야 하는 악몽 같은 셸 명령 입력 시나리오입니다. 제정신을 유지하기 위한 최선의 희망은 아마도 외부 편집기를 사용하는 것일 것입니다.[이와 같이].

daW그럼에도 불구하고 Vim은 arg 구문 분석을 수행할 만큼 똑똑하지 않습니다. 따라서 vim의 성능을 고려하면 약 8번의 키 입력만으로 작업을 수행할 수는 있지만 마지막 arg 를 꺼내는 데 사용할 수 있는 빠른 방법은 없습니다 .

나는 vim을 모든 코딩 작업에 사용하기 때문에 vim에서 텍스트를 편집하기 위해 많은 소프트웨어를 사용하기 때문에 이것이 좋은 해결 방법이 될 수 있다고 생각했습니다.

하지만 내가 원하는 것은 Zsh(또는 심지어 Bash!) 라인 편집기가 인수를 푸시할 수 있는 방식으로 프로그래밍될 수 있는지입니다. 이 같은:https://github.com/AndrewRadev/sideways.vim물론 이 플러그인은 공백으로 구분된 쉘 인수에서도 작동하지 않습니다. 그리고 vim이 필요합니다.

--config-file방향 점프( arg의 어딘가에 커서를 놓은 다음 HopLeft를 매쉬하여 arg를 왼쪽으로 점프할 수 있음) 또는 끌어서 붙여넣기(arg의 어딘가에 커서를 놓을 수 있음 ) 에 만족합니다. --config-file꺼내서 홈을 누릅니다. 앞쪽으로 가서 뒤쪽에 붙입니다.)

이렇게 하면 개별 문자 대신 인수를 단위로 탐색하여 셸 인수를 빠르게 재구성할 수 있습니다. 일반 명령 편집 속도가 크게 향상됩니다. 나는 쉘에서 직접적으로 비정상적으로 많은 양의 코딩을 수행하기 때문에 이것이 매우 걱정됩니다.

이 아이디어를 더욱 발전시키려면 편집기로 구현될 것입니다.모델, 이를 매개변수 편집 모드라고 부릅니다. 여기서 커서는 문자 대신 매개변수 위로 이동하고 매개변수에 대해 더 완전한 작업 세트를 하나의 단위로 수행할 수 있습니다.

이제 현실로 돌아 갑시다. 문제는 이것이다: 프로그래밍 방식으로 zsh가 현재 있는 셸에 대한 인수를 제거하도록 할 수 있습니까? 그런 다음 다시 붙여넣으시겠어요? 단지 단어 점프가 아닌 실제 매개변수를 기반으로 점프할 수 있는 키를 바인딩할 수 있나요?

this 에 사용할 기존 바인딩이 없는 것 같지만 bindkey프로그래밍 방식으로 커서 위치를 제어할 수 있다면 그렇게 할 수 있는 방법이 있을 것 같습니다. 결국 나는 내 명령을 실시간으로 구문 강조 표시하는 플러그인을 사용합니다.https://github.com/zsh-users/zsh-syntax-highlighting

답변1

select-word-style이 프레임워크, 특히 해당 프레임워크를 찾고 있을 수 있습니다.껍데기텍스트 스타일. 바라보다

info zsh select-word-style

예를 들어 다음을 추가하세요 ~/.zshrc.

autoload -U select-word-style
zle -N select-word-style
bindkey '\ez' select-word-style

그런 다음 (해당 패턴을 사용한다고 가정 emacs)

  • Alt+Z전화하려면 누르 세요select-word-style
  • 텍스트 스타일을 선택할 수 있는 메뉴가 표시됩니다. S텍스트 shell스타일을 선택하려면 누릅니다.
  • 그런 다음 Ctrl+W이전 단어는 완전한 인수로 제거됩니다(a껍데기단어).
  • Ctrl+A또는 Home줄의 시작 부분으로 이동
  • Alt+F한 단어를 오른쪽으로 이동
  • Ctrl+Y이전에 삭제한 단어를 취소합니다.
  • Alt+ZN돌아가고 싶다면정상텍스트 스타일.

답변2

문제는 이것이다: 프로그래밍 방식으로 zsh가 현재 있는 셸에 대한 인수를 제거하도록 할 수 있습니까? 그런 다음 다시 붙여넣으시겠어요? 단지 단어 점프가 아닌 실제 매개변수를 기반으로 점프할 수 있는 키를 바인딩할 수 있나요?

그래 넌 할수있어. 그냥 사용내 Zsh 편집 플러그인. 여기에는 전체 쉘 단어를 건너뛰고 자르기 위한 키 바인딩이 포함되어 있습니다.

관련 정보