一、vi/vim介绍
vi是Linux系统下最基本的文本编辑程序,工作在字符模式下,不需要图形界面。
vim是从vi发展而来的文本编辑器,具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
vi/vim键盘图

二、vi/vim的使用
2.1 三种工作模式
基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)
和底行模式(last line mode),各模式的功能区分如下:
- 命令模式(command mode):控制屏幕光标的移动,字符、字或行的删除,移动复制某区
段及进入Insert mode下,或者到 last line mode。
- 插入模式(Insert mode):只有在Insert mode 下,才可以做文字输入,按
ESC键可回
到命令行模式。
- 底行模式(last line mode):将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、
列出行号等。
三种工作模式的状态切换如下图

2.2 三种工作模式常用命令
2.2.1 命令模式
| 命令 |
执行效果 |
i |
切换到输入模式,在光标当前位置开始输入文本 |
x |
删除当前光标所在处的字符 |
: |
切换到底行命令模式,以在最底一行输入命令 |
a |
进入插入模式,在光标下一个位置开始输入文本 |
o(小写) |
在当前行的下方插入一个新行,并进入插入模式 |
O(大写) |
在当前行的上方插入一个新行,并进入插入模式 |
dd |
剪切当前行 |
yy |
复制当前行 |
p(小写) |
粘贴剪贴板内容到光标下方 |
P(大写) |
粘贴剪贴板内容到光标上方 |
u |
撤销上一次操作 |
Ctrl+r |
重做上一个动作 |
:w |
保存文件 |
:q |
退出vim编辑器 |
:q! |
强制退出vim编辑器,不保存修改 |
2.2.2 输入模式
| 命令 |
执行效果 |
字符按键以及Shift组合 |
输入字符 |
Enter |
回车,换行 |
Backspace |
删除光标前一个字符 |
Delete |
删除光标后一个字符 |
| 方向键 |
在文本中移动光标 |
Home/End |
移动光标到行首/行尾 |
Page Up/Page Down |
上/下翻页 |
Insert |
切换光标尾输入/替换模式 |
Esc |
退出输入模式,切换到命令模式 |
2.2.3 底行模式
| 命令 |
执行效果 |
:w |
保存文件 |
:q |
退出vim编辑器 |
:wq |
保存文件并退出vim编辑器 |
:q! |
强制退出vim编辑器,不保存修改 |
三、vi/vim的按键说明
3.1 命令模式
3.1.1 光标移动
| 命令 |
执行效果 |
hjkl |
功能分别等同于左、下、上、右箭头键 |
Ctrl+f或Page Down |
屏幕向下移动一页(常用) |
Ctrl+b或Page Up |
屏幕向上移动一页(常用) |
Ctrl+d |
屏幕向下移动半页 |
Ctrl+u |
屏幕向上移动半页 |
n<space> |
n为数字,按下数字后再按空格键,光标会向右移动这一行的 n 个字符 |
0或Home |
移动到这一行的最前面字符处 (常用) |
$或End |
移动到这一行的最后面字符处(常用) |
G |
移动到这个文章的最后一行(常用) |
nG |
n为数字,移动到这个文章的第 n 行(可配合:set nu) |
gg |
移动到这个档案的第一行,相当于 1G 啊! (常用) |
n<Enter> |
n为数字,光标向下移动 n 行(常用) |
3.1.2 搜索替换
| 命令 |
执行效果 |
/word |
向光标之下寻找一个名称为 word 的字符串,按Enter结束word输入(常用) |
?word |
向光标之上寻找一个字符串名称为 word 的字符串 |
n |
这个 n 是英文按键。代表重复前一个搜寻的动作。比如执行完/word,按下n就是向下继续搜索word,并且搜索到末尾会自动回到开头循环搜索(常用) |
N |
这个 N 是英文按键。与 n 刚好相反,为反向进行前一个搜寻动作。 |
:n1,n2s/word1/word2/g |
n1 与 n2 为数字。在第 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 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
3.1.3 删除、复制与粘贴
| 命令 |
执行效果 |
x,X |
在一行字当中,x 为向后删除一个字符 (相当于 del 键), X 为向前删除一个字符(相当于 Backspace 键) (常用) |
nx |
n 为数字,连续向后删除 n 个字符 |
dd |
剪切游标所在的那一整行,用 p/P 可以粘贴。(常用) |
ndd |
n 为数字。剪切光标所在的向下 n 行,例如 20dd 则是剪切 20 行,用 p/P 可以粘贴。(常用) |
yy |
复制游标所在的那一行(常用) |
nyy |
n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
p,P |
p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! (常用) |
u |
撤销上一次操作。(常用) |
Ctrl+r |
重做上一个动作。(常用) |
. |
不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复粘贴等等动作,按下小数点.就好了! (常用) |
3.1.4 文本选中
vi可进入到一种称为visual的模式,在该模式下,用户可以用光标移动命令可视地选择文本,然
后再执行其他编辑操作,例如删除、复制等。
3.2 输入模式
3.2.1 进入输入或取代的编辑模式
| 命令 |
执行效果 |
i,I |
进入输入模式 i 为从目前光标所在处输入, I 为在目前所在行的第一个非空格符处开始输入。 (常用) |
a, A |
进入输入模式: a 为从目前光标所在的下一个字符处开始输, A 为从光标所在行的最后一个字符处开始输入。(常用) |
o, O |
进入输入模式(Insert mode):o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用) |
r, R |
进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 Esc 为止 |
Esc |
退出编辑模式,回到命令模式中(常用) |
3.3 底行模式
3.3.1 保存退出和暂时离开
| 命令 |
执行效果 |
:w |
将编辑的数据写入硬盘档案中(常用) |
:w! |
若文件属性为只读时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! |
:q |
离开 vi (常用) |
:q! |
若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 |
:wq |
储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ |
这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于:wq |
ZQ |
不保存,强制退出。效果等同于 :q!。 |
:w [filename] |
将编辑的数据储存成另一个档案(类似另存新档) |
:r [filename] |
在编辑的数据中,读入另一个档案的数据。亦即将 filename这个档案内容加到游标所在行后面 |
:n1,n2 w [filename] |
将 n1 到 n2 的内容储存成 filename 这个档案。 |
:! command |
暂时离开 vi 到Shell指令行模式下执行 command 的显示结果!例如 :! ls /home即可在 vi 当中查看 /home 底下以 ls 输出的档案信息! |
3.3.2 行号
| 命令 |
执行效果 |
:n |
将光标移到第 n 行(常用) |
:set nu |
显示行号(常用) |
:set nonu |
取消行号显示(常用) |
3.3.3 恢复文件
vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 . 开头,并以 .swp 结
尾。vi 在正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令,也可以在启动 vi 时利用 -r 选项。
四、参考
Linux vi/vim | 菜鸟教程 (runoob.com)