区域折叠需语法文件定义fold_expression且正则匹配注释,插件如codefolding仅注入规则;python需顶格# region,js/ts需单独成行// region;vue/md中script块作用域不匹配则无效;手动改.sublime-syntax或配置插件可启用,失效时用show scope name验证作用域。

区域折叠不是默认功能,得靠插件或手动改语法文件
Sublime Text 原生不解析 // region、# region 或 <!-- fold --> 这类标记。所谓“区域折叠”,必须满足两个硬条件:当前语言的 .sublime-syntax 文件里定义了 fold_expression(或旧版 foldings 块),且该正则能准确匹配起始/结束注释——否则按了快捷键也静默失败。
常见误区是以为装个插件就万事大吉,其实多数插件(如 CodeFolding)只是帮你注入规则,最终仍依赖 syntax 文件是否启用 fold: true 和作用域是否匹配。
- Python 文件写
# region utils顶格才可能生效;前面有空格或 Tab,正则直接跳过 - JS/TS 中
// region必须单独成行,不能跟在代码后面(如const x = 1; // region不触发) - Vue/MD 等混合语法文件里,
<script></script>块若被识别为source.js而非source.vue,region 规则不会加载
用 CodeFolding 插件快速启用 region 折叠
这是最省事的路径,但要注意它只对部分语言开箱即用:
- 安装后默认支持 JS/TS/Python/CSS 的
// region和# region,但 HTML/JSON/YAML 需额外配置 - 插件配置路径:
Preferences → Package Settings → CodeFolding → Settings - 关键配置项必须显式打开:
"enable_region_folding": true,否则 region 注释被完全忽略 - 若想让
/* region */生效,需在设置中补正则:"region_start": "/\*\s*region\b", "region_end": "/\*\s*endregion\b" - Mac 用户注意:插件默认快捷键
Cmd+K, Cmd+R可能和系统冲突,建议在Preferences → Key Bindings里查重绑定
手动编辑 .sublime-syntax 实现精准控制
插件不够用时(比如要支持自定义 DSL 或修复误折),必须直改语法定义。所有修改必须保存到 Packages/User/ 目录下同名文件,才能覆盖默认包:
- 先用
View → Syntax → Open Syntax Definition打开当前语言文件,复制全部内容 - 新建文件粘贴,保存为
Packages/User/Python.sublime-syntax(以 Python 为例) - 在
repository段落里加一段折叠规则(注意缩进和 YAML 语法):folding_start_marker: ^s*#s*region.*$<br>folding_stop_marker: ^s*#s*endregion.*$
- 重启 Sublime;若仍不生效,用
Ctrl+Shift+P → Developer: Show Scope Name点击 region 行,确认输出含comment.line.number-sign——不含说明正则没命中 - 跨行内容要捕获?得启用
dotall模式,在正则前加(?s),例如:^(?s)s*#s*region.*?s*#s*endregion$
region 折叠失效时的三步定位法
别猜,直接验证底层链路是否通:
- 右下角状态栏是否显示真实语言名(如
Python)?显示Plain Text时所有折叠规则归零 - 按
Ctrl+Shift+P → Developer: Show Scope Name点击# region所在行,看输出里有没有comment类 scope ——没有说明语法未将该行识别为注释 - 打开
Preferences → Settings – Syntax Specific,确认没写死"fold_flags": 1(该值禁用基于正则的折叠,只留缩进折叠)
region 折叠本质是正则 + 作用域的双重校验,漏掉任一环都会静默失败。它不像 fold_selection 那样 100% 可控,所以临时清理视图时,鼠标选中再按 Ctrl+Shift+[ 往往比等 region 生效更快。











