sublime如何一键展开所有嵌套的折叠区域?(全局代码恢复)

16次阅读

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

sublime如何一键展开所有嵌套的折叠区域?(全局代码恢复)

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+Jwindows/linux)或 Cmd+K, Cmd+JmacOS)
  • 等效菜单路径:View → Folding → Expand All
  • 它展开的是「当前光标所在折叠层级的所有同级折叠」,不是全文档递归展开

真正能展开所有嵌套折叠的实操方法

必须用命令面板调用底层命令 unfold_all,它会遍历整个 buffer,无条件展开所有折叠区域(包括嵌套的)。

  • 快捷键:Ctrl+Shift+Pwindows/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_allunfold_all

两者名字接近,但底层逻辑完全不同:

  • expand_all 是「折叠系统」的视图级操作,受折叠层级关系约束
  • unfold_all 是「编辑器内容」的暴力展开,无视层级,直接清除所有折叠状态
  • 某些插件(如 Origami)会覆盖或干扰这两个命令的行为,若失效可先禁用插件测试
  • 展开后若想恢复,只能靠 Ctrl+Z 撤销,Sublime 不提供「折叠历史」功能

真正需要“全局代码恢复”时,认准 unfold_all —— 它才是那个不讲武德、但管用的终极开关。

text=ZqhQzanResources