Command-Line

zsh:使 ALT+BACKSPACE 在非字母數字字元處停止

  • January 23, 2021

zsh預設情況下,CTRL+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。我本以為只=應該被吃掉,因為它應該停在'

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

實際上,我沒有在 zsh 綁定中看到它,但如果為bindkey顯示它,那麼它可以通過綁定到您定義的函式來配置。

根據我的回答工作

我使用列表中某人(Oliver Kiddle)貢獻的這一點;查看
10 月 8 日星期一的檔案,以獲取更多資訊:

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

我將它綁定到 control-W:
bindkey '^W' tcsh-backward-delete-word

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

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

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

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

定義函式時,不要忘記將其添加為keymap

zle -N tcsh-backward-delete-word

引用自:https://unix.stackexchange.com/questions/313806