Sublime Text 4折叠代码块的几种常用方式
sublime text 4代码折叠依赖语法作用域识别而非缩进;ctrl+shift+[仅在可折叠结构起始行生效,如python的def/class行、js的function/{行、html的开始标签行;fold_by_level可精准按层级折叠函数,而fold_selection支持手动选中任意代码段折叠。

Sublime Text 4 的代码折叠不靠“猜”,而靠语法作用域识别和显式标记;Ctrl+Shift+[ 没反应,大概率不是快捷键错了,而是当前行没被识别为可折叠结构的起点。
Ctrl+Shift+[ 折不了?先确认光标停在哪儿
这个快捷键只对「可折叠结构的起始行」生效,不是函数体里任意一行都能触发:
- Python 必须停在
def func(): 或 class Foo: 行,停在函数体内、空行、注释行或 docstring 行都无效
- JavaScript 必须停在
function foo() {、const bar = () => { 或 if (cond) { 这类带 { 的起始行
- HTML 必须停在
<div>、<code><script></script> 等开始标签行,停在
或内容行上不响应
不确定是否识别成功?按 Ctrl+Shift+P → 输入 Developer: Show Scope Name,看状态栏是否含 meta.function、meta.block 或 meta.tag 类 scope
Ctrl+K, Ctrl+1 为什么只折了一半函数?
它折叠的是语法定义中 fold_level = 1 的作用域,不是缩进层级,也不是所有函数——效果完全取决于语言包解析质量:
- Python 中
import、if __name__ == "__main__": 常属 level 1,而 def 多数落在 level 2(尤其带装饰器或紧贴 docstring 时)
- JS 中
function 块可能在 level 3,{ 包裹的 if 反而在 level 4
- 装饰器跨行(如
@cache 单独一行)、def 和 docstring 之间无空行、Tab/空格混用,都会导致 scope 链断裂,Ctrl+K, Ctrl+1 静默失效
- 右下角显示
Plain Text 或文件无扩展名(如未保存的临时文件),该快捷键直接不工作
想只折函数?别用 Ctrl+K, Ctrl+0,改用 fold_by_level
Ctrl+K, Ctrl+0 是 fold_all,会把顶层 if、for、__all__ = []、文档字符串块全收走,不适合结构审查:
- 先手动用
Ctrl+Shift+[ 折一个函数,确认左侧 gutter 出现 ▶ 图标(说明被识别为独立作用域)
- 按
Ctrl+Shift+P → 输入 fold_by_level → 回车
- 依次试数字
2(Python 常见)、3(JS/TS 更常见)、1 或 4;输错无提示,没反应就换下一个
- 该命令只匹配
meta.function + 指定 level 的组合,if 块即使同层也不会被误折
手动选中折叠是最稳的兜底方案
当语法识别失败、语言不支持折叠、或只想临时隐藏一段 JSON/日志/测试代码时,fold_selection 完全绕过语法解析:
- 鼠标拖选或多行选中(
Ctrl+L 连续选行)
- 按
Ctrl+Shift+[(Windows/Linux)或 Cmd+Shift+[(macOS)
- 折叠后点击左侧 gutter 的 ▶ 可展开;关闭再打开文件会丢失状态,但当前会话内始终有效
- 它不读
fold_level、不查 scope、不依赖任何语法包,纯按行号区间操作,是真正“所见即所得”的折叠方式
真正容易被忽略的点:折叠状态从不持久,重启 Sublime 就全展开;侧边栏三角图标默认只悬停显示,得在用户设置里加 "fold_buttons": true 和 "fade_fold_buttons": false 才常驻可见;# region 这类标记原生不支持,硬要加得改 .sublime-syntax 文件,且正则不能跨行。