速查表

这是一篇 reference,不承担完整解释任务。真正要理解 Vim 的编辑模型,回到前面的入门和配置笔记;这里用于工作时快速查命令。

移动光标

命令说明
h j k l左/下/上/右
w / b下一个/上一个单词开头
W / B下一个/上一个 WORD(含标点)
e / ge下一个/上一个单词结尾
0 / ^ / $行首 / 行首非空白 / 行尾
gg / G文件首行 / 末行
nG / :n跳转到第 n 行
f<char> / F<char>向前/向后查找字符
t<char> / T<char>向前/后到字符前
} / {下一段 / 上一段
H / M / L屏幕顶/中/底
zz光标居中屏幕
Ctrl+d / Ctrl+u下/上半屏
Ctrl+f / Ctrl+b下/上一屏
%跳转到配对括号
gd / gD局部/全局定义跳转

插入与编辑

命令说明
i / a光标前/后插入
I / A行首/行尾插入
o / O下方/上方新行插入
s / S删除字符/行并插入
r<char>替换一个字符
R进入替换模式
cw / ce修改单词
cc / C修改整行 / 修改到行尾
ciw修改光标处单词
J合并下一行
u / Ctrl+r撤销 / 重做
.重复上次命令

选择与操作

命令说明
v字符可视化模式
V行可视化模式
Ctrl+v块可视化模式
y / d / x复制 / 删除 (剪切) / 删除字符
p / P光标后/前粘贴
yy / dd复制/删除当前行
yw / dw复制/删除单词
yiw / diw复制/删除光标处单词
y$ / d$ / D复制/删除到行尾
">y / "+p系统剪贴板复制/粘贴
"> / <向右/左缩进选区
~切换选区大小写

搜索与替换

命令说明
/pattern向前搜索
?pattern向后搜索
n / N下一个/上一个匹配
* / #向前/后搜索当前单词
:s/old/new替换当前行首个
:s/old/new/g替换当前行全部
:%s/old/new/g替换全文全部
:%s/old/new/gc替换全文(逐个确认)
:noh清除搜索高亮
\v启用非常神奇模式(正则免转义)

文件与窗口

命令说明
:e file打开文件
:w保存
:wq / :x / ZZ保存并退出
:q / :q!退出 / 强制退出
:w !sudo tee %用 sudo 保存只读文件
:sp file水平分割打开文件
:vs file垂直分割打开文件
Ctrl+ws / Ctrl+wv水平/垂直分割窗口
Ctrl+ww切换窗口
Ctrl+wq关闭窗口
Ctrl+w=窗口等大
Ctrl+whjkl切换到左/下/上/右窗口
:tabnew file新标签打开文件
gt / gT下一个/上一个标签
:tabc / :tabo关闭当前/其他标签

标记与跳转

命令说明
m<char>设置标记
`<char>`跳转到标记位置
'<char>跳转到标记行首
返回上次跳转位置
'"返回上次编辑位置
`.返回上次修改位置
Ctrl+o / Ctrl+i后退/前进跳转历史
:marks列出所有标记

实用技巧

文件备份和编辑

备份当前文件并继续编辑:

:w hosts.back.240808 | e!

快速查找替换

在所有文本文件中查找并替换:

:args **/*.txt | argdo %s/pattern/replacement/g | update

批量处理

批量删除所有文件的行尾空白:

:args **/* | argdo %s/\s\+$//e | update

快速拼接文件内容

将多个文件内容拼接到当前光标处:

:r !cat file1.txt file2.txt file3.txt

窗口管理

垂直分割打开文件,关闭其他窗口:

:vsplit file.txt | only

编译与运行代码

编译当前项目并打开错误列表:

:make | copen

运行当前 Python 文件并显示输出:

:w | !python3 %

批量执行宏

在所有文本文件中执行寄存器 q 中的宏:

:args **/*.txt | argdo normal @q | update

自动格式化代码

格式化整个文件并保存:

gg=G | w

删除重复行

:sort | %!uniq -u

对文件行编号

:%!cat -n

将整个文档复制到剪贴板

:%w !pbcopy            # Mac OS X
:%w !xclip -i -sel c   # GNU/Linux
:%w !xsel -i -b        # GNU/Linux

使用边界

速查表适合救急,不适合替代理解。批量替换、宏、argdo、外部命令过滤这类操作在执行前先缩小范围,并确认有 Git diff 或备份可以回退。