sublime text 原生不支持一键只折叠函数,需依赖 meta.function 作用域识别;若失效,可用 fold_by_level 按实际层级尝试,或用正则匹配函数定义行后 ctrl+shift+[ 折叠。

Sublime Text 原生不支持“一键折叠所有函数”,Ctrl+K, Ctrl+0 会把 if、class、顶层注释甚至 JSON 根对象全收掉,不是函数专属;真正能只折函数的路径只有 fold_by_level,但它必须实测层级数字,且严重依赖语法作用域是否生效。
确认 meta.function 作用域是否被识别
这是所有函数级折叠的前提。如果 Sublime 没识别出函数定义行的作用域,fold_by_level 和 Ctrl+Shift+[ 都会静默失败。
- 光标停在
def或function行(不能是空行、注释行或函数体内) - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name→ 回车 - 状态栏显示类似
source.python meta.function.python才算就绪;若只有source.python,说明语法包未命中或文件后缀异常(如.pyi、.j2) - 右下角状态栏必须显示
Python、JavaScript等真实语言名,而非Plain Text
用 fold_by_level 精准折叠函数体
fold_by_level 是唯一能绕过 if/for 干扰、只对函数作用域生效的方式,但层级数字不能凭经验硬套,必须逐个试。
- 先手动用
Ctrl+Shift+[折一个函数,确认它真被识别为函数块(而非缩进块) - 按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 - 依次输入
1、2、3、4—— Python 文件通常从2开始,JavaScript 常需3,但自定义语法包可能改写嵌套深度 - 输错不会报错,只是没反应;装饰器跨行或 docstring 紧贴
def行(如def f(): """doc"""; pass)会导致跳过,加空行可修复
语法失效时的正则兜底方案
当 show_scope_name 只返回 source.python、右下角是 Plain Text,或用了非标插件(如旧版 Vue Component),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字样却非函数(如注释里写了# def handler()),也会被误折
为什么 Ctrl+K, Ctrl+1 不是“只折函数”
Ctrl+K, Ctrl+1 调用的是 fold_all 命令,参数为 level=1,但它折叠的是语法定义中所有标记为 level 1 的结构,不是语义过滤。
- 在 Python 中,它常覆盖
def和class;但在 JavaScript 中,可能漏掉箭头函数或简写方法 - 必须分两步按:
Ctrl+K松开,再按Ctrl+1(不是同时按) - 若文件后缀不标准(如
.pyi、.j2),Sublime 没自动绑定语法,该快捷键就不会生效 - 它和
fold_by_level 1表现相似,但底层逻辑不同:前者是批量调用所有 level-1 折叠点,后者是按作用域深度统一收起
最易被忽略的点是:函数前紧贴 docstring 且无换行时,fold_by_level 往往跳过整个块;而正则兜底法虽快,但无法区分注释里的 def 和真实函数定义——这两个边界情况,几乎决定了你能不能真正“只折函数”。











