Sublime Text代码折叠需满足语法识别、作用域标记和文件状态三前提;Ctrl+Shift+[仅对可折叠结构起始行生效,Plain Text模式下全部失效,fold_all受文件大小和缩进一致性影响,fold_by_level和fold_selection为更可控的替代方案。

Sublime Text 的代码折叠不是“按需即用”的功能,它必须满足语法识别、作用域标记和文件状态三个前提;快捷键本身不会失效,失效的是底层支撑条件。
Ctrl+Shift+[ 没反应?先确认光标停在哪一行
这个快捷键只对「可折叠结构的起始行」生效,不是任意位置都能触发:
- Python 中必须停在
def func():或class Foo:行,停在函数体内部(如print("x"))、空行、注释行或字符串里,会静默失败 - JavaScript 中要停在
function foo() {、const bar = () => {或if (cond) {行,不能停在}或缩进块中间 - 右下角状态栏必须显示
Python、JavaScript等真实语言名,若为Plain Text,所有基于语法的折叠逻辑直接关闭 - 验证是否识别成功:光标停在
def行,按Ctrl+Shift+P→ 输入Developer: Show Scope Name,状态栏应含meta.function.python
Ctrl+K, Ctrl+0 折不全?检查语法识别与文件大小
这个命令调用 fold_all,遍历整个视图中所有被语法定义标记为可折叠的结构,但极易因基础条件缺失而“看起来没用”:
- 必须分步按键:先按
Ctrl+K松开,再按Ctrl+0(数字零,非字母 O) - 若右下角是
Plain Text,命令完全不执行,无任何提示 - Python 文件混用 Tab 和 Space 缩进,会导致
def行未被识别为函数作用域,从而跳过折叠 - 文件超过 10MB 时,
fold_all可能延迟响应或卡在状态栏,属正常现象,不是崩溃 - 插件如
BracketHighlighter可能劫持Ctrl+K前缀,临时禁用插件后重试可验证
只想折函数?别信 Ctrl+K, Ctrl+1,试试 fold_by_level
Ctrl+K, Ctrl+1 折叠的是作用域嵌套深度为 1 的结构,不等于“所有函数”,Python 中它可能只收 import 或 if __name__ == "__main__":,而漏掉 def:
- 真正可控的方式是
fold_by_level命令:按Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 依次试2(Python 多数情况)、3(JS 常见) - 输错数字无提示,没反应就换下一个;装饰器跨行(如
@decorator换行写在def上方)会导致识别断裂,加空行可修复 - 嵌套函数(如
def outer(): def inner():)需额外执行一次fold_by_level 3 - 若
Ctrl+Shift+[都无法折单个函数,说明函数未被语法识别为独立作用域,fold_by_level必然无效
任意几行都要收起来?用 fold_selection 最稳
当语法不支持、语言没内置折叠规则(如 JSON、YAML、日志段),或你只想临时藏一段测试数据时,这是唯一不依赖语法解析的方案:
- 鼠标拖选或多行选中(
Ctrl+L连续选行)→ 按Ctrl+Shift+Alt+[(Windows/Linux)或Cmd+Ctrl+Option+[(macOS) - 该操作调用
fold_selection,不看作用域、不校验缩进、不读取语法包,100% 可控 - 折叠后左侧边栏出现独立三角图标,点击即可展开,不影响其他自动折叠块
- 注意:
Ctrl+K, Ctrl+J(unfold_all)不会还原手动折叠的内容,必须单独点击侧边栏图标
真正容易被忽略的是:折叠状态从不跨会话保存,重启 Sublime 就全展开;侧边栏按钮默认只悬停显示,要常驻得手动设 "fold_buttons": true 和 "fade_fold_buttons": false;混用 Tab/Space 缩进在 Python 中不是风格问题,而是直接导致语法识别失败的硬伤。


















