Vim 折叠:折叠长文件、聚焦当前逻辑块
更新时间:2026-08-30。本文是
languages/vim/主题高手层第 3 篇(A2:PlantUML + 机制 + ≥2 实测 + ≥2 交叉引用)。
本文要回答的问题
- 折叠有哪几种方式?怎么选?
- 常用的折叠/展开/层级键是什么?
- 怎么让代码按语法自动折叠?
一、机制:折叠是"视图层"的隐藏
折叠不改变文件内容,只是在显示层把一段行收成一行带 +-- 的摘要。Vim 支持多种折叠来源,由 foldmethod 决定:
| 方法 | 设置 | 适用 |
|---|---|---|
| manual | set foldmethod=manual | 临时手动折 |
| indent | set foldmethod=indent | 配置/Python 等缩进规整的文件 |
| syntax | set foldmethod=syntax | 有语法高亮的代码(最省心) |
| marker | set foldmethod=marker | 自己插起止标记(花括号三连)控制 |
二、操作键(不管哪种方法通用)
| 键 | 作用 |
|---|---|
za | 切换当前折叠(开/合) |
zo / zc | 打开 / 合上当前折叠 |
zR / zM | 全部打开 / 全部合上 |
zj / zk | 跳到下一个 / 上一个折叠 |
zm / zr | 减少 / 增加折叠层级 |
三、实战:只读大纲
读一个大 C 文件,用 syntax 折叠:
vim
set foldmethod=syntax
zM " 全合上,只剩函数名大纲
za " 展开当前感兴趣的函数配置类(如 nginx.conf)用 indent 折叠,块结构一目了然。
四、marker 手动控制
在自己写的笔记里插标记(Vim 用花括号三连作为起止标记圈定一个折叠区):
text
主题一 {开始标记}
细节内容...
}结束标记set foldmethod=marker 后,被开始/结束标记圈住的内容自动成为一个折叠。
五、与金字塔衔接
一句话总结
折叠是显示层隐藏:foldmethod 决定来源(syntax 最省心、indent 配配置、marker 手动控);za 开关、zM/zR 全合/全开、zm/zr 调层级——长文件只读大纲的利器。