默认情况下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