// region 不生效是因为不同语言对折叠标记的支持不同:python 仅识别 #region,javascript 原生不支持需插件,typescript/vue 依赖语法包定义;最快解决是用 fold_selection 折叠选中行,或安装 codefolding 插件自定义正则标记。

为什么 // region 在你的文件里不生效
不是所有语言默认支持 // region。Python 语法只认 #region 和 #endregion;原生 JavaScript 语法根本不识别任何 // region,必须装 JavaScript Next 插件;而 TypeScript 或 Vue 单文件组件则要看对应语法包是否在 .sublime-syntax 文件里定义了 folding_start_marker 正则。你写了 // region 却点不动,大概率是当前 syntax 没加载、或该 syntax 根本没写折叠规则。
用 fold_selection 最快收起任意两行之间内容
这是唯一不依赖语法、不改配置、立刻生效的方法——它只认你选中的行范围,和语言无关。
- 鼠标拖选或按住
Ctrl+L(Windows/Linux)/Cmd+L(macOS)连续选中目标行(含起始行和结束行) - 按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS) - 折叠后,光标移到行号左侧箭头处按
Enter可展开;再次按Ctrl+Shift+[会尝试向上扩展折叠范围(比如从 5 行扩到包含其父级的 8 行)
注意:这种折叠仅保存在当前会话,关掉文件就消失;不能嵌套,也不能跨折叠块操作。
想永久支持自定义标记?改 Preferences → Package Settings → CodeFolding → Settings
装好 CodeFolding 插件后,在用户设置里加这段:
{
"fold_markers": {
"start": "(?i)^\s*//\s*@fold(?:\s+.*)?$",
"end": "(?i)^\s*//\s*@endfold(?:\s+.*)?$"
}
}
之后就能在代码里写:
// @fold config block
const cfg = { debug: true, timeout: 5000 };
const env = process.env.NODE_ENV;
// @endfold
关键点:
- 正则必须完全匹配整行,开头
^、结尾$不能少 -
(?i)让大小写不敏感,\s*允许前面有空格或 Tab - 起始和结束标记必须缩进一致,中间不能有空行,否则 Sublime 会断开折叠区域
- 改完设置不用重启,但语法高亮需重新加载(可按
Ctrl+Shift+P→Reload Syntax)
手动改语法文件风险高,只建议临时调试
如果你硬要让某语言(比如 .conf 文件)全局支持 // @fold,就得编辑对应语法的 .sublime-syntax 文件,在 folding 节点下加:
folding: start: "(?i)^\s*//\s*@fold.*$" end: "(?i)^\s*//\s*@endfold.*$"
但要注意:
- 路径通常在
Packages/下,修改后必须重启 Sublime 才生效 - 升级语言包时会被覆盖,且不同插件可能互相冲突
- 一旦正则写错(比如漏了
^或多写了.),整个语言的自动折叠都可能失效
真正稳定的做法,是接受 fold_selection 的临时性 + CodeFolding 插件的标记式支持,而不是动语法底层。很多人卡在“必须写进文件才安心”,结果反而让折叠逻辑越来越不可控。











