Sublime代码折叠生效需满足语法识别成功、作用域正确标记、光标位于合法起始行三条件;快捷键失效多因前提不满足,而非按键故障。

Sublime 的代码折叠不是“按了就折”的功能,它是否生效,取决于语法识别是否成功、作用域是否被正确标记、光标是否停在合法起点——三者缺一不可。快捷键本身不会坏,失效的永远是前提条件。
Ctrl+Shift+[ 没反应?先查光标位置和语言标识
这个快捷键只对「当前最内层可折叠结构的起始行」有效,不是全选就能折,也不是任意位置按一下就行:
- 光标必须停在
def、class、if(带冒号和缩进块)、{、function等起始标记所在行;停在}行、空行、注释行、字符串内部,命令静默失败 - 右下角状态栏必须显示真实语言名(如
Python、JavaScript),若显示Plain Text,整个折叠系统不启动 - 不确定当前行是否被识别为可折叠?按
Ctrl+Shift+P→ 输入Developer: Show Scope Name回车,看状态栏输出:含meta.function或meta.block才算有效 - Python 文件混用 Tab 和空格缩进,会导致
def行未被识别为函数作用域——统一转为空格:View → Indentation → Convert Indentation to Spaces
Ctrl+K, Ctrl+N 折的是作用域层级,不是缩进层数
Ctrl+K, Ctrl+N(N 为 1–8)折叠的是语法定义中 scope 嵌套深度为 N 的结构,和空格/Tab 数量完全无关:
-
Ctrl+K, Ctrl+0是fold_all,无视层级,收起所有已识别的可折叠块(包括顶层注释、if __name__ == "__main__":、__all__) -
Ctrl+K, Ctrl+1折的是 scope depth = 1 的结构(Python 中常为import、if __name__,不一定是函数) -
Ctrl+K, Ctrl+2再往里一层(Python 中多数函数落在 level 2,但装饰器跨行或 docstring 紧贴def行会导致识别断裂,跳过折叠) - 操作必须分两步:先按
Ctrl+K松开,再按数字键;输错(如Ctrl+K, Ctrl+9)不会报错,只是静默失败
想只折函数?别信 Ctrl+K, Ctrl+1,试试 fold_by_level
原生没有 fold_all_functions 命令,Ctrl+K, Ctrl+0 会把 if、class、顶层注释全收走。真正可控的是 fold_by_level 命令,但它依赖实测:
- 先手动用
Ctrl+Shift+[折一个函数,确认它真被识别为函数块(左侧 gutter 出现 ▶) -
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 依次试2、3、1(Python 通常从2开始,JS/TS 常需3) - 输错数字无提示,没反应就换下一个;装饰器跨行或 docstring 紧贴
def行会导致跳过,加空行可修复 - 嵌套函数(如
def outer(): def inner():)需额外执行一次fold_by_level 3
任意几行都要收起来?用 fold_selection 最稳
这是唯一绕过语法解析、缩进校验和折叠规则的方式,100% 可控:
- 鼠标拖选任意连续多行(JSON 配置、日志、注释、base64 字符串都行)
- Windows/Linux 按
Ctrl+Shift+Alt+[,macOS 按Cmd+Ctrl+Option+[ - 左侧 gutter 立刻出现独立三角图标,点击即可展开/收起,不影响其他自动折叠块
- 该折叠仅存于当前会话,关闭文件即丢,不写入磁盘;
Ctrl+K, Ctrl+J(unfold_all)不会还原它,得单独点开 - 侧边栏没三角图标?检查用户设置中是否启用了
"fold_buttons": true
真正卡住人的,往往不是“怎么折”,而是“为什么这行明明有 def 却折不了”——八成是作用域没识别出来,或者语法包根本没声明折叠规则。验证永远比猜测快:Ctrl+Shift+P → Developer: Show Scope Name,一眼见真章。

















