zsh — oh-my-zsh 的 ^W 行为

zsh — oh-my-zsh 的 ^W 行为

我最近开始使用带有 oh-my-zsh 脚本包的 ZHS。除了奇怪的 ^W 快捷键行为外,它表现非常出色。

例如,如果我有以下命令行,并且符号▮表示光标位置。

$ ./command_name --option1 value --option2=value ▮

连续按 ^W 几次,我会在命令提示符中得到以下内容:

$ ./command_name --option1 value --option2=▮
$ ./command_name --option1 value --▮
$ ./command_name --option1 ▮
$ ./command_name --▮
$ ./command_▮
$ ./▮

让我烦恼的是,第三次按下 后,光标不仅在删除 后停止--,而且还会吃掉value。我怀疑所有符号(例如“_-”)都被视为空格分隔符,并且 zsh 会继续吃掉符号,直到删除一些非分隔符字符,但我不知道如何更改此行为。

答案1

为了修复这个(默认)行为,你需要让 Zsh 使用 vi-style backward-kill-word

将其放入您的~/.zshrc

bindkey '^W' vi-backward-kill-word

现在,它将杀到以下位置:

$ ./command_name --option1 value --option2=▮
$ ./command_name --option1 value --option2▮
$ ./command_name --option1 value --▮
$ ./command_name --option1 value ▮
$ ./command_name --option1 ▮
$ ./command_name --▮
$ ./command_name ▮
$ ./▮
$ ▮

答案2

因为您的情况下WORDCHARS不包含-_./=,从行编辑器的角度来看它看起来像:

$   command name   option1 value   option2 ▮
$   command name   option1 value   ▮
$   command name   option1 ▮
$   command name   ▮
$   command ▮
$   ▮

换句话说,=--_./被视为空格。

添加更多单词字符不仅可以修复所有单词小部件,backward-kill-word还可以修复所有单词小部件,其中包括copy-prev-word、、、等等。transpose-wordsup-case-word

它还会影响 glob 模式扩展。例如,添加+使!" /bin/?[![:WORD:]]##匹配/bin/c++, /bin/g++

相关内容