sublime的多层折叠基于语法作用域嵌套深度而非缩进;ctrl+k,ctrl+n中的n对应meta.function等scope层级,python函数常在level 2、js函数常在level 3;折叠失败主因是scope链断裂,如装饰器跨行、缩进混用、插件冲突或语法未识别;推荐用fold_by_level命令精准控制,或手动选区折叠兜底。

Sublime 的“多层折叠”不是指缩进层数,而是语法作用域嵌套深度;Ctrl+K, Ctrl+2 折不了函数?大概率是 scope 没识别出来,不是快捷键按错了。
Ctrl+K, Ctrl+N 折叠层级到底看什么?
这个 N 是语法定义中 meta.function、meta.conditional 等作用域的嵌套层级(scope level),和空格/Tab 数量完全无关:
- Python 中
def通常在 level 2,但若前面紧挨"""docstring"""且无空行,scope 链可能断裂,meta.function.python就不会出现 - JavaScript 里
function块常在 level 3,而{包裹的if可能在 level 4 —— 同一个文件里不同结构层级不一致是常态 - 输错数字(比如 Python 文件输
Ctrl+K, Ctrl+5)不会报错,只是静默失败;建议从 1 开始试到 4,边试边用Ctrl+Shift+P → Developer: Show Scope Name验证光标所在行是否含目标 scope
为什么 Ctrl+K, Ctrl+2 只折了一半函数?
根本不是快捷键问题,而是语法高亮器输出的 scope 链断了。常见断点:
- 装饰器跨行:如
@cache单独一行 + 紧贴def,中间没空行 → 解析器把@当作独立meta.decorator,跳过后续meta.function - Tab 和空格混用缩进 → 语法包提前终止 scope 推导,
meta.block链中断 - 装了旧版插件(如 Python Improved)覆盖原生语法包,导致 folding 规则失效
- 右下角显示
Plain Text或非官方语法名(如Vue Component)→ 折叠逻辑压根不加载
想只折函数,不碰 if/class?用 fold_by_level 而非 fold_all
Ctrl+K, Ctrl+0 是 fold_all,会把 __all__ = []、文档字符串、甚至顶层注释全收走;真正可控的是 fold_by_level 命令:
- 先确保某个
def行能被Ctrl+Shift+[正常折叠(否则fold_by_level无目标可折) Ctrl+Shift+P → fold_by_level → 回车 → 输入 2(Python)或 3(JS)→ 回车
- 若无效,换 1 或 4 再试;它只匹配
meta.function + 指定 level 的组合,不会误折同层的 <code>if块 - 嵌套函数(
def outer(): def inner():)需额外执行一次fold_by_level 3
手动选区折叠:唯一不依赖语法、100% 可控的兜底方案
当语法识别失败、语言不支持(如 YAML 原生无折叠)、或你只想临时收起一段 JSON 配置 / 日志 / 测试数据时,这是最稳的选择:
- 鼠标拖选任意连续多行(哪怕全是注释或空行)
- 按
Ctrl+Shift+Alt+[(Windows/Linux)或Cmd+Ctrl+Option+[(macOS) - 侧边栏出现独立小箭头,点击即可展开/收起;关闭文件后自动消失,不影响其他折叠状态
- 不修改设置、不装插件、不依赖
scope识别,适合紧急整理或非标准格式
真正卡住人的,往往不是“怎么按”,而是光标停的位置没被识别为折叠起点——先看右下角是不是 Plain Text,再用 Show Scope Name 确认 scope 是否完整,比反复重装插件有用得多。











