sublime text 4 折叠仅支持 .sublime-syntax 文件中的 foldingstartmarker 和 foldingstopmarker 正则,tmlanguage 的 foldings 块已失效;需确保语法文件定义了 meta. 作用域、正则匹配起始行、注释折叠需配合 fold_comments 和正确 scope,手动 fold_selection 是可靠兜底方案。

Sublime Text 4 的折叠规则只认 .sublime-syntax,tmLanguage 的 foldings 块已失效
Sublime Text 4 彻底弃用了旧版 tmLanguage 文件中的 foldings 块(即那种写 "foldings": { "start": "...", "end": "..." } 的方式),哪怕你把它塞进 Packages/User/ 下也完全不生效。折叠行为现在**只由 .sublime-syntax 文件里的 foldingStartMarker 和 foldingStopMarker 正则控制**。
这意味着:如果你正在用自定义语法(比如自己写的 DSL、YAML 变体、或从旧插件迁移来的语法),必须确认它是一个有效的 .sublime-syntax 文件,并且里面明确定义了这两个字段。
- 打开该语法文件(通常在
Packages/User/YourLang.sublime-syntax或插件目录下) - 搜索
foldingStartMarker—— 如果没找到,就默认不支持折叠 - 正则需匹配“起始行”,例如 Python 风格可写
foldingStartMarker: '^(class|def|if|for|while|with|try|async def)[^:]*:$' -
foldingStopMarker不是必需的;省略时 Sublime 会按作用域嵌套自动配对(更可靠)
光标必须落在 meta.function 类作用域内,Ctrl+Shift+[ 才响应
即使语法文件写了 foldingStartMarker,Ctrl+Shift+[ 仍可能静默失败——根本原因是 Sublime 没把当前行识别为可折叠结构的起点。验证方法:光标停在目标行,按 Ctrl+Shift+P → 输入 Developer: Show Scope Name,看输出里是否含 meta.function、meta.class、meta.block 等带 meta. 前缀的作用域。
- 如果只看到
source.yourlang,说明语法高亮虽生效,但折叠作用域未注入 —— 得检查contexts里是否漏了meta_scope或push时没带meta_*前缀 - 常见陷阱:正则匹配到了,但后续
pop或include导致作用域提前退出,meta.范围只覆盖半行 - 缩进混用(Tab + 空格)会让基于缩进的语言(如 YAML、Python 变体)直接丢失整个
meta.block,务必统一为空格并启用"indentation_based_folding": true(仅当语法本身不依赖括号时)
想支持 #region 或 // region?得配 fold_comments + 正确注释格式
Sublime 原生不解析 #region 这类标记,但可通过 fold_comments: true 启用注释块折叠 —— 它依赖语法定义中是否声明了 comment 作用域,且注释必须独占一行、顶格、配对完整。
- 在当前文件的语法专属设置中(
Preferences → Settings – Syntax Specific)加:"fold_comments": true - 注释必须严格满足:
– Python:#region utils和#endregion(不能有空格或冒号)
– JS/TS:// region utils和// endregion(前面不能有空格,末尾不能跟其他字符)
– HTML:<!-- region -->和<!-- endregion --> - 若仍不生效,用
Developer: Show Scope Name确认光标所在注释行是否含comment.line或comment.block—— 若只有comment,需在语法文件中显式设scope: comment.line
手动折叠选中区域是最稳的兜底方案,不依赖任何语法定义
当你改完语法、配好设置、仍折不了某段配置、日志或 JSON 片段时,别硬刚——直接用 fold_selection。它绕过所有语法解析和作用域判断,只认鼠标选中的物理行范围。
- 鼠标拖选任意连续多行(哪怕全是字符串、注释或无结构文本)
- Windows/Linux:按
Ctrl+Shift+Alt+[;macOS:按Cmd+Ctrl+Option+[ - 折叠后侧边栏出现独立小箭头,点击即可展开/收起
- 注意:这种折叠只存在于当前会话,关闭文件即消失;但它 100% 可控,且不会因语法包更新或 Sublime 升级而失效
真正卡住人的,往往不是“怎么写正则”,而是改完 .sublime-syntax 后忘了重启 Sublime 或没清缓存(rm -rf Cache/ 在 Data 目录下),导致旧语法定义仍在内存里跑着。











