sublime代码折叠需语法识别、光标位于起始行且状态栏显示正确语言名三者同时成立;ctrl+shift+[无效多因光标位置或plain text模式;全局折叠用ctrl+k,ctrl+0/ ctrl+k,ctrl+j;手动选中折叠为兜底方案。

Sublime 的代码折叠不是“按了就折”,而是依赖语法识别、光标位置和作用域定义三者同时成立;Ctrl+Shift+[ 没反应,90% 是因为光标没停在 def、class、if、{ 这类起始行,或右下角显示的是 Plain Text。
光标必须停在可折叠结构的起始行上
折叠动作只响应“起点”,不响应块内任意位置。比如 Python 中只有光标停在 def foo(): 或 class Bar: 行首才触发;停在函数体里的 print("x") 行,Ctrl+Shift+[ 会静默失败。
- 不能停在空行、注释行、字符串内部、
}或:后的缩进行上 - 右下角状态栏必须显示真实语言名(如
Python、JavaScript),不是Plain Text或插件自定义名(如Python Improved) - 不确定是否被识别?按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,看输出里是否有meta.function或meta.class—— 只有source.python说明语法高亮已加载,但作用域未命中
Ctrl+K, Ctrl+0 和 Ctrl+K, Ctrl+J 是最可靠的全局操作
这两个命令不依赖光标位置,直接调用 fold_all 和 unfold_all,适合快速切换文件概览与细节视图。
- 必须分步按:
Ctrl+K松开 → 再按Ctrl+0(数字零,不是字母 O) - 若无反应,先检查语言标识是否正确;大文件(>10MB)可能短暂卡顿,属正常
-
Ctrl+K, Ctrl+J展开全部,但不会恢复手动折叠(fold_selection创建的),只还原语法级折叠
手动选中后折叠:绕过语法限制的兜底方案
当语言不支持折叠(如 YAML 原生包)、或你想临时收起一段 JSON 配置、日志、测试数据时,这是唯一零配置、100% 可控的方式。
- 鼠标拖选或多行选中(
Ctrl+L连续选行)→ 按Ctrl+Shift+Alt+[(Windows/Linux)或Cmd+Ctrl+Option+[(macOS) - 折叠后左侧 gutter 出现独立三角图标,点击即可展开,不影响其他自动折叠区域
- 该折叠仅存于当前会话:关闭文件即丢失;重启 Sublime 后只要文件没关,仍存在
按作用域层级折叠(Ctrl+K, Ctrl+1 等)的实际含义
这里的数字不是缩进空格数,而是语法定义中的 **作用域嵌套深度(scope level)**,由语言包决定,不同语言表现差异大。
-
Ctrl+K, Ctrl+0:暴力折叠所有已识别块,无视层级 -
Ctrl+K, Ctrl+1:只折叠 depth = 1 的结构,Python 中常是顶层import、if __name__ == "__main__":、顶层def;若class也被折进去,说明语法包异常 -
Ctrl+K, Ctrl+2:再往里一层,通常是类内部方法、函数体内if/for块;JS 中可能同时折叠function和{块,因它们共享同一层metascope - 输错数字(如
Ctrl+K, Ctrl+9)不会报错,只是静默失败
真正难处理的从来不是“怎么折”,而是“为什么这行明明有 { 却折不了”——大概率是作用域没识别出来,或者当前语言的语法文件根本没定义 foldingStartMarker。别急着改设置,先按 Ctrl+Shift+P 看 scope name,再确认右下角语言名,这两步做完,80% 的“折叠失效”问题就解了。











