缘由:又一次被队友吐槽:咋连vim都不会用?!~( ╯□╰ )~。。。这就尴尬了,于是赶紧找一波资料,做一下笔记,方便下次查找和理解。

一. vim的三种模式

vim共有三种模式,分别是一般模式编辑模式命令行模式。这三种模式分别如下:

1.1 一般模式

以vim打开一个文件就直接进入一般模式(默认模式)。在该模式下,可以使用上下左右按键来移动光标,可以删除字符或删除整行,也可以复制粘贴文件数据。但是无法编辑文件内容。

1.2 编辑模式

在一般模式下,按下“i 、 I 、 o 、 O 、 a 、 A 、r 、 R”中任何一个字母之后,才会进入编辑模式。

通常在Linux系统中,按下这些按键时,在界面的左下方会出现INSERT或REPLACE的字样,才可以进行编辑。如果要回到一般模式时,则必须按下【Esc】才可退出编辑模式。

1.3 命令行模式

在一般模式下,输入“ : 、 / 、 ? ”中任何一个字母之后,就可以就进入命令行模式,并将光标移动到界面左下方。在这个模式下,可以提供你查找数据的操作,如读取、保存、替换大量字符串、离开vim、显示行号等。

这三个模式的切换如下图所示:

vim模式.png-72.7kB

可见,一般模式与编辑模式及命令行模式可相互切换,但编辑模式与命令行模式之间不可相互切换。

二. 按键说明

2.1 一般模式切换到编辑模式,可用的按键如下:

按键 说明
i, I 进入插入模式:i为目前光标所在处插入;I为目前所在行的第一个非空格符处开始插入(常用)。
a, A 进入插入模式:a为目前光标所在的下一个字符处开始插入;A为从光标所在行的最后一个字符处开始插入(常用)。
o, O 进入插入模式:o为目前光标所在的下一行处插入新的一行;O为目前光标所在哈你给的上一行插入新的一行(常用)。
r, R 进入替换模式:r只会替换光标所在的那一个字符一次;R会一直替换光标所在的文字,直到按下[Esc]键为止(常用)。

2.2 一般模式切换到命令行模式,可用的按键如下:

按键 说明
:w 将编辑的数据写入文件中。
:w! 若文件属性为“只读”时,强制写入该文件。能否写入成功,还与用户对该文件的文件权限有关。
:q 离开vim。
:q! 强制离开vim,不保存文件。
:wq 强制保存后离开vim。
ZZ 若文件没改动,则不保存离开;若文件被改动,则保存后离开。
:w[filename] 将编辑的数据保存成另一个文件(另存为)。
:r[filename] 将[filename]这个文件的内容追加到光标所在行之后。
:n1, n2 w[filename] 将n1到n2行的内容保存成[filename]这个文件。其中n1、n2为Int类型。
:!command 暂时离开vim到命令行模式下执行command的显示结果。
:set nu 显示行号。
:set nonu 取消行号。

2.3 一般模式下可用的按键:

2.3.1 光标的小范围移动:

按键 说明
k 上移。
j 下移。
h 左移。
l 右移。

如果想要进行多次移动的话,加上想要进行的次数后,进行光标大的移动操作即可。例如向下移动30行,可以使用”30j”或”30↓”的组合按键。

2.3.2 光标在前后页移动:

按键 说明
Ctrl + f 在文件中前移一页(相当于 [Page Down])。(常用)
Ctrl + b 在文件中后移一页(相当于 [Page Up])。(常用)
Ctrl + d 屏幕向下移动半页。
Ctrl + u 屏幕向上移动半页。

2.3.3 行内光标移动:

按键 说明
w 右移光标到下一个字的开头。
e 右移光标到一个字的末尾。
b 左移光标到前一个字的开头。
0 数字0,左移光标到本行的开始。(常用)
$ 右移光标,到本行的末尾。(常用)
^ 移动光标,到本行的第一个非空字符。

2.3.4 页内快速移动光标:

按键 说明
G 将光标定位到文件最后一行起始位置(常用)。
NG 或 Ngg 将光标定位到第 N 行的起始位置。
gg 将光标定位到文件第一行起始位置,相当于1G(常用)。
H 将光标移到屏幕上的起始行(第一行)。
M 将光标移到屏幕中间。
L 将光标移到屏幕最后一行。
N[Enter] 光标向下移动N行(常用)。
n[Enter] 光标向右移动N个字符。
+ 光标移动到非空格符的下一行。
光标移动到非空格符的上一行。

2.3.5 查找与替换

按键 说明
/word 向下查找一个名为”word”的字符串。(常用)
?word 向上查找一个名为”word”的字符串。
n 这个n是英文按键。表示重复前一个查找的操作。
N 这个N是英文按键。与n刚好相反,为“反方向”重复前一个查找操作。

使用/word配合n及N,可以重复地找到一些关键字:

按键 说明
:n1,n2s/word1/word2/g n1和n2为数组。表示在第n1与n2行之间寻找word1这个字符串,并将其替换为word2。(常用)
:1,\$s/word1/word2/g 表示在第一行到最后一行之间寻找word1这个字符串,并将其替换为word2。(常用)
:1, \$s/word1/word2/gc 表示在第一行到最后一行之间寻找word1这个字符串,并将其替换为word2。且在替换前显示提示字符给用户确认是否需要替换。(常用)

2.3.6 删除:

按键 说明
x, X x为向后删除一个字符(相当于[Del]键);X为向前删除一个字符(相当于[Backspace])。(常用)
nx 删除光标所指向的前 n 个字符。
dd 删除光标所在行,并去除空隙。(常用)
ndd 删除(剪切) n 行内容,并去除空隙。(常用)
d0 删除光标所在处到该行的最前面一个字符。
d$ 删除从那个光标所在处到该行的最后一个字符。
dG 删除从光标所在处到最后一行的所有数据。
d1G 删除从光标所在处到第一行的所有数据。

2.3.7 复制:

按键 说明
yy 复制当前行。(常用)
nyy 复制光标所在的向下n行。(常用)
y1G 复制光标所在行到第一行的所有数据。
yG 复制光标所在行到最后一行的所有数据。
y0 复制光标所在行到该行行首的所有数据。
y$ 复制光标所在行到该行行尾的所有数据。

2.3.8 粘贴:

按键 说明
p, P p表示将已复制的数据粘贴到光标下一行;P表示为粘贴在上一行。(常用)

2.3.9 撤销和重复

按键 说明
u 复原前一个操作。(常用)
Ctrl + r 重做上一个操作。(常用)
. 重复前一个操作。(常用)

3. vim常用命令示意图

vim-commands.jpg-32.4kB

【备注:上图转载自《鸟哥的私房菜》P289】

4. 参考:

本文作者:子匠_Zijor,转载请注明出处:http://www.dengzhr.com/frontend/tools/990