[L1] Vim 常用操作——模式切换、搜索替换、保存退出
一句话结论
Vim 有四种主要模式,Normal 模式是核心,掌握 hjkl/搜索替换/wq 即可应对日常运维。
体系讲解
模式切换
Normal(默认)
↓ i / a / o / I / A / O 进入 Insert(插入)模式
↑ Esc 返回 Normal
Normal
↓ v / V / Ctrl-v 进入 Visual(可视)模式
↑ Esc
Normal
↓ : 进入 Command-line 模式
↑ Enter / Esc| 按键 | 进入插入模式的位置 |
|---|---|
i | 光标前 |
a | 光标后 |
o | 当前行下方新建一行 |
I | 行首 |
A | 行尾 |
O | 当前行上方新建一行 |
移动与编辑(Normal 模式)
| 按键 | 功能 |
|---|---|
h j k l | 左下上右 |
gg / G | 跳到文件首/尾 |
0 / $ | 行首/行尾 |
w / b | 向前/后移动一个词 |
dd | 删除当前行 |
yy | 复制当前行 |
p | 粘贴到光标后 |
u | 撤销 |
Ctrl-r | 重做 |
搜索与替换
vim
/pattern 向下搜索,n 下一个,N 上一个
?pattern 向上搜索
:%s/old/new/g 全文替换
:%s/old/new/gc 全文替换,每处询问确认
:5,10s/old/new/g 第 5–10 行替换保存与退出(Command-line 模式)
| 命令 | 含义 |
|---|---|
:w | 保存 |
:q | 退出(文件未修改时) |
:wq 或 :x | 保存并退出 |
:q! | 强制退出,丢弃修改 |
:w !sudo tee % | 以 sudo 权限保存只读文件 |
考察意图
服务器上常只有 Vim 可用,考察候选人能否在无 GUI 环境下完成配置修改、日志查看等基础运维操作,以及不被"怎么退出 Vim"卡住。
追问链
编辑
/etc/nginx/nginx.conf时忘记用 sudo 打开,修改后无法保存怎么办? 在 Normal 模式执行:w !sudo tee %,将当前缓冲区内容通过sudo tee写回文件,然后:q!退出。如何快速跳到某一行?(比如日志定位)
:123跳到第 123 行;或在 Normal 模式输入行号再按G:123G;用Ctrl-g可查看当前行号和总行数。在 Vim 中如何批量注释多行代码? 进入
Ctrl-v列可视模式,选中目标行的第一列,按I(大写 i)输入注释符(如#),再按Esc;Vim 会将注释符插入到每一选中行的行首。:wq和:x有什么区别?:x(等价于:exit)只在文件有修改时才写入磁盘,未修改则不更新 mtime;:wq无论是否修改都强制写入,会改变 mtime,可能触发不必要的 inotify 事件。
易错点
- 卡在 Insert 模式无法执行命令:必须先按
Esc返回 Normal 模式,才能输入:wq等命令;紧急退出可连按两次Esc再:q!。 - 搜索后
n方向与预期相反:用/搜索时n向下,用?搜索时n向上;混淆后可按N(大写)反向遍历。 :%s替换含特殊字符时需转义:替换含/、*、^等字符时要加\,或换分隔符::%s|/old/path|/new/path|g。
代码示例
bash
# 用 Vim 打开文件并直接跳到第 50 行
vim +50 /var/log/php-fpm/error.log
# 打开文件并直接执行全文替换(非交互式,常用于脚本)
vim -c ':%s/debug/info/g' -c ':wq' config.php
# 以只读模式打开(防误操作)
vim -R /etc/php/7.4/fpm/php.ini
# 打开多个文件,用 :n / :N 切换
vim file1.php file2.php