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

400*_*Cat 6 zsh

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

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

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

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

我可以WORDCHARS只为forward-wordand使用不同的backward-word吗?

Sté*_*las 8

您可以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
Run Code Online (Sandbox Code Playgroud)

或重新定义{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
Run Code Online (Sandbox Code Playgroud)

另请参阅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
Run Code Online (Sandbox Code Playgroud)

您将获得*ward-wordbackward-kill-word小部件的基于“空间”的字样,以及其他字小部件的Alt+Z初始“正常”$WORDCHARS字样。