sublime text 无原生“一键折叠所有函数”功能,需通过 fold_by_level 命令结合 show scope name 验证函数作用域后实测层级(如python常为2、js常为3);语法失效时可用正则选中函数定义行后 ctrl+shift+[ 折叠。

Sublime Text 没有“一键折叠所有函数”的原生命令,Ctrl+K, Ctrl+0 会把 if、class、顶层注释甚至 JSON 根对象全收掉,不是你要的“只折函数”。真正可控的方式只有 fold_by_level,但它依赖当前语法包中 meta.function 所在的实际作用域层级,必须实测,不能硬套 Python=2、JS=3 这类经验。
先确认函数作用域是否被识别
这是所有后续操作的前提——如果 Sublime 根本没把 def 或 function 行识别为函数,fold_by_level 就不会响应,也不会报错,只是静默失败。
- 把光标停在任意一个
def或function行(比如def hello():) - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name→ 回车 - 看状态栏:如果显示类似
source.python meta.function.python或source.js meta.function.js,说明就绪;如果只有source.python或text.plain,说明语法未生效或插件干扰 - 右下角显示
Plain Text?点击它,手动选成Python或JavaScript - 文件后缀非标准(如
.pyi、.j2)?需在Preferences → Settings – Syntax Specific中显式指定"syntax": "Packages/Python/Python.sublime-syntax"
用 fold_by_level 精准折叠函数体
这个命令不看缩进、不猜结构,只按语法定义的作用域嵌套深度折叠所有标记为该层级的 meta.function 块。但数字必须试出来,不同插件、不同语言版本可能完全不同。
- 确保上一步验证通过后,按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 - 依次尝试输入
1、2、3、4(Python 多数情况是2,JavaScript 常是3,TypeScript 可能是4) - 输错不会提示,只是没反应;输对后,所有被识别为函数的块会同时收起
- 若函数前紧贴 docstring(如
def f(): """doc"""; pass),Sublime 常跳过整个块——加一行空行即可修复 - 装饰器跨多行(如
@decorator(...)换行写在def上方)也会中断作用域链,此时fold_by_level失效
语法失效时的兜底方案:正则选中 + 折叠
当 show_scope_name 只返回 source.python、右下角是 Plain Text、或用了 Vue/TS 插件但其 .sublime-syntax 没声明 foldingStartMarker 时,fold_by_level 和 Ctrl+K, Ctrl+0 全部失效,只能退回文本层处理。
-
Ctrl+F打开查找 → 输入正则:^def\s|^function\s|^[a-zA-Z]+\s*=\s*function\s*\(.*\)\{ - 勾选
Regex和Match case - 点
Find All,所有函数定义行会被高亮选中(含带装饰器的行) - 按
Ctrl+Shift+[—— Sublime 会对每个选中行单独触发一次折叠 - 风险:若某行注释里写了
# def handler(),也会被误折;纯文本驱动,不校验语义
真正麻烦的不是记不住快捷键,而是每次换项目、换插件、换语法包,meta.function 的层级都可能变;fold_by_level 2 在你本地 Python 文件里好使,到同事的机器上可能就得试到 3。别省那两秒,每次新环境都先 show_scope_name 看一眼再动手。











