Skip to main content

VIM工作模式

vim一共有五种模式: vivim的工作模式是不同的,这里要分开来讲。

一、vi工作模式

1.命令行模式(command mode/一般模式)

任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动vi命令,进入编辑器时,也是处于该模式下。

在该模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,vi会响铃报警。

vi a.txt

2.文本输入模式(input mode/编辑模式)

在命令模式下输入插入命令i(insert)、附加命令a(append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令行模式下,按”ESC”键即可。

3.末行模式(last line mode/指令列命令模式)

末行模式也称转义模式。

viEx编辑器的功能是相同的,二者主要区别是用户界面。在vi中,命令通常是单个键,例如iao等;而在Ex中,命令是以按回车键结束的正文行。vi有一个专门的“转义”命令,可访问很多面向行的Ex命令

在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。

:wq!

二、vim工作模式

vim具有6种基本模式和5种派生模式。

1. 基本模式

1.1 普通模式

在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

Vim强大的编辑能力来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令"dd"删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个"d",比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,"2dd"(重复"dd"两次),和"dj"的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

以下是进入普通模式的方法:

  • vim命令文件:默认是普通模式;
  • ESC:此命令用于从其他模式返回普通模式。

1.2 插入模式

在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按"a"(append/追加)键或者"i"(insert/插入)键。

在这个模式中,大多数按键都会向文本缓冲区中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

在插入模式中,可以按ESC键回到普通模式。

可以使用以下命令进入插入模式:

  • a:进入插入模式,且光标定位到当前字符后;
  • A:进入插入模式,且光标定位到行尾;
  • i:进入插入模式,且光标定位到当前字符前;
  • I:进入插入模式,且光标定位到行首;
  • o:进入插入模式,且在当前行后插入新行;
  • O:进入插入模式,且在当前行前插入新行;
  • cw:进入插入模式,替换从光标所在为孩子到一个单词结尾的字符;

1.3 可视化模式

可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。

这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。

可以使用以下命令来开始可视化模式:

  • v:进入字符可视化模式;
  • V:进入行可视化模式;
  • <Ctrl>+v:进入块可视化模式;

1.4 选择模式

这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

选择模式是另一种的可视化模式,它可以允许我们对选中的文本进行快速的删除和替换操作。我们可以高亮显示文本,然后使用Backspace来删除这段文本;也可以高亮显示文本,然后用输入的内容来替换这些文本。

选择模式于可视化模式的区别在于:在可视化模式下,我们选中文本后可以执行命令操作,如复制、粘贴等,而在选择模式下,选中文本后可执行的操作仅限于Backspace和可打印的字符,因为不需要输入命令,所以我们的操作变得更为简单,但同时也有很多限制。

可以用以下命令来开始一种选择模式:

  • gh:进入字符选择模式;
  • gH:进入行选择模式;
  • gCTRL-H:进入块选择模式;

1.5 命令行模式

在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(":"键),搜索("/"和"?"键)或者过滤命令("!"键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。

可以使用以下命令来开始命令行模式:

  • ::保存、替换、退出、显示行号等;
  • /:在光标之后查找一个字符串,按n向后继续搜索,shift+n向上搜索;
  • ?:在光标之前查找一个字符串,按n向后继续搜索;
  • !

1.6 Ex模式

这和命令行模式比较相似,在使用":visual"命令离开Ex模式前,可以一次执行多条命令。

很久很久以前,人们还是使用打印设备而非显示器来与计算机进行沟通。比如打印出某行代码以确定需要修改的内容,然后针对文本进行操作,再次打印以检查变更效果。在此情形之下,行号就成为有效的定位工具。虽然,今天我们已经不再如此依赖打印设备,但是基于行编辑的Ex模式,在操作文本时还是有某些优势的:比如将文本从一个文件移动到另一个文件;快速地对大于单个屏幕的文本块进行编辑;针对整个文件中的特定模式进行全局替换等等。

可以说,Vim是Ex行编辑器的可视模式。或者说,Ex是Vim的底层行编辑器。

  • ex filename:可以进入Vim的Ex模式
  • s/Hello/Hi:将第一个"Hello"替换为"Hi"
  • 1,6s/Hello/Hi:如果我们在命令中指定了行号,那么命令将作用于指定的行范围
  • vi:使用以下命令,可以退出Ex模式,并进入常规模式
  • q:使用以下命令,可以退出Ex模式,并返回到操作系统的命令行提示符下

2. 派生模式

2.1 操作符等待模式

这个派生模式指普通模式中,执行一个操作命令后Vim等待一个"动作"来完成这个命令。Vim也支持在操作符等待模式中使用"文本对象"作为动作,包括"aw"一个单词(a word)、"as"一个句子(a sentence)、"ap"一个段落(a paragraph)等等。

比如,在普通模式下"d2as"删除当前和下一个句子。在可视模式下"apU"把当前段落所有字母大写。

2.2 插入普通模式

这个模式是在插入模式下按下ctrl-o键的时候进入。这个时候暂时进入普通模式,执行完一个命令之后,Vim返回插入模式

2.3 插入可视模式

这个模式是在插入模式下按下ctrl-o键并且开始一个可视选择的时候开始。在可视区域选择取消的时候,Vim返回插入模式。

2.4 插入选择模式

通常这个模式由插入模式下鼠标拖拽或者shift方向键来进入。当选择区域取消的时候,Vim返回插入模式。

2.5 替换模式

这是一个特殊的插入模式,在这个模式中可以做和插入模式一样的操作,但是每个输入的字符都会覆盖文本缓冲中已经存在的字符。在普通模式下按"R"键进入。