Vim 命令速查表 - Vim 编辑器常用操作命令大全
Vim 的门槛不在配置而在两组肌肉记忆:motion(能在文件里精确移动而不必翻页)与查找替换(敢批量改而不怕改错)。服务器上没有图形界面,改 nginx、sshd 或线上代码时能靠 hjkl 加计数前缀、ciw 改词、:. 缩进这类操作,几百行的改动可以从十分钟压到几分钟。这张表按移动、编辑、查找替换、可视模式与保存退出分组,把最常用的键位和命令按操作意图排列,而不是按字母顺序背诵。判断学哪个的简单标准:任何「改这段重复文本」的需求都先落到可视块或 :%s,先用 / 确认命中范围再执行,能省掉大部分误操作。收尾那组 :q!、:w !sudo tee 这类命令则专门解决新手最常卡住的两个场景。
移动 Motion 5
gg / G0 / $w / b:42Ctrl-f / Ctrl-b编辑 Edit 6
i / ao / Odd / yyp / Pu / Ctrl-rx / r<char>查找替换 Search 4
/word:%s/old/new/g:%s/old/new/gc:noh可视模式与保存退出 6
v / VCtrl-v:w:wq 或 ZZ:q!:w !sudo tee %命令示例
不退出文件先存盘(应急最常用)
:w编辑到一半需要存盘时用 :w,不必先 :q。配 :q! 可以丢弃改动强制退出,:wq 则是存盘并退出。
输出
"notes.md" 42L, 1834C written
全局替换并逐个确认
:%s/old/new/gc
// c = confirm% 表示全文,g 表示行内全部,c 表示每次确认。批量改动时用 c 比直接 g 安全,误改能当场撤销。
输出
replace with new/new (y/n/a/q)?
不进入插入模式就删除一整行
dd
3dd
yy
pdd 删当前行,3dd 删三行;yy 复制当前行,p 粘贴。Vim 的命令模式让你不用移动光标也能操作整行。
在文件内搜索并跳转
/pattern
n
:nohlsearch/ 向下搜、? 向上搜,n 跳下一个。:nohlsearch 清除高亮——搜索后满屏黄色会看不清代码。
常见坑与注意事项
- 普通模式下 i、a、o、p、d 等键都是命令,误按会立刻改动文件;不确定时按 Esc 回到普通模式。
- :q! 会丢弃所有未保存改动且无法恢复,:wq 与 :q 的区别要先分清。
- 在插入模式(显示 -- INSERT --)下输入 :q 无效,需先按 Esc 退回普通模式。
- Vim 的命令大多可撤销(u),但退出后未保存的改动无法恢复,长时间编辑前先 :w。
- 中文输入法在 Vim 里可能吞掉按键,编辑中文文件时注意切换到英文输入模式。
提示
- 卡在 Vim 出不去:按 Esc 回到普通模式,再输入 :q! 强制不保存退出。
- 编辑系统文件忘了 sudo,用 :w !sudo tee % 直接提权保存,不用退出重开。
- 大段替换前先 /word 确认匹配范围,再用 :%s,加 c 标志逐个确认更安全。
- :set paste 关闭自动缩进,粘贴他人代码前先开、粘完 :set nopaste,可避免缩进被逐行放大。
- :earlier 10m / :later 10m 在时间旅行模式下前后跳转,撤销改动试另一种做法比反复 Ctrl-o 更顺手。
- 配置里设 set relatimetime 与 :set number 后,变更行显示相对时间,排查刚改的配置是否生效很直观。
常见问题
Vim 普通、插入、命令三种模式怎么快速切换?
启动默认在普通模式,按 i/a/o 进入插入模式打字,按 Esc 回到普通模式执行移动和编辑;普通模式下输入冒号进入命令行模式,输入 / 进入搜索。记住普通模式只负责操作、插入模式只负责打字即可。
用 Vim 打开文件后才发现没加 sudo,改完没法保存怎么办?
不用退出重开,直接输入 :w !sudo tee % 用 root 权限写回当前文件(% 代表当前文件名);若缓冲已只读,先 :e % 重新加载。更省事的方式是一开始就用 sudo vim 打开。
怎么在当前文件里全局替换,比如把所有 foo 改成 bar?
用 :%s/foo/bar/g 做全文件替换,加 ^ 限定行首、加 $ 限定行尾,去掉末尾的 g 则只替换每行首个匹配。需要逐个确认时改用 :%s/foo/bar/gc,用 y 或 n 决定每个替换。
改错了想撤销,撤销过头了想重做,怎么操作?
普通模式下按 u 撤销上一步,按 Ctrl+r 重做被撤销的操作;Vim 的撤销是多级历史,可连按 u 连续回退。若想丢弃全部更改,用 :q! 不保存强制退出即可。
想在多行同一列插入或删除内容(列编辑)怎么做?
普通模式下按 Ctrl+v 进入可视块模式,垂直移动选中多行同一列,按 I 在上部输入,最后按 Esc 让 Vim 把输入复制到整列各行的相同位置;按 d 或 x 则可删除选中的纵向区间。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。