常用模式

前面我们讲到很多模式,insert 模式,normal 模式,你难免会觉得不知所云,该章节我们将着重了解下 Vim 中的常用的几种模式。

在 Vim 中常用模式如下

  • normal 模式
  • insert 模式
  • visual 模式
  • command 模式
  • replace 模式

normal 模式

当我们使用 vim 进入 Vim 编辑器时,默认就是 normal 模式。

我们大部分时间都呆在该模式下,该模式下,我们几乎可以做除了插入数据以外的任何操作,其中一部分就是上一章我们讲到的那些。

一般情况下,我们都是从 normal 模式去到其他的模式进行操作,如果想回来,那就按 <esc> 键,有时候你可能会搞不清楚现在在哪个模式下,多按几下 <esc> 返回 normal 模式总是没有错的。因为接下讲到的其他模式都是从 normal 模式进入的。

insert 模式

normal 交互最频繁的就是 insert 模式,不管我们的光标移动多灵活,最终目的就是去往该去的地方,然后插入数据。

在该模式下,我们可以像其他 IDE 一样,输入所有我们需要输入的信息。

在该模式下,光标移动不会很方便,默认情况下只能通过键盘方向键和鼠标来移动。所以才需要返回 normal 模式移动光标,再进入 insert 模式,如此往复,开始你会觉得很别扭,经常按错键,但是练熟以后你会爱上它的,因为 normal 模式下操作真的很方便。不过在 insert 模式中也想手不离开键盘中心区,就进行短距离的移动也不是不可以,不过需要配置一下我们的 Vim 编辑器,当然,这是后话,以后我再介绍。

进入 insert 模式有很多种方式,除了最常用的 i 还有如下方式

  1. i " 在光标前进入 insert 模式
  2. I " 在当前行左边第一个非空字符前进入 insert 模式,类似其他编辑器的 <c-a> 快捷键
  3. a " 在光标后进入 insert 模式
  4. A " 在当前行右边第一个非空字符前进入 insert 模式,类似其他编辑器的 <c-e> 快捷键
  5. o " 在光标的下一行插入
  6. O " 在光标的上一行插入
  7. s " 删除当前字符,并进入 insert 模式"
  8. S " 删除当前行,并进入插入模式
  9. cc " 删除当前行,并进入插入模式

这就已经很多了,对吧。但是除了这些“循规蹈矩”的操作外,还有很多更方便,更有趣的键位,比如 c 键,就可以引申出许多高效的插入方式,但是不要贪多,我们慢慢学。

现在你应该立马练习起来,把每个键位先尝试一下,然后忘掉几个,只先频繁使用几个你最常用的方式,我建议先从 i, a, o, cc 开始,你觉得?

visual 模式

visual 模式之前我们没有提过,它的使用频率仅此于前面两位。

使用 v 可以进入 visual 模式,先举个例子,使用之前下载的 Object.java 练习

(1)编辑 Object.java

  1. $ vim Object.java

(2)移动光标到第 3 行 DO 的 D 字母上

  1. jjlll

(3)进入 visual 模式,并选中单词

  1. vl

(4)复制粘贴

  1. yp

你会得到 DDOO 这样的结果,我们完成了选中指定单词、复制、粘贴的操作。

visual 模式简单来说,是选中一些字符,是指进入一个“块”中,我们可以对这个块进行删除、复制等简单或复杂的操作

进入 visual 模式后,我们可以使用上一章讲到的所有移动光标的操作来扩大“块”的范围,比如

全选

  1. ggvG

选中光标到行尾最后一个非空字符

  1. vg_

这里我们说下 g_$ 区别,如果你在相同的位置分别进行 v$ypvg_yp 两个操作,你会发现,前者在粘贴完复制的内容后会换行,后者则不会,因为 v$ 将行尾的回车符也覆盖了进去,通过选中的范围你也可以看到区别,在大多数情况下,这都不是我们想要的,所以这一点是需要注意的。

有三种方式可以进入 visual 模式

  1. v " 选中当前字符,并进入 visual 模式,随着光标的游走来选中字符
  2. V " 选中当前行,并进入 visual 模式,随着光标的上下移动整行选中字符
  3. <c-v> " 选中当前字符,并进去 visual 模式,随着光标的移动以长方形的模式选中字符

第三种方式在批量操作文本时很有用,以后我们会重点讲这个功能。

command 模式

command 模式顾名思义就是命令行模式,该模式下可以执行保存推出、分割窗口、插件管理等命令。

按下 : 进入 command 模式,输入命令后回车 <cr> 生效。举个例子,假设一个场景,我们在编辑一个新文件时,需要使用另一个文件的内容,想对照着内容来写,反复的推出进入肯定不是我们想要的,开两个客户端也不是个好办法,这时我们需要使用分割窗口的功能。

(1)先打开一个新文本

  1. $ vim newfile

(2)分割窗口

  1. :vsp Object.java

此时,你会看到窗口被垂直分割为左右两个界面,左边是新打开的文件

(3)文件间移动光标

这个操作会稍微复杂点,<c-w> + 方向键,就是在按住 <ctrl>w 的同时再按下 hl

  1. <c-w>l

打开新文件后,光标默认在后打开的文件中,按照上边的操作可以把光标移动到我们想要编辑的文本中,你可以使用左右方向键反复操作几次,这是我们第一次使用三个键位完成工作,需要多练习几次。

该模式下的其他操作,都是在高级功能中频繁用到的,后期我们会着重讲解。

replace 模式

replace 模式的使用频率相对较少,主要在替换单个或连续多个字符时使用。

将光标移动到想要替换的字符上,按下 r 进入 replace 模式,然后按下按下任意字符,此时你会看到字符已经替换成功,并且自动返回 normal 模式。

如果你想要连续替换多个字符,需要使用 R,比如有一个单词 code,我们将光标移动到 c 上,然后按下 R,随后键入 name,你会发现整个单词被替换过来,并且现在仍然停留在 replace 模式下,需要按下 <esc> 才会返回 normal 模式

  1. r " 替换单个字符,自动返回 normal 模式
  2. R " 连续替换多个字符,手动 <esc> 返回 normal 模式

该模式在使用得当的情况下,会让开发非常有效率,同样的,我们需要多加练习才行。

现在我们讲的这么多模式,并不是让你全到牢记,你难免会迷糊,没有关系,现在你只需要大概了解有这么个东西,后面我们会经常用到这些名词,看得多了也就熟了。

2018-04-08 发布

2018-04-11 最后修改