vi、Vim 命令详解与实战速查
Vim 的核心不是“记住很多快捷键”,而是先分清当前模式,再把“动作范围”和“操作”组合起来。以下命令适用于常见 Vim 版本;发行版、插件和个人配置可能改变部分行为。
一、先掌握四种模式
| 模式 | 进入方式 | 用途 |
|---|---|---|
| 普通模式 | 按 Esc |
移动、删除、复制、撤销和执行命令 |
| 插入模式 | i、a、o 等 |
输入文字 |
| 可视模式 | v、V、Ctrl+v |
按字符、整行或块选择 |
| 命令行模式 | 普通模式输入 : |
保存、退出、替换和设置选项 |
忘记当前处于什么模式时,先按一次 Esc。这是避免误操作最有效的习惯。
二、打开、保存与退出
vim /etc/nginx/nginx.conf
vim +120 app.log
vim +/ERROR app.log
| 命令 | 作用 |
|---|---|
:w |
保存 |
:w newfile |
另存为 |
:q |
无改动时退出 |
:wq 或 ZZ |
保存并退出 |
:q! |
放弃当前改动并退出 |
:e! |
放弃改动并重新读取文件 |
! 表示强制执行,应在确认不需要当前改动后使用。
三、移动比方向键更高效
| 命令 | 位置 |
|---|---|
h j k l |
左、下、上、右 |
w / b |
下一个 / 上一个单词开头 |
e |
当前或下一个单词结尾 |
0 / ^ / $ |
行首 / 首个非空字符 / 行尾 |
gg / G |
文件开头 / 文件结尾 |
120G |
跳到第 120 行 |
Ctrl+f / Ctrl+b |
向下 / 向上翻页 |
% |
在匹配的括号间跳转 |
数字可以与多数动作组合,例如 5j 向下移动 5 行,3w 向前移动 3 个单词。
四、插入与修改
| 命令 | 作用 |
|---|---|
i / a |
在光标前 / 后插入 |
I / A |
在行首 / 行尾插入 |
o / O |
在下方 / 上方新建一行 |
x |
删除一个字符 |
dd |
删除整行 |
D |
删除到行尾 |
cc |
修改整行 |
cw |
修改到单词结尾 |
rX |
用 X 替换当前字符 |
Vim 的组合逻辑很有用:d 表示删除,c 表示修改,后面接范围。比如 d3w 删除后面 3 个单词,ci" 修改双引号中的内容,da( 删除包含括号的整个范围。
五、复制、粘贴、撤销
| 命令 | 作用 |
|---|---|
yy / 5yy |
复制当前行 / 连续 5 行 |
p / P |
在光标后 / 前粘贴 |
u |
撤销 |
Ctrl+r |
重做 |
. |
重复上一次修改 |
"0p |
粘贴最近一次复制的内容,避免被删除操作覆盖 |
系统剪贴板是否可用取决于 Vim 的编译选项。可先执行 :version,检查是否包含 +clipboard。支持时可用 "+y 复制到系统剪贴板、"+p 从系统剪贴板粘贴。
六、搜索与批量替换
| 命令 | 作用 |
|---|---|
/word |
向下搜索 |
?word |
向上搜索 |
n / N |
下一个 / 上一个匹配 |
* / # |
搜索光标所在单词 |
:set hlsearch |
高亮匹配 |
:nohlsearch |
临时关闭高亮 |
替换示例:
:%s/old/new/g
:%s/old/new/gc
:10,30s/old/new/g
第一条替换全文,第二条逐项确认,第三条只处理第 10 到 30 行。正则表达式中的 /、.、* 等字符可能需要转义,执行前可先缩小范围或加 c 确认。
七、多文件与窗口
:e another.conf
:ls
:bnext
:bprevious
:split another.conf
:vsplit another.conf
窗口间切换使用 Ctrl+w 后再按 h/j/k/l。:tabnew file 新建标签页,gt 和 gT 在标签页之间切换。
八、运维场景中的安全用法
- 编辑系统配置前先复制备份,或使用版本管理。
- 使用
:set number显示行号,:%!command这类会改写全文的命令不要在生产文件中随意执行。 - 粘贴大段配置前可执行
:set paste,粘贴后立即:set nopaste,避免自动缩进破坏格式。 - 修改完成先保存,再运行对应语法检查,例如
nginx -t、sshd -t。 - 远程连接不稳定时在
tmux或screen中编辑,避免连接中断造成混乱。
九、交换文件与异常恢复
Vim 异常退出后可能留下 .swp 文件。再次打开时不要盲目删除:
- 先确认是否还有另一个编辑会话正在使用该文件。
- 确认没有活动会话后,选择恢复并核对内容。
- 恢复完成后正常保存退出,再清理残留交换文件。
vim -r /path/to/file
十、建议的最小配置
将下列内容放入个人 ~/.vimrc,先从少量可靠设置开始:
set number
set ruler
set showcmd
set incsearch
set hlsearch
set ignorecase
set smartcase
set expandtab
set tabstop=4
set shiftwidth=4
不要直接复制来源不明的庞大 Vim 配置。插件和映射越多,排查按键冲突越困难。
十一分钟练习
- 打开一份临时文本,用
gg、G、10G跳转。 - 用
yy、p复制一行,用dd删除,再用u撤销。 - 用
/关键字搜索,使用n切换。 - 用
:%s/旧值/新值/gc逐项替换。 - 用
:w保存,再用:q退出。
