sublime text 无原生“一键只折函数”命令,需用 fold_by_level(如python设为2)或正则匹配^def\s|^function\s等再ctrl+shift+[折叠,前提为语言识别正确、缩进统一、函数定义格式规范。

Sublime Text 没有原生“一键只折函数”的命令,但能用 fold_by_level 或正则选中 + Ctrl+Shift+[ 实现干净、可控的批量函数折叠——前提是语言识别正确、缩进统一、函数定义格式规范。
为什么 Ctrl+K, Ctrl+0 不是你要的“只折函数”
它会把所有顶层结构一起收起来:类、模块级 if、顶层注释块、甚至 __all__ = [] 这种赋值行。如果你只想看函数签名列表,这个命令太粗了,干扰信息太多。
-
Ctrl+K, Ctrl+0依赖语法定义中的“顶层可折叠作用域”,不是专为函数设计 - Python 中它常把
class和def并列处理;JavaScript 中可能漏掉箭头函数或方法简写 - 若文件里有大量顶层文档字符串或配置字典,也会被误折
怎么用 fold_by_level 精准只折函数(不碰 if/for/类)
这个命令按作用域嵌套深度折叠,而函数体在多数官方语法中处于固定层级(比如 Python 是 2),前提是语法识别正常。
- 先手动把光标放在一个
def行,按Ctrl+Shift+[确认能折——这是验证meta.function作用域是否生效 - 按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 尝试输入1、2、3、4(Python 通常成功的是2,JS 常是3) - 输错不会报错,只是没反应;不同插件或自定义语法包会改变该数字,必须实测
- 若用了
@overload、跨行装饰器或紧贴 docstring 的写法(如def f(): """doc"""; pass),fold_by_level可能跳过,加空行可修复
语法失效时的兜底方案:正则选中所有 def/function 行再折叠
当右下角显示 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) - 缩进必须统一(不能混用 Tab 和 Space),尤其 Python 文件,否则语法解析中断
- 函数定义行后建议留空行,避免与紧贴的 docstring 或装饰器连在一起导致作用域识别跳过











