Sublime折叠功能依赖光标位置、语法识别和作用域层级:Ctrl+Shift+[需光标在语法起始行首;Ctrl+K,Ctrl+0/1/2按作用域深度折叠;选区折叠最稳定但不持久;#region等需语法文件支持。

Ctrl+Shift+[ 没反应?先看光标停在哪行
Sublime 的 Ctrl+Shift+[ 不是“选中就折”,而是严格绑定光标所在行是否属于一个被语法识别的折叠起始位置。按了没反应,90% 是因为光标停错了地方。
- 必须停在
def、class、if、for、function、{这类行的**行首**——不能停在空行、注释行、字符串内部,也不能停在:或{后面的缩进行上 - 右下角状态栏必须显示真实语言名(如
Python或JavaScript),如果是Plain Text,整个折叠系统直接不启动 - 不确定当前行是否被识别?按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,看输出里有没有meta.function、meta.class或meta.block这类带meta.前缀的作用域标识
Ctrl+K, Ctrl+0 和 Ctrl+K, Ctrl+1 到底在折什么
这两个命令不是按缩进层数,而是按语法作用域嵌套深度(scope level)折叠。具体哪一层对应什么结构,由当前语言的语法定义决定,不同语言行为差异明显。
-
Ctrl+K, Ctrl+0:调用fold_all命令,暴力折叠当前视图中所有已识别的可折叠块,不挑层级,最可靠 -
Ctrl+K, Ctrl+1:只折叠 scope depth = 1 的结构。Python 中常是import、顶层变量、if __name__ == "__main__":;JS 中可能是function声明或根级{块 -
Ctrl+K, Ctrl+2:再往里一层。Python 中常对应class内部的方法体;JS 中可能同时折叠function体和if块,因它们共享同一层metascope - 注意:
Ctrl+K必须先按住、松开,再按数字键(如0),连按或卡顿会失效;数字最大到9,超出等同于全折叠
想折任意几行?别等插件,用原生选区折叠
手动选中后折叠是 Sublime 最稳定、零配置的兜底方案,完全绕过语法解析和 fold rules,哪怕你在 JSON 配置段落里也能立刻收起。
- 鼠标拖选或多行选中(
Ctrl+L连续选行),然后按Ctrl+Shift+Alt+[(Windows/Linux)或Cmd+Ctrl+Option+[(macOS) - 折叠后左侧边栏会出现独立三角图标,点击即可展开,不影响其他自动折叠区域
- 该操作调用的是
fold_selection命令,不依赖语法包、不读fold_comments设置、不校验缩进 - ⚠️ 注意:该折叠仅存于当前会话,关闭文件即丢失;如需持久化,必须靠语法定义或插件
#region 注释为什么不生效
#region 或 // region 不是 Sublime 原生特性,它能否生效,取决于当前语言的语法文件是否在对应注释规则中声明了 fold: true。
- 默认 Python 语法支持
# region,但必须顶格写(前面不能有空格或 Tab),且# endregion要严格配对 - JS/TS 默认不支持
// region,除非你装了 CodeFold 插件,或手动修改JavaScript.sublime-syntax文件,在注释 context 的match下加fold: true - 常见坑:
fold必须写在具体context的match下,不能只写在顶层;Sublime 不支持跨行正则回溯,像region.*?end这种写法无效 - 简单验证法:在 Preferences → Settings – Syntax Specific 中加一行
"fold_comments": true,对单行注释(#、//)有效,但不会折多行文档注释
复杂点在于:折叠状态默认不保存,每次打开文件都会重置为展开态;而真正影响折叠可用性的,往往不是快捷键记不牢,而是语法识别失败、作用域未命中、或自定义折叠规则没写对位置。

















