很多运维工程师每天都在用 Vim,但只停留在“能改文件就行”的阶段。实际上,Vim 天生非常适合运维场景:配置文件、日志、脚本、批量修改、多文件操作,几乎都是它的主战场。
Vim 最重要的不是命令本身,而是它的“语言”:
操作符(Operator) + 动作(Motion) = 编辑行为
例如:
- d(删除) + w(一个单词) → dw
- c(修改) + i{(花括号内部) → ci{
- y(复制) + ap(一个段落) → yap
一旦你理解了这个模型,命令不再需要死记硬背,而是自然组合。这对运维场景尤其重要,因为你经常要批量、结构化地修改文本:配置块、日志段、函数体、JSON/YAML 结构。
一、保存与退出
命令
作用说明
:w
保存当前文件
:wq / :x / ZZ
保存并退出
:q
退出(有未保存修改会失败)
:q! / ZQ
强制退出,不保存
:update
仅在文件被修改时才写盘
:w !sudo tee %
无权限文件用 sudo 保存(非常常用)
:cq
以非 0 状态码退出 Vim(取消 git rebase、shell vi 模式等)
二、光标移动基础方向与行内移动
命令
h j k l
左 下 上 右
行首 / 第一个非空字符
行尾
gm
行中间
gg / G
文件首 / 文件尾
{n}G
跳转到第 n 行
按“语义”移动
命令
w / b
按单词前进 / 后退
e
到单词结尾
上一个 / 下一个段落(配置块、日志块)
在 {} () [] 之间跳转
f{c} / t{c}
行内快速定位字符
三、屏幕滚动与跳转历史
命令
zz
当前行居中
zt / zb
当前行到屏幕顶部 / 底部
Ctrl-d / Ctrl-u
下 / 上滚动半屏
Ctrl-f / Ctrl-b
下 / 上滚动整屏
Ctrl-o / Ctrl-i
跳转历史 后退 / 前进
回到上一次跳转位置
回到上一次修改位置
四、插入与编辑进入插入模式
命令
i / a
光标前 / 后插入
I / A
行首 / 行尾插入
o / O
下 / 上新建一行
R
替换模式(覆盖输入)
撤销与重复
命令
u
撤销
Ctrl-r
重做
重复上一次修改(神器)
五、删除 / 修改 / 替换
命令
x / X
删除光标处 / 前一个字符
dd
删除整行
D / d$
删除到行尾
dw
删除一个单词
cc
整行替换
ciw
修改当前单词
caw
修改整个单词(含空格)
xp
交换相邻字符(修 typo)
右 / 左缩进
重新缩进当前行
六、复制、粘贴与寄存器
命令
yy
复制整行
{n}yy
复制 n 行
yw / yiw
复制单词
p / P
光标后 / 前粘贴
"+p
使用系统剪贴板
"0p
粘贴最近一次 yank 的内容
"_dd
删除但不污染剪贴板
删除操作尽量用 "_ 前缀,避免覆盖重要内容。
七、VISUAL 模式
命令
v
字符选择
V
行选择
Ctrl-v
块选择(列操作)
vi{ / va{
选中花括号内部 / 整块
vi" / va"
选中字符串
gv
重新选择上一次选区
典型运维场景:
- 批量加/删注释
- 对齐配置项
- 多行变量同时修改
命令
/pattern / ?pattern
向前 / 向后搜索
n / N
下一个 / 上一个匹配
搜索光标下的词
:noh
取消高亮
替换命令
命令
:s/old/new/
当前行替换一次
:%s/old/new/g
全文件替换
:%s/old/new/gc
全文件替换(确认)
:g/pat/d
删除所有匹配行
:v/pat/d
删除不匹配的行
:%s/\s\+$//e
删除行尾空格
九、多文件操作
命令
:vimgrep /pat/ **/*
在项目中搜索
:copen
打开 quickfix
:cn / :cp
下一个 / 上一个匹配
:cfdo %s/a/b/g
对所有匹配文件执行替换
:wall
保存所有文件
十、宏
命令
qa
开始录制宏到 a
q
停止录制
@a
执行宏
{n}@a
执行 n 次
重复上一个宏
十一、窗口、分屏与标签页
命令
:sp / :vsp
横向 / 纵向分屏
Ctrl-w h/j/k/l
窗口间移动
Ctrl-w o
只保留当前窗口
:tabnew
新标签页
gt / gT
下 / 上一个标签
热门跟贴