Sublime代码折叠默认启用但需同时满足三个前提:文件被识别为有效语言(非Plain Text)、语法定义含foldingStartMarker、用户设置启用"fold_buttons": true;缺一不可。

Sublime 的代码折叠不是“设置完就自动工作”的功能,它默认启用,但必须满足三个硬性前提才能真正生效:文件被识别为有效语言(右下角不能是 Plain Text)、当前语法定义中包含折叠规则(foldingStartMarker)、用户设置中启用了折叠 UI 按钮("fold_buttons": true)。缺一不可。
确认右下角语言标识正确
这是 90% 折叠失效的根源。如果状态栏显示 Plain Text、Unsupported syntax 或插件提供的非原生语法名(如 Python Improved),整个折叠逻辑不会启动。
- 点击右下角文字 → 手动选择对应语言(如
Python、JavaScript、JSON) - 保存带标准扩展名的文件(如
main.py、index.js),Sublime 才会自动关联语法 - 若仍不识别,临时禁用可疑插件(如旧版 Vue 或 Python 插件),重启后重试
确保用户设置中启用折叠按钮
即使语法识别成功、快捷键可用,侧边栏没三角图标,说明 UI 层被关了。这不是折叠功能坏了,而是按钮被隐藏。
- 打开
Preferences → Settings - 在右侧用户设置中添加或确认存在:
"fold_buttons": true - 可追加一行提升可见性:
"fade_fold_buttons": false - 若同时存在
"fold_enable": false,删掉或改为true - 修改后无需重启,切换一次标签页即可生效
验证语法是否支持折叠规则
不是所有语言都自带折叠能力。Sublime 依赖语法文件(.sublime-syntax)里定义的 foldingStartMarker 和 foldingStopMarker 正则来判断哪里能折。
- 按
Ctrl+Shift+P→ 输入View Package File→ 选当前语言(如JavaScript/JavaScript.sublime-syntax)→ 搜索folding - 若无结果,该语言原生不支持折叠(如旧版 YAML 包)
- Python 靠缩进,JS/JSON/CSS 靠
{和},HTML 靠标签对——结构不合规(如{换行、缩进混用 Tab/Space)会导致作用域断裂 - 缩进不一致时,统一转为空格:
View → Indentation → Convert Indentation to Spaces
光标位置与作用域识别才是关键
Ctrl+Shift+[ 不是“全选就折”,它只对「当前最内层可折叠结构的起始行」响应。光标停错位置,命令静默失败。
- 必须停在
def、class、function、if(带冒号和缩进块)、{所在行 - 停在
}行、空行、注释行、字符串内部、或函数体中间某行,均无效 - 不确定是否识别成功?光标停在
def行 →Ctrl+Shift+P→ 输入Developer: Show Scope Name→ 看状态栏是否含meta.function.python - 若只显示
source.python,说明语法高亮未加载或被插件干扰
真正卡住人的,往往不是“怎么设”,而是“为什么这行明明有 def 却折不了”——八成是作用域没识别出来,或者语法包根本没声明折叠规则。折叠按钮显示、快捷键响应、作用域命中,三者必须同时成立,少一个都不行。

















