






















很早以前,我就想,在命令比较长的时候,M-f和M-b按单词移动太慢了,特别是遇到长的 URL 或者文件名的时候。用鼠标吧,选择文本又比较麻烦了。所以很希望按 shell 参数来移动的功能,甚至尝试自己写过,但是因为对 zsh 了解太少,终究移动不正常。
昨天夜读 zsh 手册时才发现,原来,我曾见过这个功能的背影。
文档 26.6.1 节(「User Contributions」->「ZLE Functions」->「Widgets」)第一个,讲的是「bash-style word functions」。之前我也在哪里看到过,但是不知道其实这家伙支持好几种风格。使用以下配置就可以把 ZLE 里原来的「单词」概念变成 shell 解析出来的参数了:
autoload -Uz select-word-style select-word-style shell
但是,我不想替换掉默认的,而是使用另外的键来这样子移动。研究了下代码,最终弄出来了:
# move by shell word {{{2
zsh-word-movement () {
# see select-word-style for more
local -a word_functions
local f
word_functions=(backward-kill-word backward-word
capitalize-word down-case-word
forward-word kill-word
transpose-words up-case-word)
if ! zle -l $word_functions[1]; then
for f in $word_functions; do
autoload -Uz $f-match
zle -N zsh-$f $f-match
done
fi
# set the style to shell
zstyle ':zle:zsh-*' word-style shell
}
zsh-word-movement
unfunction zsh-word-movement
bindkey "\eB" zsh-backward-word
bindkey "\eF" zsh-forward-word
bindkey "\eW" zsh-backward-kill-word
只绑了M-B、M-F和M-W这三个含大写字母的组合键。其它-match函数的功能以后用到时再加好了。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。