Sublime Text代码折叠依赖语言语法文件定义的foldingStartMarker和foldingStopMarker正则标记,非自动识别;光标须位于起始标记行且作用域匹配,否则快捷键无效。

Sublime Text 默认支持代码折叠,但多数人用不了,是因为没触发折叠规则——不是功能坏了,是没写对结构或没开对设置。
哪些语法能折叠?看语言定义里的 foldingStartMarker 和 foldingStopMarker
折叠不是 Sublime 自己猜的,它靠每种语言的 .sublime-syntax 或旧版 .tmLanguage 文件里定义的正则标记。比如 Python 靠缩进,JS/JSON/CSS 靠 { 和 },HTML 靠开始/结束标签。
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),搜View Package File→ 选当前语言(如JavaScript/JavaScript.sublime-syntax)→ 搜索folding看有没有定义 - 没定义?那该语言默认不支持折叠,比如某些自定义 DSL 或 YAML(原生 YAML 包就不带折叠规则)
- 想加?可以复制一份语法文件到
Packages/User/下手动补foldingStartMarker,但注意:Sublime 4 起优先用.sublime-syntax,老式tmLanguage的foldings块已失效
Ctrl+Shift+[ 折不了?检查光标位置和作用域
快捷键只对「当前可折叠块」生效,不是全文件一键收起。光标必须落在能触发折叠的行上,比如 JS 里 function foo() { 这行,或者 Python 里 def bar(): 这行。
- 光标在
}上?不行,折叠起点必须是开始标记所在行 - 光标在空行、注释行、字符串内部?不响应
- 不确定当前行的作用域?按
Ctrl+Shift+P→Developer: Show Scope Name,看输出里有没有meta.function、meta.block这类带meta.的折叠相关 scope - 快捷键冲突?检查是否被插件(如 SideBarEnhancements)劫持了
Ctrl+Shift+[,可在Preferences → Key Bindings里搜folding确认绑定
自定义折叠:用 fold_by_level 或手动标记 // region
当语法不支持、或你想按逻辑段落折叠(比如把一堆配置项折起来),就得绕过语法定义,走通用方案。
- 选中一段代码 → 右键 →
Code Folding → Fold Selection,或按Ctrl+Shift+P→Fold Selection,这是最稳的手动方式 - 想用
// region?得装插件CodeFold或启用 Sublime 自带的fold_by_level:在Preferences → Settings里加"fold_by_level": true,然后用缩进层级控制(适合 Python、YAML 等靠缩进的语言) -
// region不是 Sublime 原生特性,别指望默认支持;硬要写,得配fold_expression正则,但容易误折、且不同语言需单独配
真正卡住人的,往往不是“怎么折”,而是“为什么这行明明有 { 却折不了”——八成是作用域没识别出来,或者语法包根本没声明折叠规则。别调主题、别重装,先查 Show Scope Name 和 View Package File。

















