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、{、<div> 等行首,且右下角状态栏显示真实语言名(如 <code>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);三键同按无效 - Mac 上
Cmd+K, Cmd+0易被 Alfred/Rectangle 等工具劫持,建议改用命令面板执行fold_all
临时兜底:手动选区折叠最稳定,但不持久
当语法识别失败、又不想重启或调插件时,fold_selection 是最可控的方案:它完全绕过作用域解析,只认选中范围。
操作步骤:
- 鼠标拖选或多行选中(
Ctrl+L连续选行) - 按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS) - 左侧 gutter 出现三角图标,点击即可展开
注意:这个状态仅限当前视图会话,关闭文件即丢失;也不受 find_in_files 或 goto_definition 影响——但查找替换(Ctrl+H)默认不跨折叠区域匹配,需手动勾选 Find in folded lines。
真正影响效率的不是折叠多深,而是作用域识别是否连续。一个 def 块因装饰器换行或缩进混用而“消失”在折叠体系外,比多按一次快捷键更难排查。


















