本文来自依云's Blog,转载请注明。
很早以前,我就想,在命令比较长的时候,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
函数的功能以后用到时再加好了。
Nov 18, 2013 03:12:54 PM
跟着仙子大大总有好东西用
Jun 04, 2014 06:09:49 PM
很受用,之前我是将key repeat speed 调到最大的
Dec 29, 2019 12:01:19 AM
这个问题也困扰我很久了, 学到了!
顺便安利一下 zce.zsh, 进行复杂的定位时很方便.
Dec 29, 2019 01:52:01 PM
这个跟 jump-target 很像呢。