跳到主要内容

Vim 命令速查表

快速参考 Vim 常用命令,方便日常查阅。

基础操作

启动和退出

命令作用
vim启动 Vim
vim file打开文件
:q退出
:q!强制退出,不保存
:w保存
:wq:x保存并退出
ZZ保存并退出(快捷方式)
ZQ不保存退出(快捷方式)

模式切换

命令作用
i在光标前插入
a在光标后插入
I在行首插入
A在行尾插入
o在下方新建一行
O在上方新建一行
EscCtrl+[回到普通模式
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在光标前/上方粘贴

修改

命令作用
ccS修改整行
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字串diWdaW
s句子disdas
p段落dipdap
"双引号di"da"
'单引号di'da'
`反引号di`da`
(b圆括号di(dibda(
[方括号di[da[
{B花括号di{diBda{
<尖括号di<da<
tHTML 标签ditdat

文本对象操作示例

" 假设文本: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 expandtabTab 转空格
:set tabstop=4Tab 宽度
: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-8UTF-8 编码
:set fileencoding=utf-8文件编码

查看和设置选项

:set              " 显示所有非默认设置
:set all " 显示所有设置
:set {option}? " 查看选项值
:set {option} " 开启选项
:set no{option} " 关闭选项
:set {option}! " 切换选项
:set {option}={value} " 设置值

参考资源

官方文档

学习资源

插件和主题

书籍

  • 《Practical Vim》by Drew Neil
  • 《Learning the vi and Vim Editors》
  • 《Modern Vim》by Drew Neil