Command-Line
zsh:使 ALT+BACKSPACE 在非字母數字字元處停止
在
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
。我本以為只=
應該被吃掉,因為它應該停在'
。為什麼這沒有按預期工作?
實際上,我沒有在 zsh 綁定中看到它,但如果為您
bindkey
顯示它,那麼它可以通過綁定到您定義的函式來配置。根據我的回答工作
- 如何在 zsh 中刪除斜杠或單詞?, 我找到了這個:
- zsh:在目錄分隔符上停止向後殺死字,它指向
- 回复:backward kill,Will Yardley 給出了這個例子:
我使用列表中某人(Oliver Kiddle)貢獻的這一點;查看 10 月 8 日星期一的檔案,以獲取更多資訊: tcsh-backward-delete-word () { 本地 WORDCHARS="${WORDCHARS:s#/#}" zle 向後刪除字 } 我將它綁定到 control-W: bindkey '^W' tcsh-backward-delete-word 但你顯然可以改變這一點。 我想這就是你要找的,不是嗎? '$WORDCHARS' 變數是 zsh 確定單詞邊界的方式,因此您 可以在全域範圍內添加“/”,但這可能會影響其他事情 你想留下它,所以我更喜歡這個功能。
- 這導致了
$WORDCHARS
在*修改 zsh shell word split*以及 wiki中使用的範例- zle:綁定鍵
所以:您可以
$WORDCHARS
在自己的函式中用作局部變數,根據需要定義單詞,並將其綁定到任意鍵。定義函式時,不要忘記將其添加為keymap:
zle -N tcsh-backward-delete-word