更新

更新

預設情況下zshCTRL+wALT+Backspace似乎具有完全相同的效果。

如何保持CTRL+w不變,並更改ALT+Backspace使其停在非字母數字字元。

即,當遊標位於以下命令的末尾時:echo /aaa/bbb/ccc,按CTRL+w應該離開echo,而按ALT+Backspace應該離開echo /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+BackSpacebackward-delete-word應該停止於'

這在第一個範例中有效,但在第二個範例中無效:

$ echo 'asdf'
$ echo '

$ echo '=asdf'
$ echo '=
$

在第二個範例中,我echo '=離開了命令列。我按了Alt+BackSpace第二次之後,所有的東西都吃完了,包括echo。我以為我=應該被吃掉,因為它應該停在'

為什麼這沒有如預期工作?

答案1

實際上我沒有看到 zsh 綁定中列出這個,但如果bindkey顯示它,然後可以透過綁定到您定義的函數來配置它。

根據我的回答進行工作

    我使用名單上某人(奧利佛·基德爾)貢獻的這一點;查看
    有關詳細信息,請參閱 10 月 8 日星期一的檔案:

    tcsh-向後刪除-word () {
      本機 WORDCHARS="${WORDCHARS:s#/#}"
      zle 向後刪除單字
    }

    我將它綁定到 control-W :
    綁定鍵 '^W' tcsh-向後刪除-word

    但顯然你可以改變這一點。

    我想這就是你要找的,不是嗎?

    '$WORDCHARS' 變數是 zsh 決定單字邊界的方式,以便您
    可以在全域範圍內添加“/”,但這可能會影響其他事情
    你想保留它,所以我更喜歡這個功能。

因此:您可以$WORDCHARS在自己的函數中用作局部變量,根據需要定義單詞,並將其綁定到任意鍵。

當您定義函數時,請不要忘記將其添加為鍵位圖:

zle -N tcsh-backward-delete-word

相關內容