sublime text 无原生“一键只折函数”功能,ctrl+k, ctrl+0 折叠所有顶层结构而非仅函数;精准折叠需用 fold_by_level 命令并实测层级(python 通常为 2),或正则匹配函数定义行后手动折叠。

Sublime Text 没有“一键只折函数”的原生命令,Ctrl+K, Ctrl+0 折的是所有顶层结构(包括 if、class、顶层注释),不是函数;真正能接近“只折函数”的,只有 fold_by_level 命令,但它的数字必须实测,不能硬背。
为什么 Ctrl+K, Ctrl+0 不是你要的“只折函数”
它按语法定义中的“顶层可折叠作用域”批量折叠,而 Python 的 class 和 def 通常同属 level 1,JavaScript 中 const fn = () => {} 甚至不被识别为函数作用域。结果就是:__all__ = []、if __name__ == '__main__':、文档字符串块全被收走——你看到的是一张空目录,不是函数签名列表。
-
Ctrl+K, Ctrl+1看似更细,但它依赖当前语法包对“level 1”的定义,不同插件差异极大,JSX 或 Vue 单文件组件里常失效 - 右下角显示
Plain Text时,Ctrl+K, Ctrl+0静默不响应,无任何提示 - 即使语言识别正确,混用 Tab/Space 缩进也会导致部分
def行无法被归入meta.function作用域,从而漏折
怎么用 fold_by_level 精准只折函数(不碰 if/for/class)
这个命令不认语义,只认语法定义中 meta.function 所在的嵌套层级。Python 通常是 2,JS 常是 3,但必须手动验证——输错数字不会报错,只是没反应。
- 先把光标停在任意一个
def行,按Ctrl+Shift+[确认能折:若失败,先查show_scope_name是否返回meta.function - 按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 依次试2、3、1(Python 文件优先试 2) - 装饰器跨行(如
@decorator换行写在def上方)或 docstring 紧贴def(如def f(): """doc"""; pass)会导致跳过,加空行可修复 - 嵌套函数(如
def outer(): def inner(): ...)属于更深一层,可能需额外执行一次fold_by_level 3
语法失效时的兜底方案:正则选中所有 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 helper(),也会被误折
三个硬性前提,缺一不可
无论用哪种方式,以下三点任一不满足,函数折叠都会静默失败,且 Sublime 不给任何提示。
- 右下角状态栏必须显示
Python、JavaScript等具体语言名,不能是Plain Text或Python Improved(除非后者明确定义了meta.function) - 缩进必须统一:Python 文件混用 Tab 和 Space 会导致语法解析中断,
def行无法进入meta.function作用域 - 折叠最多支持 10 层嵌套,深层嵌套函数、模板字符串内联函数、或 JSX 中的箭头函数体,会自动截断不响应











