目录

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

推荐配置

对于新手,可以使用预配置的发行版快速上手: