Sublime Text 中真正能展开全部嵌套折叠的命令是 unfold_all,而非菜单中的 Expand All;后者仅展开顶层折叠,而 unfold_all 通过命令面板调用或自定义快捷键可无条件递归展开所有折叠区域。

Sublime Text 里没有“一键展开全部折叠”的原生菜单项
很多人在打开一个深度折叠的 .js 或 .py 文件后,发现右键菜单或 View → Folding 下只有 Expand(展开当前折叠)、Expand All(展开所有折叠),但实际点击 Expand All 后仍有不少嵌套区域没打开——这是因为 Sublime 的 Expand All 默认只展开「顶层折叠」,不递归处理子级折叠块。
Expand All 实际行为与预期不符的原因
Sublime 的折叠系统基于作用域(如函数、类、注释块)和手动折叠标记(// region / // endregion)。它把「嵌套折叠」视为独立层级,Expand All 命令默认只作用于当前视图中「未被父级折叠包裹」的折叠节点。也就是说:如果一个函数被折叠,而该函数内部还有 if 块也被折叠,那么 Expand All 不会自动打开那个 if 块。
- 触发方式:
Ctrl+K, Ctrl+J(Windows/Linux)或Cmd+K, Cmd+J(macOS) - 等效菜单路径:
View → Folding → Expand All - 它展开的是「当前光标所在折叠层级的所有同级折叠」,不是全文档递归展开
真正能展开所有嵌套折叠的实操方法
必须用命令面板调用底层命令 unfold_all,它会遍历整个 buffer,无条件展开所有折叠区域(包括嵌套的)。
- 快捷键:
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)打开命令面板 - 输入
unfold all,选择Unfold All(注意不是Expand All) - 也可直接绑定自定义快捷键,在
Preferences → Key Bindings中添加:
[
{ "keys": ["ctrl+alt+shift+e"], "command": "unfold_all" }
]
这个命令不区分语言、不依赖语法高亮,对所有已折叠的行都生效,包括手动折叠(Ctrl+Shift+[)和自动折叠(函数/类)。
为什么容易混淆 expand_all 和 unfold_all
两者名字接近,但底层逻辑完全不同:
-
expand_all是「折叠系统」的视图级操作,受折叠层级关系约束 -
unfold_all是「编辑器内容」的暴力展开,无视层级,直接清除所有折叠状态 - 某些插件(如
Origami)会覆盖或干扰这两个命令的行为,若失效可先禁用插件测试 - 展开后若想恢复,只能靠
Ctrl+Z撤销,Sublime 不提供「折叠历史」功能
真正需要“全局代码恢复”时,认准 unfold_all —— 它才是那个不讲武德、但管用的终极开关。










