参考资料: 1) RUNOOB.COM - Linux vi/vim    2) Vim Tutor

1. vi/vim 工作模式

命令模式(Command Mode):启动vi/vim即进入命令模式

输入模式(Insert Mode):命令模式下按i/a/o等即可进入输入模式,可以进行字符输入/换行/回删等操作

底线命令模式(Last Line Mode):命令模式下按:即可进入底线命令模式,可用命令十分广泛

三种模式的切换可以参考下图,

2. vi/vim 常用按键

2.1 光标移动

命令
功能
h向左移动1个字符,如果命令前有数字,如5h,则表示向左移动5个字符
j向下移动1个字符,如果命令前有数字,如5j,则表示向下移动5个字符
k向上移动1个字符,如果命令前有数字,如5k,则表示向上移动5个字符
l向右移动1个字符,如果命令前有数字,如5l,则表示向右移动5个字符
<Space>作用同l,命令前可添加数字
+光标移动到非空格符的下一行,命令前可添加数字
-光标移动到非空格符的上一行,命令前可添加数字
<Enter>作用同+,命令前可添加数字
0数字0,移动到这一行的第一个字符处
$移动到这一行的最后一个字符处
H移动到当前屏幕最上方的那一行的第一个字符处
M移动到当前屏幕中间的那一行的第一个字符处
L移动到当前屏幕最下方的那一行的第一个字符处
G移动到当前文档最后一行的第一个字符处,如果命令前有数字,如5G,则表示移动到第5行的第一个字符处
gg移动到当前文档第一行的第一个字符处,相当于1G
e
跳转到字尾
w
跳转到下一个字首
b
跳转到上一个字

1.2 删除/复制/粘贴

命令
功能
x, X
在一行字当中,x为向后删除一个字符(相当于Del);X为向前删除一个字符(相当于BackSpace),命令前可添加数字
dd
删除游标所在的那一整行,删除后保存在缓冲区,可以用p粘贴,命令前可添加数字
d1G
删除光标所在到第一行的所有数据
dG
删除光标所在到最后一行的所有数据
d$
删除光标所在处,到该行的最后一个字符
d0
删除光标所在处,到该行的第一个字符
dw
删除一个字
yy
复制光标所在的那一行,命令前可添加数字
y1G
复制光标所在行到第一行的所有数据
yG
复制光标所在行到最后一行的所有数据
y0
复制光标所在的那个字符到该行行首的所有数据
y$
复制光标所在的那个字符到该行行尾的所有数据
p, P
p为将已复制的数据在光标下一行贴上,P则为贴在光标上一行
J
将光标所在行与下一行的数据结合成同一行
u
复原前一个动作
Ctrl + R
重做上一个动作
.
重复前一个动作

1.3 搜索和替换

命令
功能
/word
向光标之下寻找一个名称为word的字符串,\c表示忽略大小写,\C表示大小写敏感
?word
向光标之上寻找一个名称为word的字符串,即往上搜索
n, N
搜索结果的下一个,/word下n是向下搜索,N是向上搜索;?word下n是向上搜索,N是向下搜索
:n1,n2s/word1/word2/g
在第n1行与第n2行之间寻找word1这个字符串,并将该字符串取代为word2
:1,$s/word1/word2/g
:%s/word1/word2/g
在首行和尾行之间寻找word1这个字符串,并将该字符串替换为word2
:1,$s/word1/word2/gc
:%s/word1/word2/gc
在首行和尾行之间寻找word1这个字符串,并将该字符串替换为word2,替换前需要先确认

1.4 切换到输入模式

命令
功能
i, Ii为从目前光标所在处输入;I为在目前所在行的第一个非空格符处开始输入
a, Aa为从目前光标所在的下一个字符处开始输入;A为从光标所在行的最后一个字符处开始输入
o, Oo为在目前光标所在的下一行处输入新的一行;O为在目前光标所在处的上一行输入新的一行
r, Rr只会替代光标所在的那一个字符一次;R会一直替代光标所在的文字,直到按下ESC 为止

1.5 底线命令

命令功能
:w将编辑的数据写入文件中
:w!强制写入该文件
:q离开vi/vim
:q!若曾修改过文件,又不想储存,使用 ! 为强制离开不储存文件
:wq储存后离开
:wq!
强制储存后离开
ZZ若文件没有更动,则不储存离开;若文件已经被更动过,则储存后离开
:w [filename]将编辑的数据储存成另一个文件
:r [filename]在编辑的数据中,在当前光标行后面读入另一个文件的数据
:e [filename]打开新的一个文件
:sp
水平分屏
:vsp
垂直分屏