不要在Vim里过度使用hjkl

74次阅读

共计 1135 个字符,预计需要花费 3 分钟才能阅读完成。

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

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

跳转到行

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

<line>G<line>gg 的作用相同,但我觉得连按两次 g 要比按住 shift 更容易。

以词为单位的移动

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

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

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

跳到指定字符

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

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

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

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

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

关键词查找

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

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

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

应不应该使用 easymotion?

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

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

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

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

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

正文完
 0