Zsh

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

  • January 16, 2022

當我不包括在內/WORDCHARS,即:

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

然後kill-word按需要工作:使用Alt+ d,我可以刪除部分文件系統路徑(停在每個/)。

但是當使用Ctrl+RightCtrl+時Left,我希望有不同的行為:我不希望游標停在每個/. 我想一個字跳過整個路徑。

我可以WORDCHARS只對forward-wordand使用 differentbackward-word嗎?

您可以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-wordbackward-kill-word小元件的基於“空格”的單詞樣式,以及由 選擇的任何內容Alt+Z,最初是“正常”,$WORDCHARS其他單詞小元件的基於 - 的單詞樣式。

引用自:https://unix.stackexchange.com/questions/537178