Sublime Text 的 fold_all 命令按语法作用域嵌套深度(如 meta.function.python 为 level 2)而非缩进空格数折叠;Python import 常为 level 1、def 为 level 2,JS 箭头函数因 scope 不匹配不可折;需用 fold_by_level 结合 show_scope_name 验证层级,或用 fold_selection 按选中行范围折叠。

Sublime Text 的 fold_all 命令不按缩进层级工作
很多人以为 Ctrl+K, Ctrl+1 是“折叠所有一级缩进”,实际它调用的是 fold_all 命令,参数为 level=1,但这个 level 指的是语法作用域嵌套深度(如 meta.function.python 在语法文件中被定义为第 2 层),和空格数、Tab 数完全无关。Python 中 import 行常是 level 1,def 常是 level 2;JS 中 function 可能是 level 3,而箭头函数 const fn = () => {} 根本不被识别为可折叠单元——因为它的 scope 是 meta.assignment.js,不是 meta.function.js。
想按真实缩进折叠?得靠 fold_by_level + 手动验证
Sublime 原生不提供“按 4 空格/1 Tab 折叠”的开关,但可通过 fold_by_level 命令逼近缩进语义:
- 先确认当前文件语法正确:右下角必须显示
Python、JavaScript等,不能是Plain Text - 光标停在某行(比如一个函数首行),按
Ctrl+Shift+P→ 输入show_scope_name回车,看状态栏输出是否含meta.function或meta.block - 若只显示
source.python,说明语法高亮失效,可能因缩进混用(空格+Tab)或插件冲突 - 尝试
Ctrl+Shift+P→ 输入Fold Level 1、Fold Level 2……直到函数体收起;Python 通常需Fold Level 2,JS 常需Fold Level 3
fold_selection 是唯一真正按行范围折叠的可靠方式
当你需要绕过语法限制、纯粹按视觉缩进或任意段落折叠时,fold_selection 是最直接的选择——它不查 scope,不看括号,只认你选中的行:
- 鼠标拖选多行(或用
Ctrl+L连续选中若干行) - 按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS) - 折叠后,光标移到折叠标记上按
Enter可展开;再次按Ctrl+Shift+[会尝试向上扩展折叠范围(比如从函数体扩到包含 def 行) - 对 JSON、YAML、日志块、大段注释等非标准结构,这是唯一稳定可用的方式
为什么 Ctrl+K, Ctrl+0 折得太多?
Ctrl+K, Ctrl+0 触发的是 fold_all,但它不是“全折”,而是“逐级触发”:第一次执行 ≈ 折 level 1,第二次才进 level 2,第三次 level 3……所以你会看到注释、if、for 全被收进去。它也不区分语义,只要语法定义中标记了 fold: true,就一并处理。更麻烦的是,某些语言(如 Python)的默认语法包里,顶层 import 和常量赋值没设 fold: true,结果 Ctrl+K, Ctrl+0 按了没反应——这不是快捷键坏了,是语法定义本身没开放该层级折叠。
真正要批量按缩进逻辑折叠,别指望一键命令;得先确保语法识别准确,再用 show_scope_name 实测层级数字,最后靠 fold_by_level 或 fold_selection 精准控制。语法文件里没定义的 fold 规则,再熟的快捷键也无效。


















