文章目录
一、什么是 VI / VIM
- VI 是 Unix 和类 Unix 操作系统中最通用的文本编辑器。
- VIM 是从 VI 发展而来的更强大的文本编辑器,可以主动用字体颜色辨别语法的正确性,方便程序设计。
- VIM 与 VI 完全兼容,是 VI 的超集,所以在 Linux 中输入
vi或vim都可以使用。
打开文件的方式:
vi 文件名
vim 文件名
vim file1 file2 # 同时打开多个文件
二、三种模式
Vim 有三种核心模式:
| 模式 | 作用 |
|---|---|
| 一般模式(Normal Mode) | 打开文件默认进入,可移动光标、删除、复制、粘贴 |
| 编辑模式(Insert Mode) | 输入内容、修改文本 |
| 指令模式(Command-line Mode) | 保存、退出、查找、替换、显示行号等 |
三、模式间转换
- 一般模式 → 编辑模式:按下
i、I、a、A、o、O中任一按键。 - 编辑模式 → 一般模式:按下
Esc键。 - 一般模式 → 指令模式:输入
:、/、?中的任意一个。 - 指令模式 → 一般模式:执行完命令后自动返回,或按
Esc取消。
一般模式 --i/I/a/A/o/O--> 编辑模式
一般模式 --: 或 / 或 ?--> 指令模式
编辑/指令模式 --Esc--> 一般模式
四、一般模式:光标移动
以 vi 打开文件后默认进入一般模式,此模式下可以移动光标、删除字符/整行、复制粘贴等。
| 操作 | 功能描述 |
|---|---|
方向键 / h j k l | 左、下、上、右移动光标(h j k l 是经典手势) |
w / W | 跳到下一个单词开头 |
b / B | 跳到上一个单词开头 |
0 | 移动到行首(第 0 个字符) |
^(Shift+6) | 移动到行首第一个非空字符 |
$(Shift+4) | 移动到行尾 |
gg 或 1G | 移动到文件开头(第一行) |
G(Shift+g) | 移动到文件末尾(最后一行) |
数字+G(如 100G) | 移动到指定行 |
Ctrl + d / Ctrl + u | 向下 / 向上翻半页 |
五、一般模式:删除、复制、粘贴
| 语法 | 功能描述 |
|---|---|
yy | 复制光标当前一行 |
y数字y | 复制从当前行起若干行(如 3yy 复制 3 行) |
yw | 复制一个词 |
p | 在光标下一行粘贴复制的内容 |
P(大写) | 在光标上一行粘贴 |
u | 撤销上一步操作 |
Ctrl + r | 重做(取消撤销) |
dd | 删除光标当前行 |
d数字d | 删除从当前行(含)起若干行(如 3dd 删除 3 行) |
dw | 删除一个词 |
d$ | 删除光标位置到行尾 |
d^ | 删除光标位置到行首 |
dG | 删除从当前行到文件末尾 |
x | 删除光标处一个字符,相当于 Del |
X | 删除光标前一个字符,相当于 Backspace |
六、编辑模式
在一般模式中只能进行删除、复制、粘贴等操作,无法直接编辑文件内容。 必须按下 i, I, o, O, a, A 等任一字母后才进入编辑模式。
进入编辑模式后,画面左下方会出现 INSERT 或 REPLACE 字样,此时才能输入内容。按 Esc 键退出编辑模式,回到一般模式。
| 按键 | 功能 |
|---|---|
i | 在当前光标之前插入 |
a | 在当前光标之后插入 |
o | 在当前光标行的下一行插入 |
I | 在当前行行首插入 |
A | 在当前行行尾插入 |
O | 在当前光标行的上一行插入 |
r | 替换光标所在的一个字符(不进入编辑模式) |
R | 连续替换模式(相当于持续覆盖输入) |
七、指令模式
在一般模式中输入 :、/、? 中任意一个,即可进入指令模式,光标会移动到最底下一行。指令模式用于:查找、保存、退出、批量替换、显示行号等。
7.1 保存与退出
| 命令 | 功能 |
|---|---|
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:wq! | 强制写入并退出(当文件只读或权限不足时使用) |
:q! | 强制退出(不保存修改) |
:x | 保存并退出(等同于 :wq) |
ZZ | 在一般模式下直接保存并退出 |
说明:
:!本身并不是"强制执行"命令。真正用于强制的写法是:w!(强制保存)和:q!(强制退出);而:!命令的用法是在 Vim 中执行外部命令,如:!ls。
7.2 查找
| 命令 | 功能 |
|---|---|
/要查找的词 | 向下查找;按 n 查找下一个,按 N 往上查找 |
?要查找的词 | 向上查找;按 n 继续向上,按 N 向下 |
:noh(:nohlsearch) | 取消查找结果的高亮显示 |
7.3 显示行号
| 命令 | 功能 |
|---|---|
:set nu | 显示行号 |
:set nonu | 关闭行号 |
7.4 批量替换
| 命令 | 功能 |
|---|---|
:%s/old/new/g | 把全文所有 old 替换为 new,g 表示替换匹配到的所有内容(不加 g 只替换每行第一个匹配) |
:s/old/new/g | 只替换当前行所有匹配 |
:3,10s/old/new/g | 替换第 3 到 10 行范围内的所有匹配 |
八、案例实操
(1)打开文件、进入编辑模式输入内容并保存退出:
vim test.txt
# 输入 i 进入编辑模式
# 输入内容
# 按 Esc 退出编辑模式
# 输入 :wq 回车,保存并退出
(2)强制保存退出:
:wq!
(3)给文件开启行号后跳转到指定行并查看:
vim test.txt
:set nu # 显示行号
:15 # 跳转到第 15 行
九、补充技巧
- vimtutor:Vim 自带交互式教程,输入
vimtutor可系统学习,强烈推荐新手过一遍。 - 可视模式:在一般模式下按
v进入可视模式,用方向键选中文本后再按y复制、d删除。 - 重复操作:
5yy复制 5 行,5dd删除 5 行,5x删除 5 个字符。 - 常见配置:在
~/.vimrc中写入以下内容可让 Vim 更好用:
set nu # 默认显示行号
set tabstop=4 # Tab 键宽度为 4
syntax on # 开启语法高亮
- 多文件切换:
vim file1 file2打开多个文件后,用:n切换到下一个文件,:prev回到上一个文件。 - 异常恢复:如果 Vim 异常退出留下交换文件(
.swp),可以用vim -r 文件名尝试恢复未保存的内容。
十、常见问题与避坑
| 新手常见问题 | 原因与解决办法 |
|---|---|
| 输入文字没反应 / 无法输入 | 没进入编辑模式。按 i 等按键进入编辑模式后再输入 |
| 按 Esc 想退出却退不出去 | 已经在一般模式,直接输入 :q 或 :wq 即可 |
| 保存时提示 read-only | 文件只读或无权限,确认属主后用 :w! 强制保存,或 sudo vim 文件 |
| 改错了想撤销 | 一般模式下按 u 撤销,Ctrl + r 重做 |
| 打开文件发现内容混乱 | 可能用错了模式,按 Esc 回到一般模式,用 u 撤销误操作 |
| 退出时提示 No write since last change | 有未保存修改,用 :wq 保存退出,或 :q! 放弃修改强制退出 |
| 查找时输入中文没反应 | 确保输入法处于半角英文状态 |
十一、总结
- Vim 有三种模式:一般模式、编辑模式、指令模式。
- 编辑内容前必须先进入编辑模式(i/a/o 等)。
- 保存退出
:wq、强制退出:q!、强制保存:wq!。 - 多练
vimtutor,熟能生巧。

907

被折叠的 条评论
为什么被折叠?



