Sublime代码折叠需满足语言识别和光标位置条件:右下角必须显示Python/JS等真实语言名,光标停在可折叠结构起始行(如def、function行),否则Ctrl+Shift+[等快捷键静默失效。

Sublime 的代码折叠不是“设了就能用”,而是“条件满足才触发”——90% 的失效问题,都卡在右下角显示 Plain Text 或光标停错行上。
Ctrl+Shift+[ 没反应?先查光标位置和语言识别
这个快捷键只对「可折叠结构的起始行」生效,不是任意位置按一下就行:
- Python 中必须把光标停在
def func():或class Foo:行;停在函数体内部(如print("x"))、空行、注释行、字符串里,命令静默失败 - JavaScript 中要停在
function foo() {、const bar = () => {或if (cond) {行,不能停在}或缩进块中间 - 右下角状态栏必须显示
Python、JavaScript等真实语言名;若为Plain Text,整个语法级折叠系统不启动 - 验证是否识别成功:光标停在
def行,按Ctrl+Shift+P→ 输入Developer: Show Scope Name,状态栏应含meta.function.python或类似作用域
Ctrl+K, Ctrl+0 折不全?别怪快捷键,先看基础条件
它调用的是 fold_all,但只折叠已被语法定义识别出的结构,不是“全文件无脑收”:
- 必须分步按键:先按
Ctrl+K松开,再按Ctrl+0(数字零,非字母 O) - 若右下角是
Plain Text,命令完全不执行,且无任何提示 - Python 文件混用 Tab 和空格缩进,会导致
def行未被识别为函数作用域,直接跳过折叠 - 文件超过 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、3、1 - Python 文件通常从
2开始;JS 中function常在 level 3,但箭头函数可能不被识别 - 输错数字无提示,静默失败;装饰器跨行(如
@decorator单独一行紧贴def)或 docstring 紧贴def行,会导致识别断裂,加空行可修复 - 若
Ctrl+Shift+[都无法折单个函数,说明函数未被语法识别为独立作用域,fold_by_level必然无效
任意几行都要收起来?fold_selection 是唯一 100% 可控方式
这是唯一绕过语法解析、缩进校验和 foldingStartMarker 规则的方式,适合 JSON、日志、配置段等非标准结构:
- 鼠标拖选任意连续多行(支持空行、注释、base64 字符串)
- Windows/Linux 按
Ctrl+Shift+Alt+[,macOS 按Cmd+Ctrl+Option+[ - 侧边栏立刻出现独立三角图标,点击即可展开/收起,不影响其他自动折叠块
- 该折叠仅存于当前会话,关闭文件即丢,不写入磁盘;
Ctrl+K, Ctrl+J(unfold_all)不会还原它,得单独点开 - 侧边栏没三角图标?检查用户设置中是否含
"fold_buttons": true,且未被插件覆盖为false
最常被忽略的一点:折叠功能本身默认启用,但“是否可见”“是否响应”完全取决于语法识别是否完整——与其反复调快捷键,不如先点右下角确认语言名,再用 Developer: Show Scope Name 看一眼作用域链是否断在了第一环。











