Vim精通
2025/11/13大约 7 分钟
Vim精通
模式切换
i # 进入插入模式(在光标前)
I # 进入插入模式(在行首)
a # 进入插入模式(在光标后)
A # 进入插入模式(在行尾)
o # 进入插入模式(在当前行下方新建行)
O # 进入插入模式(在当前行上方新建行)
v # 进入字符可视模式
V # 进入行可视模式
Ctrl-v # 进入块可视模式
Esc # 返回普通模式
Ctrl-[ # 返回普通模式(同Esc)普通模式
光标移动
h/j/k/l # 左/下/上/右移动
0 # 跳到行首
$ # 跳到行尾
^ # 跳到行首第一个非空白字符
gg # 跳到文件开头
G # 跳到文件末尾
50G # 跳到第50行
w # 跳到下一个单词开头
e # 跳到单词结尾
b # 跳到前一个单词开头
fx # 向前跳到字符x(包含x)
Fx # 向后跳到字符x(包含x)
tx # 向前跳到字符x之前
Tx # 向后跳到字符x之后
% # 在匹配的括号间跳转编辑
x # 删除当前字符
dd # 删除整行
dw # 删除一个单词
D # 删除到行尾(同d$)
yy # 复制当前行
yw # 复制一个单词
p # 在光标后粘贴
P # 在光标前粘贴
u # 撤销
Ctrl-r # 重做
. # 重复上一次修改搜索替换
/pattern # 向前搜索
?pattern # 向后搜索
n # 下一个匹配项
N # 上一个匹配项
:s/old/new/g # 替换当前行所有old
:%s/old/new/g # 替换整个文件中的old插入模式
进入方式
i # 在光标前插入
I # 在行首插入
a # 在光标后插入
A # 在行尾插入
o # 在当前行下方新建行并插入
O # 在当前行上方新建行并插入编辑快捷键
Ctrl-h # 删除前一个字符(同Backspace)
Ctrl-w # 删除前一个单词
Ctrl-u # 删除到行首
Ctrl-r # [寄存器] 插入寄存器内容
Ctrl-o # 临时执行普通模式命令
Esc # 返回普通模式可视化模式
进入选择模式
v # 字符选择模式(选择任意字符范围)
V # 行选择模式(选择整行)
Ctrl-v # 块选择模式(选择矩形区域)
gv # 重新选择上次选中的区域文本对象选择
aw # 选择一个单词(包含周围空格)
iw # 选择一个单词(不包含周围空格)
a" # 选择双引号内的内容(包含引号)
i" # 选择双引号内的内容(不包含引号)
a( # 选择圆括号内的内容(包含括号)
i( # 选择圆括号内的内容(不包含括号)可视模式操作
d # 删除选中内容
y # 复制选中内容
c # 修改选中内容(删除并进入插入模式)
> # 向右缩进
< # 向左缩进
u # 将选中内容转为小写
U # 将选中内容转为大写
~ # 切换选中内容大小写底行模式
基本文件操作
# 基本文件操作
:w # 保存文件
:w newfile.txt # 另存为新文件
:wq # 保存并退出
:x # 保存并退出(同:wq)
:q # 退出(无修改时)
:q! # 强制退出(不保存修改)
:qa # 退出所有窗口
:qa! # 强制退出所有窗口(不保存)
# 文件读写
:e filename # 打开文件
:e . # 打开文件浏览器
:r filename # 读取文件内容插入当前位置
:r !command # 读取命令输出插入当前位置
:saveas newfile # 另存为新文件搜索替换命令
# 基本替换
:s/old/new # 替换当前行第一个old为new
:s/old/new/g # 替换当前行所有old为new
:1,10s/old/new/g # 替换1-10行所有old为new
:%s/old/new/g # 替换整个文件中的old为new
# 替换确认模式
:%s/old/new/gc # 替换时逐个确认
# 确认选项:
# y - 替换当前匹配
# n - 跳过当前匹配
# a - 替换所有剩余匹配
# q - 退出替换
# l - 替换当前匹配后退出
# 全局命令
:g/pattern # 显示所有包含pattern的行
:g/pattern/d # 删除所有包含pattern的行
:v/pattern/d # 删除所有不包含pattern的行(反向删除)
:g/pattern/p # 打印所有包含pattern的行
:g/pattern/s//new/g # 将所有pattern替换为new范围操作命令
# 行范围指定
:10 # 跳到第10行
:10,20 # 选择10-20行
:.,$ # 从当前行到文件末尾
:1,. # 从第1行到当前行
:% # 整个文件(同1,$)
:'a,'b # 从标记a到标记b
# 范围操作示例
:10,20d # 删除10-20行
:.,+5d # 删除当前行及后面5行
:1,$s/old/new/g # 整个文件替换(同:%s/old/new/g)
:10,20w newfile # 将10-20行写入新文件设置命令
# 常用设置
:set number # 显示行号
:set nonumber # 隐藏行号
:set relativenumber # 显示相对行号
:set norelativenumber # 隐藏相对行号
:set wrap # 启用自动换行
:set nowrap # 禁用自动换行
:set hlsearch # 高亮搜索结果
:set nohlsearch # 取消高亮搜索结果
:set ignorecase # 搜索忽略大小写
:set noignorecase # 搜索区分大小写
:set smartcase # 智能大小写(有大写时区分)
# 显示设置
:set list # 显示不可见字符
:set nolist # 隐藏不可见字符
:set cursorline # 高亮当前行
:set nocursorline # 取消高亮当前行
:set colorcolumn=80 # 在80列显示参考线缓冲区与窗口命令
# 缓冲区命令
:ls # 列出所有缓冲区
:bn # 下一个缓冲区
:bp # 上一个缓冲区
:bd # 删除当前缓冲区
:bd2 # 删除2号缓冲区
:b filename # 切换到指定文件名的缓冲区
:b 2 # 切换到2号缓冲区
# 窗口命令
:sp filename # 水平分割窗口
:vsp filename # 垂直分割窗口
:new # 新建水平分割窗口
:vnew # 新建垂直分割窗口
:only # 关闭其他窗口(只保留当前)
:q # 关闭当前窗口
# 普通模式下窗口操作
Ctrl-w s # 水平分割当前窗口
Ctrl-w v # 垂直分割当前窗口
Ctrl-w h/j/k/l # 切换到左/下/上/右窗口
Ctrl-w c # 关闭当前窗口
Ctrl-w o # 只保留当前窗口
# 标签页
:tabnew [文件] # 新建标签页
:tabclose # 关闭当前标签页
# 普通模式下标签页操作
gt # 下一个标签页
gT # 上一个标签页
2gt # 切换到第2个标签页实用工具命令
# 外部命令
:!ls # 执行外部命令ls
:!grep pattern % # 在当前文件中搜索pattern
:r !date # 插入当前日期时间
:!make # 执行make命令
# 信息查看
:version # 查看Vim版本信息
:scriptnames # 查看已加载的脚本
:set all # 查看所有设置
:map # 查看所有映射
:reg # 查看所有寄存器内容
:marks # 查看所有标记历史记录和自动补全
# 历史命令
:↑/↓ # 浏览命令历史
:history # 查看命令历史
Ctrl-r Ctrl-w # 将当前单词插入命令行
Ctrl-r Ctrl-a # 将当前行插入命令行
# 自动补全
Tab # 补全命令或文件名
Ctrl-d # 显示可用的补全选项高级技巧
# 表达式计算
:echo 2+2 # 计算并显示结果
:put=2+2 # 插入计算结果
# 批量执行普通模式命令
:%normal A; # 在所有行尾添加分号
:%normal >> # 所有行向右缩进
:10,20normal dd # 在10-20行执行dd命令
# 条件执行
:g/^#/normal I// # 在所有以#开头的行首添加//
:v/^$/normal dd # 删除所有非空行批量操作
可视化操作
# 选择区域后:
I [文本] Esc # 在块前插入相同文本
A [文本] Esc # 在块后插入相同文本
rX # 将选中块替换为字符X
d # 删除选中块
y # 复制选中块
p # 粘贴选中块数字重复操作
3dd # 删除3行
5yy # 复制5行
2cw # 修改2个单词
10i- Esc # 插入10个连字符宏录制
qa # 开始录制宏到寄存器a
q # 停止录制
@a # 执行寄存器a中的宏
@@ # 重复执行上一次宏高级功能
寄存器操作
"ayy # 复制当前行到寄存器a
"ap # 粘贴寄存器a的内容
"+y # 复制到系统剪贴板
"+p # 从系统剪贴板粘贴
:reg # 查看所有寄存器内容标记系统
ma # 设置标记a
'a # 跳转到标记a
`. # 跳转到最后修改的位置
:marks # 查看所有标记组合技巧
文本对象操作
di" 删除双引号内的内容
ci( 修改圆括号内的内容
yat 复制整个标签内容
dtx 删除直到字符x(不包含x)
dfx 删除直到字符x(包含x)高效编辑组合
gg=G # 整个文件自动缩进
gv # 重新选择上次选区
Ctrl-a # 增加数字
Ctrl-x # 减少数字