你以为你懂Vim了?那只是你以为。
写在前面
当你已经习惯了hjkl移动光标,能用dw删除单词,会用/搜索,甚至配置了一套自己的.vimrc——恭喜你,你已经超越了90%的Vim用户。
但Vim之所以被称作“编辑器之神”,是因为它的深度远超想象。
今天这篇进阶心法,不讲基础,不讲配置,只讲那些藏在角落里的、让老手都忍不住“卧槽”的黑科技。
有些技巧你可能用了一辈子Vim都没发现,有些则能让你瞬间甩掉鼠标的最后一丝依赖。
准备好了吗?10个进阶技巧,看看你知道几个。

技巧1::g全局命令——沉默的批量处理器
是什么?
:g是Vim最被低估的命令之一。它的全称是:global,作用是在所有匹配某模式的行上执行命令。
语法::[range]g/pattern/cmd
翻译成人话:在指定范围内,找到所有匹配pattern的行,对它们执行cmd。
怎么用?
场景1:删除所有包含TODO的行
text
:g/TODO/d
瞬间,所有带TODO的行灰飞烟灭。不需要手动搜索、选中、删除,一行命令搞定。
场景2:把所有“foo”改成“bar”,但只改包含“baz”的行
text
:g/baz/s/foo/bar/g
这就是Vim版的“精准打击”。普通替换是全局的,但加上:g,你可以限定范围。
场景3:删除所有空行
text
:g/^$/d
^$匹配行首紧接着行尾,就是空行。
场景4:给所有匹配的行移动位置
text
:g/error/m$
把所有包含error的行移动到文件末尾($代表最后一行)。
反向操作::v
:v是:g的“反义词”,作用在不匹配的行上。
text
:v/TODO/d
删除所有不包含TODO的行——相当于只保留TODO行。
老手才知道的
:g还可以配合:normal使用,实现批量普通模式操作。比如给所有匹配行加个分号:
text
:g/^$/normal A;
这个我们后面会细讲。

技巧2::norm——批量执行普通模式命令
是什么?
:normal命令让你在命令行模式下执行普通模式的命令。结合可视区域或:g,它可以实现“一键批量操作”。
怎么用?
场景1:给选中的多行末尾加分号
- 选中你想操作的行(可视模式V)
- 输入 :'<,'>normal A;
'<,'>是自动补全的范围,代表你选中的区域。A;的意思是“行尾插入分号”。
场景2:给文件前10行添加注释符#
text
:1,10normal I#
I#是“行首插入#”。
场景3:把包含TODO的行的首字母大写
text
:g/TODO/normal gU^
gU^是从行首到第一个非空字符大写。
为什么强大?
:normal把Vim变成了“批处理脚本”。当你需要重复某个操作时,先录宏是一种方式,但:normal往往更直接、更优雅。
技巧3:Ctrl+a / Ctrl+x——数字递增/递减
是什么?
在普通模式下:
- Ctrl+a:光标下的数字+1
- Ctrl+x:光标下的数字-1

怎么用?
基础用法:
text
把数字42变成43 → 光标放在42上,按Ctrl+a
进阶用法:带数字前缀
text
把数字42变成52 → 10 + Ctrl+a
是的,你可以按10再按Ctrl+a,数字增加10。
高阶用法:配合可视模式
选中的数字全部递增:
- 选中多行数字(可视模式Ctrl+v块选择)
- 按g + Ctrl+a
所有数字会依次递增:第一行+1,第二行+2,第三行+3……
实战:生成序号列表
假设你要生成:
text
1. 第一项
2. 第二项
3. 第三项
方法:先写出三行0.,选中这三行,按g Ctrl+a,瞬间变成1.、2.、3.。
注意
- 支持十六进制、八进制(需要配置)
- 支持负数
- 如果光标不在数字上,会向后搜索当前行的第一个数字
技巧4:q:——命令行窗口,编辑命令历史
是什么?
在普通模式下按q:,会打开一个历史命令窗口。这不是命令行,而是一个可以编辑的缓冲区,里面记录了你所有的命令历史。
怎么用?
场景:修改刚才输错的命令
你刚执行了一个:s/foo/br/g,发现应该是bar不是br。怎么办?
按q:打开命令窗口,找到那行命令,用Vim的方式编辑它(比如f/定位到br,改成bar),然后按回车,命令重新执行。
场景:重复执行多个命令
在命令窗口里,你可以:
- 像编辑文本一样编辑命令
- 复制、粘贴、删除命令
- 选中多行命令,按回车批量执行
老手才知道的
q:是命令行模式的历史编辑,还有:
- q/:搜索历史窗口
- q?:反向搜索历史窗口
这三个窗口是你回顾操作、重复利用历史命令的最佳帮手。
技巧5:gf——跳转到光标下的文件
是什么?
在普通模式下,把光标放在一个文件名上,按gf(goto file),Vim会尝试打开那个文件。
怎么用?
场景:快速跳转#include
在C语言代码里:
c
#include "utils.h"
光标放在utils.h上,按gf,直接打开头文件。
场景:配合path设置
Vim会根据path选项搜索文件。在你的.vimrc里添加:
vim
set path+=**
这样gf会递归搜索当前目录下的所有子目录。
反向操作:Ctrl+o / Ctrl+i
跳过去之后怎么回来?
- Ctrl+o:跳回上一个位置(类似浏览器的后退)
- Ctrl+i:前进
这个组合键在任何地方都有效,不只是gf。
技巧6:%——括号匹配跳转
是什么?
在普通模式下,光标放在(、{、[或对应的)、}、]上,按%,光标会跳到匹配的那个括号上。
怎么用?
场景:检查括号是否匹配
写代码时,经常遇到括号嵌套太多,不知道哪个}对应哪个{。
把光标放在{上,按%,直接跳到对应的}。再按一次,跳回来。
场景:选中括号内的所有内容
text
vi%
这个组合是什么意思?
- v:进入可视模式
- i:选择“内部”
- %:匹配的括号
结果是:选中光标所在括号内的全部内容,不包括括号本身。
如果要包括括号,用va%(a代表around)。
老手才知道的
%可以配合各种插件增强,比如支持HTML标签匹配:
vim
" 让%也支持HTML标签
packadd! matchit
这样在<div>上按%,会跳到对应的</div>。

技巧7:[ ]系列——函数间跳转
是什么?
Vim内置了一系列“跳转到上一个/下一个某某”的命令,以[和]开头。
怎么用?
最常用的几个:
- [[:跳转到上一个函数开始
- ]]:跳转到下一个函数开始
- []:跳转到上一个函数结束
- ][:跳转到下一个函数结束
- [m:跳转到上一个成员函数(针对C++)
- ]m:跳转到下一个成员函数
为什么有用?
当你在一个几千行的文件里,想快速定位到下一个函数,不需要搜索,不需要鼠标滚轮,]]两下就搞定。
注意
这些命令依赖于Vim对文件类型的识别。对于C、C++、Java、Python等主流语言,Vim都能正确识别函数边界。
如果觉得不够,可以搭配ctags或cscope使用,实现更强大的代码导航。
技巧8:折叠(folding)——让长文件变清爽
是什么?
折叠可以让你“收起”一部分代码,只显示摘要,需要时再展开。对于长文件,这是阅读神器。
怎么用?
基础命令:
- zc:折叠当前块(fold close)
- zo:展开当前块(fold open)
- zM:折叠全部(fold More)
- zR:展开全部(fold Reduce)
- za:切换折叠状态(fold alternate)
设置折叠方式:
vim
set foldmethod=indent " 按缩进折叠
set foldmethod=syntax " 按语法折叠(需要语法高亮)
set foldmethod=marker " 按标记折叠(自定义 {{{ }}})
自定义标记折叠:
python
def long_function(): # {{{
# 很长的代码
pass
# }}}
这样按zc,整个函数就折叠成一行,显示def long_function(): ...。
老手才知道的
配合zC和zO可以递归折叠/展开嵌套结构。配合zv可以自动展开光标所在位置的折叠,保证光标可见。
技巧9:gv——重选上次选中区域
是什么?
在普通模式下按gv,会重新选中你上一次在可视模式下选中的区域。
怎么用?
场景1:重复操作
你刚用viw选中了一个单词,然后改成了别的。现在想再对这个单词做点别的操作?
按gv,它又回来了。然后你可以按y复制、按d删除、按U大写……
场景2:微调选择
你选中了一段代码,按d删除了。发现删多了?按u撤销,然后按gv重新选中,调整边界后重新操作。
为什么有用?
gv解决了Vim一个“痛点”:选中区域在操作后会消失。有了gv,你可以对同一区域执行多个操作,而不需要重新选中。
技巧10::help——Vim最好的文档
是什么?
Vim自带了一部“百科全书”——:help。
怎么用?
基础:
text
:help " 打开帮助首页
:help :s " 查找:s命令的帮助
:help ctrl-a " 查找Ctrl+a的帮助
:help 'number' " 查找number选项的帮助(注意引号)
高阶:
- :help user-manual:用户手册,按顺序学习
- :help index:所有命令的索引
- :help quickref:快速参考,打印出来贴在工位上
在帮助文档里导航:
- Ctrl+]:跳转到光标下的标签(超链接)
- Ctrl+o:跳回
- :h + 空格 + Tab:自动补全主题
老手才知道的
Vim帮助系统本身就是Vim最好的“教学演示”。在帮助窗口里,你可以看到Vim的各种功能在实战中是如何工作的。
一个彩蛋:
text
:help 42
猜猜会显示什么?答案是:life, the universe and everything——《银河系漫游指南》的梗。Vim开发者的小幽默。
总结:从“会用”到“精通”
这10个技巧,覆盖了Vim的:
- 批量处理::g、:norm
- 数字操作:Ctrl+a/x
- 历史与导航:q:、gf、%、[ ]
- 视觉与折叠:gv、折叠命令
- 终极武器::help

470

被折叠的 条评论
为什么被折叠?



