Sublime文本折叠需满足语法识别、作用域标记、光标位置三重条件;fold_selection是唯一不依赖语法的可控方案。

Sublime 的文本区域折叠不是靠“选中+快捷键”就能生效的功能,它必须满足语法识别、作用域标记、光标位置三重条件;手动选区折叠(fold_selection)是唯一不依赖语法、100% 可控的兜底方案。
为什么 Ctrl+Shift+[ 在 def 行按了没反应?
这个快捷键只对「被语法识别为可折叠起点」的行生效,不是所有带 def 的行都能折:
- 光标必须停在
def func():或class Foo:这类行的**开头位置**,不能停在函数体内部、空行、注释行、docstring 行,也不能停在装饰器行(如@lru_cache)上 - 右下角状态栏必须显示
Python(或JavaScript等),若显示Plain Text,整个折叠逻辑不启动 - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,状态栏输出里必须含meta.function.python才算识别成功;只有source.python说明语法未加载或插件干扰 - Python 文件混用 Tab 和空格缩进,会导致
meta.function作用域链断裂——统一转为空格:View → Indentation → Convert Indentation to Spaces
Ctrl+K, Ctrl+0 折不全?别怪快捷键,先查底层支撑
这个命令调用的是 fold_all,它遍历整个视图中所有已被语法定义标记为可折叠的结构,但极易静默失败:
- 右下角不是原生
Python或JavaScript语法(比如显示Python Improved或Unsupported syntax),fold_all直接跳过所有块 - 文件超过 10MB 时,响应延迟或卡在状态栏,属正常现象,不是崩溃
- 某些插件(如
BracketHighlighter)会劫持Ctrl+K前缀,临时禁用插件后重试可验证 - 必须分步操作:先按
Ctrl+K松开,再按Ctrl+0(数字零,不是字母 O);Mac 用户用Cmd+K, Cmd+0
只想折函数?别信 Ctrl+K, Ctrl+1,试试 fold_by_level
Ctrl+K, Ctrl+1 折的是 scope depth = 1 的结构,Python 中常是 import 或顶层 if __name__ == "__main__":,不等于“所有函数”:
- 先确认一个
def行能被Ctrl+Shift+[正常折叠(左侧 gutter 出现 ▶) - 按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 尝试输入2(Python 多数情况)、3(JS/TS 常见)、1或4;输错无提示,只是没反应 - 装饰器跨行(如
@decorator单独一行紧贴def)或 docstring 紧挨def行(无空行),会导致识别跳过;加空行可修复 - 嵌套函数(如
def outer(): def inner():)需额外执行一次fold_by_level 3
任意几行都要收起来?fold_selection 是唯一稳解
这是 Sublime 原生命令,完全绕过语法解析、缩进校验和 fold rules,适合 JSON 配置、日志段、base64 字符串等非标准结构:
- 鼠标拖选任意连续多行,或用
Ctrl+L连续选行 - Windows/Linux 按
Ctrl+Shift+Alt+[,macOS 按Cmd+Ctrl+Option+[ - 侧边栏立刻出现独立三角图标,点击即可展开/收起,不影响其他自动折叠块
- 该折叠仅存于当前会话,关闭文件即丢,不写入磁盘;
Ctrl+K, Ctrl+J(unfold_all)不会还原它,得单独点开 - 若侧边栏没三角图标,检查用户设置中是否启用了
"fold_buttons": true
最常被忽略的一点:折叠按钮 UI 层可能被关掉,即使快捷键有效也看不到三角图标;"fold_buttons": true 必须显式写在用户设置里,Sublime 不默认开启它。










