Sublime原生不支持“只展开当前函数,其他全折”命令,因其缺乏语义级反向折叠功能;需先确保语法识别正确,再通过fold_all收起所有顶层块,最后用Ctrl+Shift+]单独展开目标函数。

为什么 Sublime 没有“只展开当前函数,其他全折”命令
Sublime 原生不支持语义级反向折叠——它没有 unfold_only_current_function 或类似命令。所有折叠操作(包括 fold_all、fold_by_level)都是“批量收起”,无法自动识别“当前光标所在函数”并反向保留它。所谓“只留一个函数展开”,本质是手动排除 + 精准折叠的组合动作。
先确保当前函数能被正确识别
这是后续所有操作的前提。如果 Ctrl+Shift+[ 对你光标所在的 def 行没反应,说明 Sublime 根本没把它当函数处理:
- 右下角状态栏必须显示
Python(或JavaScript等),不能是Plain Text - 光标停在
def foo():这行(不能在函数体内部、空行或注释行) - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name回车,状态栏应出现类似source.python meta.function.python—— 缺少meta.function就意味着语法包未声明函数折叠作用域,fold_by_level会静默失败 - 装饰器跨行(如
@decorator单独一行)或 docstring 紧贴def行(如def f(): """doc"""; pass)会导致作用域中断,加空行可修复
分两步实现“仅当前函数展开”
核心思路:先收起所有顶层结构,再单独展开当前函数。这比“逐个折叠其他函数”更可靠:
- 第一步:按
Ctrl+K松开 → 再按Ctrl+0,执行fold_all,收起所有已识别的顶级块(def、class、顶层if、for、JSON 根对象等) - 第二步:把光标移回你想保留的函数定义行(如
def handler():),按Ctrl+Shift+]—— 它只会展开该函数体,不影响其他已折叠块 - 注意:若该函数是嵌套的(如类内方法),
Ctrl+K, Ctrl+0可能没把它当顶层结构收起,此时需先用fold_by_level尝试输入2或3收紧层级,再单独展开
容易被忽略的边界情况
真正卡住人的往往不是操作步骤,而是这些细节:
-
Ctrl+K, Ctrl+0不是“只折函数”,它连顶层注释块、if __name__ == "__main__":、甚至 YAML 文件的根映射都会收掉——如果你文件里有大量模块级配置或文档注释,它们也会消失 - 某些插件(如
BracketHighlighter或旧版Vue Syntax)会劫持折叠逻辑,导致Ctrl+Shift+[或fold_all无响应;可临时禁用插件验证 - 文件后缀非标准(如
.pyi、.j2、.tsv)时,Sublime 不自动绑定语法,必须手动点击右下角切换语言,否则一切折叠命令都无效 - 想对 JSON/HTML/Markdown 做类似操作?它们默认折叠能力有限(如 HTML 只折标签对,JSON 只折对象/数组),
fold_by_level在这些语言中基本不可用,只能靠手动选中 +Ctrl+Shift+[

















