Vim 命令速查表
快速参考 Vim 常用命令,方便日常查阅。
基础操作
启动和退出
| 命令 | 作用 |
|---|---|
vim | 启动 Vim |
vim file | 打开文件 |
:q | 退出 |
:q! | 强制退出,不保存 |
:w | 保存 |
:wq 或 :x | 保存并退出 |
ZZ | 保存并退出(快捷方式) |
ZQ | 不保存退出(快捷方式) |
模式切换
| 命令 | 作用 |
|---|---|
i | 在光标前插入 |
a | 在光标后插入 |
I | 在行首插入 |
A | 在行尾插入 |
o | 在下方新建一行 |
O | 在上方新建一行 |
Esc 或 Ctrl+[ | 回到普通模式 |
v | 字符可视模式 |
V | 行可视模式 |
Ctrl+v | 块可视模式 |
: | 命令行模式 |
光标移动
基本移动
| 命令 | 作用 |
|---|---|
h | 左移 |
j | 下移 |
k | 上移 |
l | 右移 |
行内移动
| 命令 | 作用 |
|---|---|
0 | 行首 |
^ | 行首第一个非空字符 |
$ | 行尾 |
g_ | 行尾最后一个非空字符 |
w | 下一个单词开头 |
e | 下一个单词结尾 |
b | 上一个单词开头 |
ge | 上一个单词结尾 |
f{char} | 跳到字符(向后) |
F{char} | 跳到字符(向前) |
t{char} | 跳到字符前(向后) |
T{char} | 跳到字符后(向前) |
; | 重复上次 f/t 搜索 |
, | 反向重复上次 f/t 搜索 |
行间移动
| 命令 | 作用 |
|---|---|
gg | 文件开头 |
G | 文件末尾 |
nG | 跳到第 n 行 |
:n | 跳到第 n 行 |
{ | 上一个段落 |
} | 下一个段落 |
H | 屏幕顶部 |
M | 屏幕中间 |
L | 屏幕底部 |
Ctrl+f | 向下翻页 |
Ctrl+b | 向上翻页 |
Ctrl+d | 向下翻半页 |
Ctrl+u | 向上翻半页 |
编辑操作
删除
| 命令 | 作用 |
|---|---|
x | 删除光标处字符 |
X | 删除光标前字符 |
dd | 删除整行 |
D | 删除到行尾 |
dw | 删除单词 |
diw | 删除当前单词 |
di" | 删除引号内内容 |
di( | 删除括号内内容 |
复制和粘贴
| 命令 | 作用 |
|---|---|
yy | 复制整行 |
yw | 复制单词 |
yiw | 复制当前单词 |
y$ | 复制到行尾 |
p | 在光标后/下方粘贴 |
P | 在光标前/上方粘贴 |
修改
| 命令 | 作用 |
|---|---|
cc 或 S | 修改整行 |
C | 修改到行尾 |
cw | 修改单词 |
ciw | 修改当前单词 |
ci" | 修改引号内内容 |
ci( | 修改括号内内容 |
r | 替换单个字符 |
R | 替换模式 |
~ | 切换大小写 |
撤销和重做
| 命令 | 作用 |
|---|---|
u | 撤销 |
Ctrl+r | 重做 |
U | 撤销整行修改 |
. | 重复上次操作 |
搜索和替换
搜索
| 命令 | 作用 |
|---|---|
/{pattern} | 向前搜索 |
?{pattern} | 向后搜索 |
n | 下一个匹配 |
N | 上一个匹配 |
* | 向前搜索当前单词 |
# | 向后搜索当前单词 |
替换
| 命令 | 作用 |
|---|---|
:s/old/new/ | 替换当前行第一个 |
:s/old/new/g | 替换当前行所有 |
:%s/old/new/g | 替换整个文件 |
:%s/old/new/gc | 替换并确认 |
:5,10s/old/new/g | 替换 5-10 行 |
寄存器
| 命令 | 作用 |
|---|---|
:reg | 查看寄存器 |
"ayy | 复制到寄存器 a |
"ap | 粘贴寄存器 a |
"0p | 粘贴上次复制 |
"1p | 粘贴上次删除 |
"+yy | 复制到系统剪贴板 |
"+p | 从系统剪贴板粘贴 |
Ctrl+r = | 表达式寄存器 |
宏
| 命令 | 作用 |
|---|---|
q{寄存器} | 开始录制 |
q | 停止录制 |
@{寄存器} | 播放宏 |
@@ | 重复上次宏 |
10@{寄存器} | 播放 10 次 |
多文件编辑
缓冲区
| 命令 | 作用 |
|---|---|
:e file | 打开文件 |
:bnext 或 :bn | 下一个缓冲区 |
:bprev 或 :bp | 上一个缓冲区 |
:bd | 删除缓冲区 |
:ls | 列出缓冲区 |
:b n | 切换到第 n 个缓冲区 |
窗口
| 命令 | 作用 |
|---|---|
:split 或 :sp | 水平分割 |
:vsplit 或 :vsp | 垂直分割 |
Ctrl+w h | 移到左窗口 |
Ctrl+w j | 移到下窗口 |
Ctrl+w k | 移到上窗口 |
Ctrl+w l | 移到右窗口 |
Ctrl+w c | 关闭窗口 |
Ctrl+w o | 只保留当前窗口 |
标签页
| 命令 | 作用 |
|---|---|
:tabnew | 新建标签页 |
:tabnext 或 :tn | 下一个标签页 |
:tabprev 或 :tp | 上一个标签页 |
:tabclose 或 :tabc | 关闭标签页 |
gt | 切换到下一个标签页 |
gT | 切换到上一个标签页 |
ngt | 切换到第 n 个标签页 |
可视模式
| 命令 | 作用 |
|---|---|
v | 字符可视模式 |
V | 行可视模式 |
Ctrl+v | 块可视模式 |
d | 删除选中 |
y | 复制选中 |
c | 修改选中 |
> | 向右缩进 |
< | 向左缩进 |
= | 自动缩进 |
gv | 重新选择上次区域 |
文本对象详解
文本对象类型
| 对象 | 说明 | 内部 (i) | 包含边界 (a) |
|---|---|---|---|
w | 单词 | diw 删除单词 | daw 删除单词及空格 |
W | 字串 | diW | daW |
s | 句子 | dis | das |
p | 段落 | dip | dap |
" | 双引号 | di" | da" |
' | 单引号 | di' | da' |
` | 反引号 | di` | da` |
( 或 b | 圆括号 | di( 或 dib | da( |
[ | 方括号 | di[ | da[ |
{ 或 B | 花括号 | di{ 或 diB | da{ |
< | 尖括号 | di< | da< |
t | HTML 标签 | dit | dat |
文本对象操作示例
" 假设文本:print("Hello World")
di" → print("") # 删除引号内
da" → print() # 删除引号及内容
ci" → print("|") # 修改引号内(| 表示光标)
yi" → 复制 "Hello World"
标记与跳转
标记命令
| 命令 | 作用 |
|---|---|
m{a-z} | 设置本地标记(当前文件) |
m{A-Z} | 设置全局标记(跨文件) |
`{mark} | 跳到标记的精确位置 |
'{mark} | 跳到标记所在行首 |
:marks | 查看所有标记 |
:delmarks {mark} | 删除标记 |
特殊标记
| 标记 | 含义 |
|---|---|
` | 上次跳转前的位置 |
. | 上次修改的位置 |
^ | 上次插入结束的位置 |
[ | 上次修改/复制的开始 |
] | 上次修改/复制的结束 |
< | 上次可视选择的开始 |
> | 上次可视选择的结束 |
跳转命令
| 命令 | 作用 |
|---|---|
Ctrl+o | 跳转到上一个位置 |
Ctrl+i | 跳转到下一个位置 |
:ju | 查看跳转列表 |
g; | 跳到上一个修改位置 |
g, | 跳到下一个修改位置 |
:changes | 查看修改列表 |
折叠
折叠命令
| 命令 | 作用 |
|---|---|
zf | 创建折叠 |
zd | 删除折叠 |
zo | 打开折叠 |
zc | 关闭折叠 |
zO | 递归打开所有折叠 |
zC | 递归关闭所有折叠 |
za | 切换折叠状态 |
zA | 递归切换折叠状态 |
zR | 打开所有折叠 |
zM | 关闭所有折叠 |
zE | 删除所有折叠 |
[z | 跳到当前折叠开始 |
]z | 跳到当前折叠结束 |
折叠方法
:set foldmethod=manual " 手动折叠
:set foldmethod=indent " 基于缩进
:set foldmethod=expr " 基于表达式
:set foldmethod=marker " 基于标记
:set foldmethod=syntax " 基于语法
:set foldmethod=diff " 用于 diff 模式
拼写检查
| 命令 | 作用 |
|---|---|
:set spell | 启用拼写检查 |
:set nospell | 禁用拼写检查 |
]s | 跳到下一个拼写错误 |
[s | 跳到上一个拼写错误 |
z= | 显示纠正建议 |
zg | 添加单词到字典 |
zw | 标记为拼写错误 |
zug | 撤销添加到字典 |
" 设置拼写检查语言
:set spelllang=en_us
:set spelllang=zh_cn,en_us " 支持多种语言
其他实用命令
文件操作
| 命令 | 作用 |
|---|---|
:pwd | 显示当前目录 |
:cd dir | 切换目录 |
:lcd dir | 仅当前窗口切换目录 |
:saveas file | 另存为 |
:file newname | 改变文件名但不保存 |
:edit! | 放弃修改重新加载文件 |
:write >> file | 追加到文件 |
文本处理
| 命令 | 作用 |
|---|---|
J | 合并当前行与下一行 |
gJ | 合并行(不加空格) |
:sort | 排序 |
:sort! | 逆序排序 |
:sort u | 排序并去重 |
:uniq | 去除重复行 |
g Ctrl+g | 显示字数统计 |
帮助
| 命令 | 作用 |
|---|---|
:help | 打开帮助 |
:help {主题} | 查看特定主题 |
:helpgrep {模式} | 搜索帮助文档 |
K | 查看光标下单词的帮助 |
Ctrl+] | 跳转到帮助标签 |
Ctrl+o | 从帮助返回 |
外部命令
| 命令 | 作用 |
|---|---|
:!{cmd} | 执行外部命令 |
:r !{cmd} | 插入命令输出 |
:.!{cmd} | 用命令输出替换当前行 |
:!cat % | 查看当前文件 |
:shell | 启动交互式 shell |
分屏操作补充
| 命令 | 作用 |
|---|---|
Ctrl+w s | 水平分割 |
Ctrl+w v | 垂直分割 |
Ctrl+w n | 新建水平窗口 |
Ctrl+w q | 关闭当前窗口 |
Ctrl+w o | 只保留当前窗口 |
Ctrl+w T | 移到新标签页 |
Ctrl+w r | 旋转窗口 |
Ctrl+w x | 交换窗口 |
Ctrl+w K | 移到最上边 |
Ctrl+w J | 移到最下边 |
Ctrl+w H | 移到最左边 |
Ctrl+w L | 移到最右边 |
记忆技巧
操作符
d= delete(删除)c= change(修改)y= yank(复制)>= 右移<= 左移
文本对象
i= inner(内部)a= around(包含边界)w= word(单词)p= paragraph(段落)""= 引号(,),b= 圆括号{,},B= 花括号
组合公式
操作符 + 动作 = 操作
示例:
d + w = 删除单词
c + i" = 修改引号内内容
y + ip = 复制段落
> + G = 缩进到文件末尾
配置选项速查
常用设置
| 设置 | 说明 |
|---|---|
:set number | 显示行号 |
:set relativenumber | 显示相对行号 |
:set expandtab | Tab 转空格 |
:set tabstop=4 | Tab 宽度 |
:set shiftwidth=4 | 缩进宽度 |
:set autoindent | 自动缩进 |
:set smartindent | 智能缩进 |
:set hlsearch | 高亮搜索 |
:set incsearch | 增量搜索 |
:set ignorecase | 忽略大小写 |
:set smartcase | 智能大小写 |
:set wrap | 自动换行 |
:set mouse=a | 启用鼠标 |
:set clipboard=unnamedplus | 系统剪贴板 |
:set encoding=utf-8 | UTF-8 编码 |
:set fileencoding=utf-8 | 文件编码 |
查看和设置选项
:set " 显示所有非默认设置
:set all " 显示所有设置
:set {option}? " 查看选项值
:set {option} " 开启选项
:set no{option} " 关闭选项
:set {option}! " 切换选项
:set {option}={value} " 设置值
参考资源
官方文档
学习资源
- Vim Adventures - 游戏化学习
- Open Vim - 交互式教程
- Vim Tutor - 快速参考
- Vim Tips Wiki
插件和主题
- Vim Awesome - 插件发现
- vim-plug - 插件管理器
书籍
- 《Practical Vim》by Drew Neil
- 《Learning the vi and Vim Editors》
- 《Modern Vim》by Drew Neil