zf% 最省事——光标停在函数开头的 { 或 ( 上按 zf%,Vim 自动识别匹配括号并折叠整个函数体;支持 C/Java/Python 等语言,缩进有效时亦可用 zc 折叠;还可通过行号(如 120,850zf)、范围(300zf+)或 zfG 精准折叠;zo/zc/za/zO/zM/zr/zR 控制展开收起;:mkview/:loadview 保存恢复折叠状态。

直接用 zf% 最省事——把光标停在函数开头的 { 或 ( 上,按 zf%,Vim 会自动识别匹配的闭合括号,把整个函数体折叠成一行。
快速定位并折叠单个超长函数
适用于 C/Java/Python(缩进有效时)等常见语言。前提是函数有清晰的起始括号或缩进结构:
- 把光标移到函数定义行末尾的
{(或(,比如void big_func() {)上,输入zf% - 若函数无大括号但靠缩进组织(如 Python),先确保已设
:set foldmethod=indent,然后光标停在函数首行,按zc即可折叠该缩进块 - 不确定括号位置?用
%先跳转配对括号确认范围,再执行zf%
手动划定大范围折叠(适合生成代码或无结构文本)
面对 protobuf 生成的几千行代码块、日志片段或配置段落,括号不明确时,用行号精准控制:
-
120,850zf:折叠第 120 行到第 850 行(含头尾) -
300zf+:从当前第 300 行开始,向下折叠接下来的 10 行(默认是 10 行;也可写50zf+折叠 50 行) -
zfG:从当前行一直折叠到文件末尾
折叠后高效浏览与临时展开
折叠不是为了锁死,而是为了聚焦。常用操作保持节奏流畅:
-
zo:点开当前折叠,zc再收起;za切换开关状态(最常用) -
zO:展开当前折叠及其所有嵌套子折叠(比如函数里还套了 if/for 块) -
zM全部收起 →zr逐层展开(按一次展一层,避免信息过载)→zR一键全开做全局搜索或跳转
让折叠状态不随退出丢失
手动创建的折叠默认不保存。编辑大型文件中途离开,回来还想接着看原样?加两行命令:
- 退出前执行:
:mkview(保存当前视图,含折叠、光标位置、窗口布局) - 下次打开同一文件后执行:
:loadview(恢复上次状态) - 想长期生效,可在
~/.vimrc加:set viewoptions=cursor,folds,slash

















