VIM工作模式
vim
一共有五种模式:
vi
于vim
的工作模式是不同的,这里要分开来讲。
一、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/指令列命令模式)
末行模式也称转义模式。
vi
和Ex
编辑器的功能是相同的,二者主要区别是用户界面。在vi
中,命令通常是单个键,例如i
、a
、o
等;而在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
"键进入。