업데이트됨 (2020년 3월 2일)

업데이트됨 (2020년 3월 2일)

like 에서 +를 사용하여 Ctrl단어를 삭제 하고 싶습니다.Wzsh

vim /foo/bar^W
vim /foo/

해결책을 찾았 bash지만 bindzsh 기능에서는 찾을 수 없습니다.

ctrl-w(단어 삭제)를 구성할 수 있나요?

Ctrl+ W를 로 구성하는 방법은 무엇입니까 delete-word?

답변1

이것은 의 일부입니다..zshrc나는 다음을 사용해왔다:

my-backward-delete-word() {
    local WORDCHARS=${WORDCHARS/\//}
    zle backward-delete-word
}
zle -N my-backward-delete-word
bindkey '^W' my-backward-delete-word

원본 출처는 이랬던 것으로 기억합니다. http://www.zsh.org/mla/users/2001/msg00870.html

답변2

참고로 이 솔루션을 찾았습니다.여기더욱 우아해집니다. 나는 인용한다:

WORDCHARS또 다른 옵션은 (영숫자가 아닌 문자는 단어의 일부로 간주됨)을 포함하지 않도록 설정하는 것 입니다 /.

^w점, 밑줄 등을 분리 하려는 경우에도 이 설정을 조정할 수 있습니다. 나는 ~/.zshrc다음을 가지고 있습니다 :

WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'

업데이트됨 (2020년 3월 2일)

@Patryk이 아래 의견에서 지적했듯이 이것은 작동하지 않습니다 ZSH >= 5.7. 이것은 제가 테스트하고 작업 중인 업데이트입니다 zsh 5.8 (x86_64-apple-darwin18.7.0).

autoload -U select-word-style
select-word-style bash

export WORDCHARS='.-'

답변3

지금까지 bash의 모든 속성을 제공하는 답변은 없습니다. 지금 바로:

  • CTRL-w는 공백이 아닌 문자를 모두 제거합니다.
  • CTRL-w는 텍스트를 종료 루프에 넣습니다(그래서 나중에 CTRL-y로 붙여넣을 수 있습니다).
  • CTRL-w추가후속 종료 명령(CTRL-w, alt-backspace, alt-d 등)에서 루프를 종료하기 위한 텍스트입니다.

또한 다른 기능에 영향을 미치므로 WORDCHARS를 전역적으로 설정하고 싶지 않습니다.

위의 모든 사항을 충족하는 솔루션은 다음과 같습니다.

        # Ctrl-w - delete a full WORD (including colon, dot, comma, quotes...)
        my-backward-kill-word () {
            # Add colon, comma, single/double quotes to word chars
            local WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>:,"'"'"
            zle -f kill # Append to the kill ring on subsequent kills.
            zle backward-kill-word
        }
        zle -N my-backward-kill-word
        bindkey '^w' my-backward-kill-word

관련 정보