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: 디렉토리 구분 기호에서 backward-kill-word를 중지합니다., 이는 다음을 가리킨다.
- Re: 역방향 킬, Will Yardley의 다음 예를 제공합니다.
나는 목록에 있는 누군가(Oliver Kiddle)가 제공한 이 비트를 사용합니다. 확인하다 이에 대한 자세한 내용은 10월 8일 월요일의 기록 보관소를 참조하세요. tcsh-backward-delete-word () { 로컬 WORDCHARS="${WORDCHARS:s#/#}" zle 뒤로 삭제 단어 } 다음을 사용하여 control-W에 바인딩했습니다. 바인드키 '^W' tcsh-backward-delete-word 하지만 분명히 바꿀 수 있습니다. 내 생각엔 그게 네가 찾고 있는 것 같아, 그렇지? '$WORDCHARS' 변수는 zsh가 단어 경계를 결정하는 방법입니다. 전역적으로 '/'를 추가할 수 있지만 이는 다른 사항에 영향을 미칠 수 있습니다. 그냥 두고 싶기 때문에 저는 이 기능을 더 선호합니다.
이는 다음과 같은 사용 사례로 이어집니다
$WORDCHARS
.zsh 쉘 단어 분할 수정, 위키도 그렇고
$WORDCHARS
따라서 원하는 대로 단어를 정의하고 이를 임의의 키에 바인딩하여 자신의 함수에서 지역 변수로 사용할 수 있습니다 .
함수를 정의할 때 함수를 추가하는 것을 잊지 마세요.키맵:
zle -N tcsh-backward-delete-word