기본적으로 zsh
+ CTRL와 w+ ALT는 Backspace정확히 동일한 효과를 갖는 것으로 보입니다.
CTRL+를 w동일하게 유지하고 영숫자가 아닌 문자에서 멈추도록 ALT+를 변경하려면 어떻게 해야 합니까 ?Backspace
즉, 커서가 다음 명령의 끝에 있을 때 +를 echo /aaa/bbb/ccc
누르면 나가고 +를 누르면 나가야 합니다 .CTRLwecho
ALTBackspaceecho /aaa/bbb/
고쳐 쓰다
답변을 바탕으로 @Thomas Dickey
다음을 추가했습니다 .zshrc
.
my-backward-delete-word () {
local WORDCHARS='~!#$%^&*(){}[]<>?+;'
zle backward-delete-word
}
zle -N my-backward-delete-word
bindkey '\e^?' my-backward-delete-word
이제 명령줄 편집기가 예상한 것과 다르게 작동합니다.
예를 들어, 작은따옴표 문자 '
는 my 에 열거되지 않으므로 를 WORDCHARS
누르면 Alt+BackSpace에서 backward-delete-word
멈춰야 합니다 '
.
이는 첫 번째 예에서는 작동하지만 두 번째 예에서는 작동하지 않습니다.
$ echo 'asdf'
$ echo '
$ echo '=asdf'
$ echo '=
$
두 번째 예에서는 echo '=
명령줄을 벗어났습니다. 두 번째 버튼 을 누르면 Alt+BackSpace모든 것이 완료되었습니다 echo
. =
멈출 예정이었기 때문에 먹힐 거라고 예상했다 '
.
예상대로 작동하지 않는 이유는 무엇입니까?
답변1
실제로 이것은 zsh 바인딩에 나열되어 있지 않지만 bindkey
표시된다면너, 정의한 함수에 바인딩하여 구성할 수 있습니다.
내 답변을 바탕으로 작업
zsh에서 슬래시나 단어를 제거하는 방법은 무엇입니까?, 나는 이것을 찾았다:
zsh: 디렉터리 구분 기호에서 단어를 거꾸로 죽이는 것을 중지합니다., 이는 다음을 가리킨다.
- 답장: 거꾸로 죽여라, Will Yardley를 예로 들어 보겠습니다.
나는 목록에 있는 누군가(Oliver Kidder)가 제공한 것을 사용하고 있습니다. 자세한 내용은 10월 8일 월요일 아카이브를 참조하세요. tcsh-삭제 역방향 단어() { 로컬 WORDCHARS="${WORDCHARS:s#/#}" zle은 단어를 거꾸로 삭제합니다. } 나는 그것을 control-W에 묶었습니다. 바인딩 키 '^W' tcsh-delete back-word 하지만 분명히 당신은 그것을 바꿀 수 있습니다. 내 생각에는 그게 당신이 찾고 있는 것 같아요, 그렇죠? '$WORDCHARS' 변수는 zsh가 단어 경계를 결정하는 방식입니다. 전역적으로 "/"를 추가할 수 있지만 이는 다른 사항에 영향을 미칠 수 있습니다. 계속 유지하고 싶기 때문에 이 기능을 선호합니다.
이는 다음을 사용하는
$WORDCHARS
예제 로 이어집니다.zsh 쉘 단어 분할 수정및 위키피디아
따라서 $WORDCHARS
이를 자신의 함수에서 로컬 변수로 사용하고, 필요에 따라 단어를 정의하고, 키에 바인딩할 수 있습니다.
함수를 정의할 때 다음과 같이 추가하는 것을 잊지 마세요.키맵:
zle -N tcsh-backward-delete-word