Vim 实用技巧速查
目录
Vim 的学习曲线陡峭,但一旦掌握常用技巧,编辑效率会远超普通编辑器。本文整理日常高频使用的 Vim 操作,按场景分类方便速查。
模式与基础操作
Vim 有四种主要模式:
| 模式 | 进入方式 | 用途 |
|---|---|---|
| Normal | Esc |
移动光标、删除、复制等操作 |
| Insert | i / a / o |
输入文本 |
| Visual | v / V / Ctrl+v |
选择文本 |
| Command | : |
执行命令(保存、替换等) |
常用移动
| 按键 | 作用 |
|---|---|
h j k l |
左下上右 |
w / b |
下一个/上一个单词开头 |
0 / $ |
行首/行尾 |
gg / G |
文件开头/末尾 |
Ctrl+d / Ctrl+u |
向下/向上翻半页 |
% |
跳转到匹配的括号 |
f{char} |
跳转到当前行下一个 {char} |
; |
重复上次 f 查找 |
常用编辑
| 按键 | 作用 |
|---|---|
dd |
删除当前行 |
D |
删除到行尾 |
dw |
删除一个单词 |
yy |
复制当前行 |
yw |
复制一个单词 |
p |
粘贴 |
u |
撤销 |
Ctrl+r |
重做 |
. |
重复上次操作 |
文本对象
Vim 的文本对象让操作更精确,格式为 操作 + 范围 + 对象:
| 文本对象 | 含义 | 示例 |
|---|---|---|
iw |
内部单词 | diw 删除光标下的单词 |
i" |
双引号内部 | ci" 修改引号内内容 |
i( |
括号内部 | di( 删除括号内内容 |
it |
标签内部 | dit 删除 HTML 标签内内容 |
aw |
包含空格的单词 | daw 删除单词及尾部空格 |
a" |
包含引号 | da" 删除引号及引号内内容 |
"Hello World" 光标在 Hello 中间
ci" → "" (进入 Insert 模式,引号内被清空)
da" → (整行都不见了,引号也被删除)搜索与替换
基础搜索
| 命令 | 作用 |
|---|---|
/pattern |
向下搜索 |
?pattern |
向上搜索 |
n / N |
下一个/上一个匹配 |
* |
搜索光标下的单词 |
:noh |
取消搜索高亮 |
替换命令
" 替换当前行第一个匹配
:s/old/new/
" 替换当前行所有匹配
:s/old/new/g
" 替换全文所有匹配
:%s/old/new/g
" 替换全文,每次询问确认
:%s/old/new/gc
" 替换指定行范围(第 10-20 行)
:10,20s/old/new/g正则表达式技巧
Vim 的正则默认需要转义较多,使用 \v(very magic 模式)可以减少反斜杠:
" 驼峰转下划线(very magic 模式)
:%s/\v([a-z])@<=([A-Z])/_\2/g
" 删除文件中的空白行
:g/^\s*$/d
" 删除包含 pattern 的行
:g/pattern/d
" 删除不包含 pattern 的行
:v/pattern/d
" 去除重复行
:sort u大小写转换
~ 切换光标下字母的大小写
gUU 当前行转大写
guu 当前行转小写
gUw 光标下单词转大写
guw 光标下单词转小写
U 可视模式选中的文本转大写
u 可视模式选中的文本转小写替换中的大小写控制:
" 替换时首字母大写
:%s/\v(\w)/\u\1/g
" 替换时全部小写
:%s/OLD/\L&/g
" 转义序列:\u 首字母大写,\U 全大写,\l 首字母小写,\L 全小写排序与行号
" 对所有行排序
:sort
" 排序并去重
:sort u
" 逆序排列
:sort!
" 按数字排序
:sort n
" 每行头部添加行号
:%s/^/\=line('.') . '. '/
" 使用 \= 插入表达式结果多行编辑(Visual Block)
Ctrl+v 进入 Visual Block 模式,可以同时编辑多行:
操作步骤:
1. Ctrl+v 进入块选择
2. 选择区域(hjkl 移动)
3. I 进入插入模式,输入文本
4. Esc 应用到所有选中行常用场景:
| 场景 | 操作 |
|---|---|
| 多行行首添加注释 | Ctrl+v → 选择行 → I → // → Esc |
| 多行行尾添加内容 | Ctrl+v → 选择行 → $ → A → 内容 → Esc |
| 删除多行的特定列 | Ctrl+v → 选择区域 → d |
| 将选中内容对齐 | Ctrl+v → 选择 → = |
宏录制
宏可以录制一系列操作并重复执行:
" 开始录制到寄存器 a
qa
" 执行你的操作序列(例如:行首加逗号,跳到下一行)
I,Escj
" 停止录制
q
" 执行宏 a
@a
" 执行宏 a 10 次
10@a
" 执行宏 a 到文件末尾
:999normal @a文件操作
格式转换
" 去除 Windows 换行符 ^M
:set fileformat=unix
:w
" 文件编码转换
:set fileencoding=utf-8十六进制编辑
" 以十六进制显示
:%!xxd
" 切回正常模式
:%!xxd -r分屏操作
:sp filename 水平分屏打开文件
:vsp filename 垂直分屏打开文件
Ctrl+w h/j/k/l 切换分屏
Ctrl+w = 均分分屏大小
Ctrl+w _ 最大化当前分屏高度
Ctrl+w | 最大化当前分屏宽度
:close 关闭当前分屏实用命令
" 查看按键映射来源
:verbose map <key>
" 查看错误信息
:echo errmsg
:help error
" 显示行号
:set number
" 搜索时忽略大小写
:set ignorecase
:set smartcase " 有大写字母时区分大小写
" 高亮搜索
:set hlsearch
" 自动缩进
:set autoindent
" 显示匹配的括号
:set showmatch
" 语法高亮
:syntax on推荐配置
对于新手,可以使用预配置的发行版快速上手: