不要在Vim里过度使用hjkl

和方向键相比,hjkl方便很多,因为你不需要把手指从定位行移开。然而,在Vim中过度使用它们反倒会成为高效编辑的阻碍,因为它们一次只能移动一个字符的位置。

Vim提供了很多其他的移动操作,能够让我们一次移动更多距离。

跳转到行

如果你发现你用了太多的jjjj或者kkkk,那么你可以考虑用gg来代替它们(例如:用12gg跳转到第12行)。

Ggg的作用相同,但我觉得连按两次g要比按住shift更容易。

以词为单位的移动

如果你用了太多h或者l,那么你可以考虑使用wbw移动到下一个单词的开头,b移动到上一个单词的开头。还有另一个相似的命令e,它移动到下一个单词的结尾。

如果当前行有太多标点符号,那么wb会变得很难用,因为每一个标点符号都会被当作一个单词(Vim对单词的定义是一串连续的字母、数字和下划线;详细的文档在:h iskeyword)。

大多数时候,我发现WBE更好用;它们也是以单词为单位移动的,但是它们以空格来分割单词。因此,它们的分词结果更符合直觉。

跳到指定字符

fF可以跳到下一个或者上一个出现的位置(仅限于当前行内)。在编程中,使用他们跳转到下一个小括号或者中括号很方便,例如:f)或者F[

在使用fF之后,可以使用;,跳转到这个字符下一次/上一次出现的位置;类似于在使用/之后用nN在多个查找结果之间跳转。

另一个略有差异的命令是t;它跳转到的前一个字符。

t通常用来与ycd等命令组合,例如:使用ct)删除从当前字符到下一个)之前的所有字符并进入插入模式。

我通常用f与标点符号搭配,而不是字母。因为人们更容易发现标点符号的位置,而比较难发现特定字母的位置。

关键词查找

Vim中最常被忽视的命令之一就是*。它的用途是跳转到当前关键词下一次出现的位置,相当于/

在使用*之后,你也可以用nN跳转到下一个或上一个位置。

如果希望反向找到当前关键词上一次出现的位置,可以使用g*

应不应该使用easymotion?

Easymotion是一个很有创造性的插件。它提供了一套全新的跳转方法:首先你指定一种跳转方式,然后再敲一两个按键跳转到任何一个候选位置。

然而,它在实际使用中也有一些缺点。

如果你在Vim里安装了实时语法检查,那么它有可能和语法检查相冲突,因为它会临时修改buffer的内容。

另一个问题是它缺少可预测性:直到它提示你所有的候选位置之前,你是不知道该敲入哪些键的。因此,使用easymotion时很难形成肌肉记忆。

但我认为easymotion仍然是一个很有意思的插件,很值得一试。

你可能感兴趣的:(vim)