我最近开始使用带有 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-words
up-case-word
它还会影响 glob 模式扩展。例如,添加+
使!" /bin/?[![:WORD:]]##
匹配/bin/c++
, /bin/g++
。