恢复默认代码折叠需同步重置语法定义、插件状态与用户数据目录;单独修改fold_by_level或删除配置文件无效,因折叠行为由当前语法文件决定,第三方语法包常移除fold_level定义或强制fold_flags=1,导致语义折叠失效。

恢复默认代码折叠设置,不是改几个配置项就能解决的事——它依赖语法定义、插件状态和用户数据目录三者协同归零。单独调 "fold_by_level": true 或删 Preferences.sublime-settings,大概率白忙。
为什么改了设置还是不生效?关键在语法定义被覆盖
Sublime 的折叠行为由当前文件绑定的 .sublime-syntax 文件决定,而非全局设置。如果你装过第三方语法包(比如 Python Improved、Babel 或旧版 Vue Syntax Highlighter),它们很可能删掉了原生的 fold_level 定义,或把 fold_flags 强制设为 1(只允许缩进折叠)。
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),运行View: Syntax → Open Syntax Definition,确认打开的是 Sublime 自带路径(如Packages/Python/Python.sublime-syntax),不是插件目录下的副本 - 搜索文件内是否有
fold_level:,尤其检查function_definition、class_definition、block等 scope 是否赋值;若无,说明该语法不支持语义折叠 - 临时禁用所有语法相关插件(特别是名字含 “Syntax”、“Highlighter”、“Babel” 的),重启 Sublime 后再试
Ctrl+Shift+[
如何确保 fold_by_level 真正起作用?别只写配置
"fold_by_level": true 只是“允许按层级折叠”的开关,但它不会自动修复底层缺失的折叠能力。这个设置必须配合正确的语法定义和未被干扰的作用域识别才能生效。
- 该选项需写在
Preferences → Settings – Syntax Specific中(针对当前语言),或全局设置里——但全局启用后,对不支持fold_level的语法(如某些 Markdown 包)会静默失效 - 确认右下角语法标识不是
Plain Text:只有显示Python、JavaScript、HTML等官方名称时,fold_by_level才参与计算 - 用
Ctrl+Shift+P → Show Scope Name把光标停在def foo():行,看状态栏是否出现meta.function.python—— 没这个作用域,fold_by_level就是摆设
彻底重置:删错目录等于白干
想一劳永逸回到出厂折叠状态,必须清空整个用户数据目录,并确保后台进程和同步账号完全退出。删 Packages/User 或只删 Preferences.sublime-settings,插件、快捷键、上次打开的标签页全都会复活,折叠行为照旧异常。
- Windows:删
%APPDATA%\Sublime Text 4(注意有空格,不是SublimeText4) - macOS:删
~/Library/Application Support/Sublime Text(不是Sublime Text 4,4.x 版仍用此路径) - Linux:删
~/.config/sublime-text-4(短横线,全小写,不是下划线) - 删完后,务必任务管理器杀掉所有
sublime_text.exe(Win)或killall sublime_text(macOS/Linux),再执行subl --sync-logout登出账号
真正麻烦的从来不是“怎么折”,而是“为什么这行明明是 def 却没被识别为可折叠单元”——作用域丢失、语法包混用、插件劫持 fold_flags,这些细节比快捷键组合难排查得多。











