ctrl+k, ctrl+0(windows/linux)或 cmd+k, cmd+0(macos)是全局折叠所有顶层代码块的命令,依赖语法定义、统一缩进和正确语言标识,非光标位置;ctrl+shift+[仅局部折叠光标所在起始行对应的最小结构。

Ctrl+K, Ctrl+0(Windows/Linux)或 Cmd+K, Cmd+0(macOS)才是真·一键收起所有代码块的命令,不是 Ctrl+Shift+[。
Ctrl+K, Ctrl+0 和 Ctrl+Shift+[ 的作用完全不同
很多人按 Ctrl+Shift+[ 没反应,或只折了一小段,是因为它只作用于「光标所在行对应的最小可折叠结构」:比如你停在某个 if 行,就只折那个 if 块;停在空行或注释里,直接静默失败。
-
Ctrl+K, Ctrl+0是全局命令,不依赖光标位置,一次性折叠当前文件中所有顶层可折叠结构(Python 的def/class、JS 的function/{}、HTML 的标签对等) -
Ctrl+Shift+[是局部命令,必须把光标放在起始行(如def foo():、function bar() {、if x:或{所在行)才生效 - macOS 用户注意:
Cmd+K, Cmd+0容易被 Alfred、输入法或某些安全软件拦截,建议优先用命令面板执行:Ctrl+Shift+P→ 输入Fold All→ 回车
为什么 fold_all(即 Ctrl+K, Ctrl+0)有时没反应
这不是快捷键失效,而是 Sublime 的折叠逻辑根本没启动——它严格依赖语法定义中的 fold 规则,不是靠缩进或大括号猜的。
- 右下角显示
Plain Text?必须先手动指定语言:Ctrl+Shift+P→Set Syntax: Python(或 JS/HTML 等) - 文件是
.log、.conf或无扩展名?原生不支持折叠,除非装了对应语法包并声明了foldkey - 用了自定义语法(如
Python Improved),但该语法没正确定义meta.function作用域,fold_by_level和fold_all都会跳过函数 - 缩进混用(tab + 空格)?Python/YAML 折叠会断层,统一用空格:
View → Indentation → Convert Indentation to Spaces
想只折函数,不碰类和 if?得绕开 fold_all
Ctrl+K, Ctrl+0 会把 class、顶层 if、文档字符串甚至 __all__ = [] 全部收起来,不适合只想看函数签名列表的场景。
- 首选
fold_by_level:先确认一个函数能被正常折叠(Ctrl+Shift+[在def行生效),再调出命令面板 →fold_by_level→ 尝试输入2(Python)或3(JS);输错不报错,只是没反应 - 语法识别失败时,用正则兜底:
Ctrl+F→ 正则模式 →^def\s|^function\s|^[a-zA-Z]+\s*=\s*function\s*\(.*\)\s*\{→Find All→Ctrl+Shift+[;它不看作用域,纯文本匹配,但可能误折注释里的def - 装饰器跨行、docstring 紧贴
def(如def f(): """doc"""; pass)会导致跳过,加空行可修复
真正容易被忽略的点是:三个前提任一不满足,所有折叠操作都会静默失败且无提示——右下角语言名正确、缩进统一、语法包明确定义了 fold 规则。别在 Plain Text 里反复按 Ctrl+K, Ctrl+0,那不是 bug,是设计如此。











