当我不包含/
in 时WORDCHARS
,即:
WORDCHARS='~!#$%^&*(){}[]<>?.+;-'
然后kill-word
按需要工作:使用Alt+ d,我可以删除部分文件系统路径(在每个 处停止/
)。
但是当使用Ctrl+Right和Ctrl+时Left,我希望有不同的行为:我不希望光标停在每个 处/
。我想跳过整个路径作为一个词。
我可以WORDCHARS
仅对forward-word
and使用不同的值吗backward-word
?
答案1
您可以使用bind
小vi-{back,for}ward-blank-word
部件来Ctrl+{left,right}:
bindkey $'\E[1;5D' vi-backward-blank-word
bindkey $'\E[1;5C' vi-forward-blank-word
或重新定义{back,for}ward-word
小部件以使用不同的WORDCHARS
(因此它会影响Alt+{B,F}使用这些小部件的其他绑定(例如)):
WORDCHARS='~!#$%^&*(){}[]<>?.+;-'
MOTION_WORDCHARS='~!#$%^&*(){}[]<>?.+;-/'
''{back,for}ward-word() WORDCHARS=$MOTION_WORDCHARS zle .$WIDGET
zle -N backward-word
zle -N forward-word
也可以看看info zsh select-word-style
让框架能够动态选择字型。
您还可以使用它为不同的小部件选择不同的文字样式,例如:
autoload -U select-word-style
zle -N select-word-style
bindkey '\ez' select-word-style
WORDCHARS='~!#$%^&*(){}[]<>?.+;-' # for the "normal" style
select-word-style normal
zstyle ':zle:*ward-word' word-style space
zstyle ':zle:backward-kill-word' word-style space
*ward-word
您将获得和 小部件的基于“空格”的文字样式backward-kill-word
,以及其他文字小部件的Alt+Z最初“正常”的基于“空格”的文字样式。$WORDCHARS