Vim 光标移动

上一节中我们介绍了 Vim 的基本操作,靠着 i:x等指令,配合上方向键,基本上能在 Vim 的世界里幸存下来了。勉强编辑一下服务器上的文件不是问题。

如果你的打字手势标准的话,你会发现方向键其实挺难触摸到,至少会破坏右手的姿势。因此在 Vim 中不鼓励使用方向键,可以用 hjkl 来代替:

  1. h:向左移动一个字符
  2. l:向右移动一个字符
  3. j:向下移动一行
  4. k:向上移动一行

重复移动

如果要向上移动 5 行,或者向右移动 10 个字符,我们是不是要重复按下很多次呢?显然只有方向键才要这么做,Vim 中可以用数字来表示重复:

  1. 10j: 向下移动 10 行
  2. 5l:向右移动五个字符

这个操作虽然简单,但是引出了两个很有意思的话题。首先,Vim 中的行号应该配置为相对行号 + 绝对行号:

图中左侧高亮显示的 22 是当前的绝对行号,上下都是相对偏移量。这样的好处在于既方便知道当前的位置,又方便通过相对行号进行跳转。

另一个话题则是贯穿 Vim 始终的核心思想:就像英语、中文有语法一样,Vim 也有语法。

Vim 的操作可以由若干个部分组合而成,每个部分又有多个可选值(比如光标移动就分上下左右)。Vim 的入门难度高,是因为每个部分都要学习,一下子需要掌握很多新知识点。但 Vim 后期的学习成本很低,因为无非就是各种组合而已。

还是以光标移动为例,5j重复次数动作组成,后面我们会介绍更多的动作,而且它们的前面都可以加上数字表示重复。

单词移动

前面我们讲过利用 Option 键进行单词间移动,得益于普通模式和语法,Vim 支持更强大的单词间移动:

  1. w移动光标到下一个单词的词首(word)
  2. b 移动光标到上一个单词的词首(begin)
  3. e移动光标到下一个单词的结尾(end)
  4. ge移动光标到上一个单词的结尾(不知道怎么解释了。。。)

这里的单词是有严格约定的,而且不是那么显然,所以个人感觉这几个键并不是特别好用(往往你以为的跳转地址和真实跳转地址并不一致)。

不过如果你把空格当做单词的分隔符,倒是有比较简单的跳转方式,前三个命令都有大写格式:

  1. W 移动光标到下一个单词的词首(word)
  2. B 移动光标到上一个单词的词首(begin)
  3. E 移动光标到下一个单词的结尾(end)

这里的单词特指以空格分割。

同样的,这些移动也支持重复任意多次

在后面的插件一节中,我会介绍如何用 EasyMotion 来让光标移动变得简单。

行和屏幕移动

在行内,^ 表示移动到行首,它会自动忽视掉行首的空格,大部分情况下这是符合预期的,尤其是在代码缩进的情况下。如果想回到行首的空格上,可以用 0$ 表示移动到行尾。

Vim 的翻页快捷键是:

  1. Ctrl + f:向后翻一页(forward)
  2. Ctrl + b:向前翻一页(backward)
  3. Ctrl + d:向后翻半页(down)
  4. Ctrl + u:向前翻半页(up)

很巧的是,前两个命令和系统输入框内的,向左向右移动一个字符的快捷键是一样的。后两个命令(u 和 d)则被 Vimium 借鉴,用于浏览器的翻页。

还有几个快捷键可以用于调整页面布局:

  1. zz:让当前行居中显示,方便浏览上下文
  2. zt:让当前行显示在最上方,方便浏览后面的内容(t 表示 top)
  3. zb:让当前行显示在最下方,方便浏览前面的内容(b 表示 bottom)

高级移动

代码中经常遇到括号(包括 ([{,也就是大中小三中括号),如果当前光标停留在括号上,按下 % 即可匹配到对应的括号上。

除此以外,*#分别表示匹配当前光标下的单词,并移动到下一个单词和上一个单词

results matching ""

    No results matching ""