Sublime代码折叠需语法识别、作用域标记、光标位置三者同时成立;Ctrl+Shift+[仅在def/class等起始行且语言非Plain Text时生效;fold_all和fold_by_level受缩进、文件大小、装饰器跨行等限制;fold_selection可强制折叠任意选中行。

Sublime 的代码折叠不是“文件一打开就自动可用”的功能,它必须满足语法识别、作用域标记、光标位置三者同时成立,否则所有快捷键都会静默失败。
Ctrl+Shift+[ 没反应?先看右下角语言名和光标停在哪
这个快捷键只对「当前最内层可折叠结构的起始行」生效,不是选中就折,也不是任意位置按一下就行:
- 光标必须停在
def、class、function、{、if(带冒号和缩进块)所在行;停在}行、空行、注释行、字符串内部,命令不触发 - 右下角状态栏必须显示
Python、JavaScript等真实语言名;若为Plain Text,整个折叠逻辑关闭,Ctrl+Shift+[无任何提示地失效 - 验证是否识别成功:光标停在
def行,按Ctrl+Shift+P→ 输入Developer: Show Scope Name,状态栏应含meta.function.python或类似带meta.的作用域 - Python 文件混用 Tab 和 Space 缩进,会导致
def行未被识别为函数作用域——统一转为空格:View → Indentation → Convert Indentation to Spaces
Ctrl+K, Ctrl+0 折不全?检查 fold_all 的三个硬前提
这个命令调用 fold_all,遍历整个视图中所有被语法定义标记为可折叠的结构,但极易因基础条件缺失而“看起来没用”:
- 必须分步按键:先按
Ctrl+K松开,再按Ctrl+0(数字零,非字母O) - 右下角是
Plain Text时,命令完全不执行,无任何提示 - 文件超过 10MB 时,
fold_all可能延迟响应或卡在状态栏,属正常现象,不是崩溃 - 插件如
BracketHighlighter可能劫持Ctrl+K前缀,临时禁用插件后重试可验证
只想折函数?别信 Ctrl+K, Ctrl+1,试试 fold_by_level
Ctrl+K, Ctrl+1 折叠的是作用域嵌套深度为 1 的结构,不等于“所有函数”,Python 中它可能只收 import 或 if __name__ == "__main__":,而漏掉 def:
- 真正可控的方式是
fold_by_level命令:按Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 依次试2(Python 多数情况)、3(JS/TS 常见) - 输错数字无提示,没反应就换下一个;装饰器跨行(如
@decorator换行写在def上方)会导致识别断裂,加空行可修复 - 嵌套函数(如
def outer(): def inner():)需额外执行一次fold_by_level 3 - 若
Ctrl+Shift+[都无法折单个函数,说明函数未被语法识别为独立作用域,fold_by_level必然无效
任意几行都要收起来?用 fold_selection 最稳
这是唯一绕过语法解析、缩进校验和折叠规则的方式,100% 可控:
- 鼠标拖选任意连续多行(
JSON配置、日志、注释、base64字符串都行) - Windows/Linux 按
Ctrl+Shift+Alt+[,macOS 按Cmd+Ctrl+Option+[ - 侧边栏立刻出现独立三角图标,点击即可展开/收起
- 该折叠仅存于当前会话,关闭文件即丢,不写入磁盘;
Ctrl+K, Ctrl+J(unfold_all)不会还原它,得单独点开
最容易被忽略的是:折叠状态是视图级缓存,不是文件级存储;重启 Sublime 后全部展开,且鼠标悬停折叠标记时显示的行号是“折叠前”的原始行号——跳转后光标落在折叠行首,而非你记忆中的某行。
















