Ctrl+K, Ctrl+0(Win/Linux)或 Cmd+K, Cmd+0(macOS)是真·一键折叠全部的命令,不依赖光标位置,但需满足语法识别、缩进规范、文件大小适中三个前提,否则静默失败。

Ctrl+K, Ctrl+0(Windows/Linux)或 Cmd+K, Cmd+0(macOS)才是真·一键折叠全部的命令,不是 Ctrl+Shift+[,也不是 Ctrl+K, Ctrl+1。它不依赖光标位置,但必须满足语法识别、缩进规范、文件大小适中三个前提,否则静默失败——不是快捷键坏了,是 Sublime 根本没启动折叠逻辑。
为什么 Ctrl+Shift+[ 折不了全部?
它只对光标所在「最小可折叠结构」生效:停在 def foo(): 行,就只折这个函数;停在空行、注释里、字符串中,直接没反应。这不是缺陷,是设计语义——“折叠当前” ≠ “折叠全部”。常见误判是反复按它想收全文件,结果效率低还漏块。
- 必须把光标放在起始行,比如
function bar() {、if x:、{所在行 - 对 JSX 或 Vue 单文件组件中的
<script>块可能完全失效(语法定义缺失) - 不会折叠手动创建的区域(
Ctrl+Shift+Alt+[创建的)
Ctrl+K, Ctrl+0 为什么有时没反应?
这个命令调用的是原生命令 fold_all,但它极度依赖底层条件。失效时优先排查这三项:
- 右下角状态栏显示的是
Plain Text?→ 必须手动执行Ctrl+Shift+P→Set Syntax: Python(或其他对应语言) - Python 文件混用 Tab 和 Space 缩进?→
View → Indentation → Convert Indentation to Spaces - 文件过大(>10MB)或插件冲突(如
BracketHighlighter劫持Ctrl+K前缀)?→ 临时禁用插件,或改用命令面板:Ctrl+Shift+P→ 输入Fold All回车
想只折函数,不碰 if/for/类?用 fold_by_level
Ctrl+K, Ctrl+0 会把 class、顶层 if、文档字符串甚至 __all__ = [] 全部收起来,不适合只想看函数签名列表的场景。此时首选 fold_by_level:
- 先确认一个函数能被正常折叠:
Ctrl+Shift+[在def行生效 → 验证meta.function被识别 -
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 尝试输入2(Python)或3(JS);输错无提示,只是没反应 - 装饰器跨行、docstring 紧贴
def(如def f(): """doc"""; pass)会导致跳过,加空行可修复
语法识别失败时,用正则兜底
当右下角显示 Plain Text,或 show_scope_name 返回只有 source.python 时,fold_by_level 和 Ctrl+K, Ctrl+0 都不可靠。这时纯文本匹配最稳:
-
Ctrl+F→ 正则模式 → 输入^def\s|^function\s|^[a-zA-Z]+\s*=\s*function\s*\(.*\)\s*\{ - 勾选
Regex和Match case→Find All→ 所有函数定义行被高亮选中 -
Ctrl+Shift+[—— Sublime 会对每个选中行单独触发一次折叠
注意:此法不检查作用域,所以即使语法识别失败也能用;但若某行匹配但非函数(如注释里写了 def),也会被误折。最容易被忽略的是函数定义格式——跨行装饰器、无换行 docstring、箭头函数无 {},都可能让语法解析跳过折叠起点。


















