預設情況下zsh
,CTRL+w和ALT+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+BackSpace,backward-delete-word
應該停止於'
。
這在第一個範例中有效,但在第二個範例中無效:
$ echo 'asdf'
$ echo '
$ echo '=asdf'
$ echo '=
$
在第二個範例中,我echo '=
離開了命令列。我按了Alt+BackSpace第二次之後,所有的東西都吃完了,包括echo
。我以為我=
應該被吃掉,因為它應該停在'
。
為什麼這沒有如預期工作?
答案1
實際上我沒有看到 zsh 綁定中列出這個,但如果bindkey
顯示它你,然後可以透過綁定到您定義的函數來配置它。
根據我的回答進行工作
如何刪除 zsh 中的斜線或單字?, 我找到了這個:
- 回覆:向後殺,以威爾·亞德利 (Will Yardley) 為例:
我使用名單上某人(奧利佛·基德爾)貢獻的這一點;查看 有關詳細信息,請參閱 10 月 8 日星期一的檔案: tcsh-向後刪除-word () { 本機 WORDCHARS="${WORDCHARS:s#/#}" zle 向後刪除單字 } 我將它綁定到 control-W : 綁定鍵 '^W' tcsh-向後刪除-word 但顯然你可以改變這一點。 我想這就是你要找的,不是嗎? '$WORDCHARS' 變數是 zsh 決定單字邊界的方式,以便您 可以在全域範圍內添加“/”,但這可能會影響其他事情 你想保留它,所以我更喜歡這個功能。
這導致了使用的
$WORDCHARS
例子修改zsh shell分詞,以及維基百科
因此:您可以$WORDCHARS
在自己的函數中用作局部變量,根據需要定義單詞,並將其綁定到任意鍵。
當您定義函數時,請不要忘記將其添加為鍵位圖:
zle -N tcsh-backward-delete-word