sublime无一键折叠所有函数的原生命令,ctrl+k,ctrl+1按缩进层级或语法块顶层折叠,并非语义函数;需用fold_by_level配合show_scope_name实测函数作用域层级数字。

Sublime 没有“一键折叠所有函数定义”的原生命令,所谓“折叠所有函数”必须靠作用域识别 + 手动验证层级数字,不能直接按 Ctrl+K, Ctrl+1 或 Fold All。
为什么 Ctrl+K, Ctrl+1 折的不是函数?
这个快捷键折叠的是「缩进层级」或「语法块顶层结构」,不是语义上的函数。在 Python 中它可能收起 def、class、if __name__ == '__main__';但在 JavaScript 中,const fn = () => {} 这类赋值式函数不会被识别为可折叠单元——因为它的作用域是 source.js meta.assignment.js,而非 meta.function.js。
- Ctrl+K, Ctrl+0 是按缩进折叠全部(会把注释、if 块全收进去)
- Ctrl+K, Ctrl+1 不等于“所有函数”,它只对当前语法定义中标记为 level 1 的折叠单元生效
- 右下角显示 Plain Text / Unknown Syntax 时,该快捷键完全无效
怎么确认函数是否被正确识别为可折叠单元?
光标停在 def my_func(): 或 function foo() { 行,按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入 show_scope_name 回车。状态栏显示内容决定一切:
- ✅ 显示类似
source.python meta.function.python→ 函数作用域已识别,可折叠 - ❌ 只显示
source.python或source.python meta.block.python→ 语法高亮失效、插件冲突或缩进混用(比如某行用了 tab) - ⚠️ 显示
source.python comment.line.number-sign.python→ 光标实际停在注释行,不是def行
真正能批量折叠所有函数的实操路径
必须用 fold_by_level 命令,并手动试出当前语言下 meta.function 对应的折叠层级数字。这个数字不是固定值,取决于你当前加载的语法文件中 meta.function 的嵌套深度。
- 先手动按
Ctrl+Shift+[折一个函数,确保它真被识别了 - 打开命令面板:
Ctrl+Shift+P→ 输入fold_by_level→ 回车 - 依次尝试输入
1、2、3、4(Python 通常是2,JS 常是3,但必须实测) - 输错不会报错,只是没反应;一旦输对,所有被标记为
meta.function的块会同时收起 - 若部分函数没被折(比如嵌套函数),说明它们属于更深层级(如
level 3),需单独再执行一次fold_by_level 3
绕不开的三个硬限制
即使操作全对,也会遇到这些 Sublime 原生机制决定的边界:
- 折叠最多支持 10 层嵌套,深层嵌套函数或模板字符串内联函数会自动截断
- .vue 或 .md 文件中的代码块,若

