fold_by_level是最接近“只折函数”的原生方案,因其按语法作用域嵌套深度折叠,函数体在python中通常位于第2层、javascript中常为第3层,需先验证meta.function识别正常并实测层级数值。

Ctrl+K, Ctrl+0 不是“一键只折函数”的解法,它会把类、顶层 if、模块级注释、甚至 __all__ = [] 一起收起来。真想只看函数签名列表,得绕开这个命令。
为什么 fold_by_level 是最接近“只折函数”的原生方案
这个命令按语法作用域嵌套深度折叠,而函数体在多数语言中处于固定层级(Python 通常是 2,JavaScript 常是 3),前提是语法识别正常。
- 先手动把光标停在某个
def行,按Ctrl+Shift+[确认能折——这是验证meta.function是否被识别 - 按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 尝试输入1、2、3、4 - 输错不会报错,只是没反应;不同插件或自定义语法包会改变该数字,必须实测
- 若函数前紧贴 docstring(如
def f(): """doc"""; pass),fold_by_level可能跳过,加空行可修复
正则选中 + Ctrl+Shift+[ 是语法失效时的兜底操作
当右下角显示 Plain Text,或 show_scope_name 返回只有 source.python 时,fold_by_level 和 Ctrl+K, Ctrl+0 都不可靠。这时纯文本匹配最稳。
-
Ctrl+F打开查找 → 输入正则^def\s|^function\s|^[a-zA-Z]+\s*=\s*function\s*\(.*\)\s*\{ - 勾选
Regex和Match case - 点
Find All,所有函数定义行被高亮选中(含带装饰器的行) - 按
Ctrl+Shift+[—— Sublime 会对每个选中行单独触发一次折叠
注意:此法不检查作用域,所以即使语法识别失败也能用;但若某行匹配但非函数(如注释里写了 def),也会被误折。
三个硬性前提,任一不满足就静默失败
无论用哪种方式,以下三点任一不满足,函数折叠就会静默失败,且无提示:
- 右下角语言必须是
Python、JavaScript等具体语言名,不能是Plain Text或Python Improved(除非后者明确定义了meta.function) - 缩进必须统一:Python 文件混用
Tab和Space会导致整个作用域链断裂 - 函数定义格式需规范:跨行装饰器、无换行的 docstring、箭头函数无
{}等,都可能让语法解析跳过折叠起点
最容易被忽略的是第三点——看似合法的写法,在 Sublime 的语法定义里未必构成可折叠块。











