zsh:对kill-word和forward-word/backward-word使用不同的WORDCHARS

zsh:对kill-word和forward-word/backward-word使用不同的WORDCHARS

当我不包含/in 时WORDCHARS,即:

WORDCHARS='~!#$%^&*(){}[]<>?.+;-'

然后kill-word按需要工作:使用Alt+ d,我可以删除部分文件系统路径(在每个 处停止/)。

但是当使用Ctrl+RightCtrl+时Left,我希望有不同的行为:我不希望光标停在每个 处/。我想跳过整个路径作为一个词。

我可以WORDCHARS仅对forward-wordand使用不同的值吗backward-word

答案1

您可以使用bindvi-{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

相关内容