400*_*Cat 8 command-line keyboard-shortcuts zsh
在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
Run Code Online (Sandbox Code Playgroud)
现在命令行编辑器的行为与我预期的不同。
例如,单引号字符'未在 my 中枚举WORDCHARS,因此当我按下 时Alt+BackSpace,backward-delete-word应该停在'。
这适用于第一个示例,但不适用于第二个示例:
$ echo 'asdf'
$ echo '
$ echo '=asdf'
$ echo '=
$
Run Code Online (Sandbox Code Playgroud)
在第二个例子中,我echo '=离开了命令行。在我Alt+BackSpace第二次按下后,所有东西都被吃掉了,包括echo. 我原以为只=应该被吃掉,因为它应该在'.
为什么这不能按预期工作?
实际上,我没有在 zsh bindings 中看到它,但是如果bindkey为您显示它,那么它可以通过绑定到您定义的函数来配置。
从我的回答开始
如何在 zsh 中删除斜杠或单词?, 我找到了这个:
我使用了名单上的某个人(奥利弗·基德尔)贡献的这一点;查看
10 月 8 日星期一的档案,了解更多信息:
tcsh-backward-delete-word () {
本地 WORDCHARS="${WORDCHARS:s#/#}"
zle 向后删除词
}
我将它绑定到 control-W:
bindkey '^W' tcsh-backward-delete-word
但你显然可以改变这一点。
我想这就是你要找的,不是吗?
'$WORDCHARS' 变量是 zsh 确定单词边界的方式,因此您
可以在全局范围内添加“/”,但这可能会影响其他事情
你想留下它,所以我更喜欢这个功能。
这导致使用的例子$WORDCHARS在修改的zsh壳字分离,以及维基
所以:您可以$WORDCHARS在自己的函数中用作局部变量,根据需要定义单词,并将其绑定到任意键。
定义函数时,不要忘记将其添加为键映射:
zle -N tcsh-backward-delete-word
Run Code Online (Sandbox Code Playgroud)