Sublime中Ctrl+K,Ctrl+1至Ctrl+K,Ctrl+8按语法作用域层级折叠,非缩进;Python函数通常需Ctrl+K,Ctrl+2,但装饰器跨行或docstring紧贴def会导致失效。

Ctrl+K, Ctrl+1 到 Ctrl+K, Ctrl+8 不是按缩进,而是按作用域层级
Sublime 的层级折叠命令 fold_by_level 识别的是语法定义中 meta.* 作用域的嵌套深度,不是空格或 Tab 数。比如 Python 中 import 和顶层赋值通常在 source.python 直接子级(level 1),而 def 块默认落在 meta.function.python(level 2),if 或 for 内部块可能为 level 3。所以 Ctrl+K, Ctrl+2 在多数 Python 文件里能收起所有函数体,但若某个 def 前有跨行装饰器(如 @decorator 单独一行),作用域链断裂,该函数就会被跳过。
常见表现:
-
Ctrl+K, Ctrl+1只折了import和全局变量,class和def没动——说明它们不在 level 1,正常 -
Ctrl+K, Ctrl+2折了一半函数——大概率是def行紧贴 docstring(如def f(): """doc"""; pass),导致meta.function未完整捕获 -
Ctrl+K, Ctrl+8按下没反应——当前语法支持的最大嵌套深度小于 8,静默失败,不报错
光标位置和语法识别决定 Ctrl+Shift+[ 是否生效
验证方法:光标停在 关键区别: 当语法识别失败、又不想重启或调插件时, 操作步骤: 注意:这个状态仅限当前视图会话,关闭文件即丢失;也不受 真正影响效率的不是折叠多深,而是作用域识别是否连续。一个 Ctrl+Shift+[ 不是“选中就折”,它只响应光标所在行是否为可折叠结构的**起点**:必须停在 def、class、if、{、Python),不能是 Plain Text。def 行,按 Ctrl+Shift+P → 输入 show_scope_name 回车,看状态栏输出:
meta.function.python → 可折叠,Ctrl+Shift+[ 应该有效source.python → 语法高亮未加载或被插件干扰(如旧版 Python Improved)meta.decorator.python 但无 meta.function → 装饰器写法导致解析中断,加空行可修复fold_all(Ctrl+K, Ctrl+0)和 fold_by_level 的行为差异
Ctrl+K, Ctrl+0 调用 fold_all,遍历整个视图所有已识别的折叠点(函数、类、括号对、注释块),不区分层级;而 Ctrl+K, Ctrl+2 是 fold_by_level,只处理指定 scope depth 的结构,更精准但也更依赖语法完整性。
Ctrl+K, Ctrl+0 会把顶层 if、__all__ = []、三引号注释全收走,不适合只想看类结构的场景fold_by_level 需手动确认数字:Python 通常从 2 开始试,JS 常需 3 或 4,输错无提示,只是没反应Ctrl+K, Ctrl+0 必须分步按:先按 Ctrl+K 松开,再按 Ctrl+0(数字零,非字母 O);三键同按无效Cmd+K, Cmd+0 易被 Alfred/Rectangle 等工具劫持,建议改用命令面板执行 fold_all
临时兜底:手动选区折叠最稳定,但不持久
fold_selection 是最可控的方案:它完全绕过作用域解析,只认选中范围。
Ctrl+L 连续选行)Ctrl+Shift+[(Windows/Linux)或 Cmd+Shift+[(macOS)find_in_files 或 goto_definition 影响——但查找替换(Ctrl+H)默认不跨折叠区域匹配,需手动勾选 Find in folded lines。def 块因装饰器换行或缩进混用而“消失”在折叠体系外,比多按一次快捷键更难排查。











