Vim 中已经提供了非常多移动的动作,从简单的字符间移动 (jkhl),到 word 间 (w/e/b),句子间 ((
/)
),段落间 ({/}),行首行尾 (0/^/$),文档开始 (gg),文档结尾 (G),还有搜索 (/
/np
) 等等一系列的操作,但 easy-motion 将 Vim 中的移动又提升了一个高度。
继续往下阅读之前先确保阅读了 vim 文档中关于 motion 的内容。
想象一个场景,想要跳转到当前行下一个段落中的第二个句子的第三个单词开头,使用上面提到的方法,可能需要按下不同的按键,并且可能还需要组合使用,那有没有什么方法能降低这个移动(或者说跳转)操作的复杂度呢?答案就是 easy-motion。不知道有多少人用过 Chrome 下的 Vimium 插件,在网页中按下 f
,页面中每一个能点击的地方都会显示几个字符,然后按下字符就会相当于在页面上点击,easy-motion 也使用相同的方式实现这一功能。
easy-motion 插件提供了更强的移动操作,在 easymotion 的官方文档中是这样定义 easymotion 的,easymotion 可以将 <number>w
或者 <number>f{char}
简化为几个按键的操作,举一个简单的例子,在 easymotion 下,如果按下 w
,那么 easymotion 会高亮所有 w
(下一个词首) 的结果,然后只需要按下一个键,就可以跳转到任何 w
按键按下后的目标地址。
Install
Plug 'easymotion/vim-easymotion'
Usage
:help easymotion
Easymotion 的触发需要按下两次 <leader><leader>
,当然推荐熟悉之后使用 vim 的 map 配置更改一下 leader.
Default Mapping | Details
---------------------|----------------------------------------------
<Leader>f{char} | Find {char} to the right. See |f|.
<Leader>F{char} | Find {char} to the left. See |F|.
<Leader>t{char} | Till before the {char} to the right. See |t|.
<Leader>T{char} | Till after the {char} to the left. See |T|.
<Leader>w | Beginning of word forward. See |w|.
<Leader>W | Beginning of WORD forward. See |W|.
<Leader>b | Beginning of word backward. See |b|.
<Leader>B | Beginning of WORD backward. See |B|.
<Leader>e | End of word forward. See |e|.
<Leader>E | End of WORD forward. See |E|.
<Leader>ge | End of word backward. See |ge|.
<Leader>gE | End of WORD backward. See |gE|.
<Leader>j | Line downward. See |j|.
<Leader>k | Line upward. See |k|.
<Leader>n | Jump to latest "/" or "?" forward. See |n|.
<Leader>N | Jump to latest "/" or "?" backward. See |N|.
<Leader>s | Find(Search) {char} forward and backward.
| See |f| and |F|.
下面将 <leader><leader>
简写成 <ll>
向后向前跳转
<ll>w
<ll>b
双向跳转
<ll>s
向上向下跳转到行:
<ll>j
<ll>k