更新

更新

默认情况下zshCTRL+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。我本以为=应该被吃掉,因为它应该停在'

为什么这没有按预期工作?

答案1

实际上我没有看到 zsh 绑定中列出这个,但如果bindkey显示它,然后可以通过绑定到您定义的函数来配置它。

根据我的回答进行工作

    我使用名单上某人(奥利弗·基德尔)贡献的这一点;查看
    有关详细信息,请参阅 10 月 8 日星期一的档案:

    tcsh-向后删除-word () {
      本地 WORDCHARS="${WORDCHARS:s#/#}"
      zle 向后删除单词
    }

    我将它绑定到 control-W :
    绑定键 '^W' tcsh-向后删除-word

    但显然你可以改变这一点。

    我想这就是你要找的,不是吗?

    '$WORDCHARS' 变量是 zsh 确定单词边界的方式,以便您
    可以在全局范围内添加“/”,但这可能会影响其他事情
    你想保留它,所以我更喜欢这个功能。

因此:您可以$WORDCHARS在自己的函数中用作局部变量,根据需要定义单词,并将其绑定到任意键。

当您定义函数时,不要忘记将其添加为键位图

zle -N tcsh-backward-delete-word

相关内容