Ctrl+Shift+[没反应是因为光标未停在def/class/if/{等可折叠结构行首,且右下角需显示Python/JavaScript等真实语言名;Ctrl+K,Ctrl+0强制折叠所有块,Ctrl+K,Ctrl+1按作用域深度折叠;手动选中后Ctrl+Shift+Alt+[可原生折叠任意行;#region不生效因语法文件未定义其fold:true。

Ctrl+Shift+[ 没反应?先看光标停在哪行
Sublime 的折叠不是“选中就折”,而是严格依赖光标所在行是否属于一个可识别的折叠起始作用域。按了没反应,90% 是因为光标位置不对。
- 必须停在
def、class、if、for、function、{这类行的开头——不能停在空行、注释行、字符串里,也不能停在}或:后面的缩进行上 - 右下角状态栏必须显示真实语言名,比如
Python或JavaScript;如果是Plain Text,整个折叠系统直接不启动 - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,看状态栏输出:含meta.function或meta.class才算被识别为可折叠结构;只有source.python说明语法高亮失效
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__":;但若class行也被识别为 level 1,说明语法包异常(比如用了阉割版 Python 插件) -
Ctrl+K, Ctrl+2:再往里一层,通常是 class 内部的方法、函数体内的 if/for 块。JS 中可能同时折叠function和{块,因为它们共享同一层 meta scope
想折注释块或任意几行?别等插件,用原生选区折叠
Sublime 原生支持手动选中后折叠,完全绕过语法解析和 fold rules,是最稳定、零配置的兜底方案。
- 鼠标拖选或多行选中(
Ctrl+L连续选行),然后按Ctrl+Shift+Alt+[(Windows/Linux)或Cmd+Ctrl+Option+[(macOS) - 折叠后左侧边栏会出现独立三角图标,点击即可展开,不影响其他自动折叠区域
- 这个操作调用的是
fold_selection命令,不依赖语法包、不读fold_comments设置、不校验缩进,哪怕你在 JSON 配置段落里也能立刻收起 - 注意:该折叠仅存于当前会话,关闭文件即丢失;如需持久化,必须靠语法定义或插件
为什么 // #region 不生效,而 Python 的 #region 也不行
Sublime 不原生解析 #region 或 // #region 这类标记。能否折叠,取决于当前语言语法文件是否把这类注释行声明为 foldable: true,而不是用户设置里加一行 "fold_comments": true 就能解决。
- JavaScript 默认语法中,
// region能折,是因为其comment.line.double-slash.jsscope 在语法文件里被显式标记为可折叠 - Python 默认语法中,
# region不折,是因为comment.line.number-sign.pythonscope 没有 fold 指令;即使你在 Settings – Syntax Specific 里加了"fold_comments": true,也没用 - 真正起效的方式只有两个:换用支持 region 的第三方语法包(如
Python Improved),或自己改写.sublime-syntax文件,在 comment scope 下加fold: true
最容易被忽略的一点:折叠能力完全由语法定义驱动,不是 Sublime 编辑器本身的功能开关。你看到的“不支持”,其实是当前加载的语法文件没写折叠规则——换一个语法,行为可能完全不同。

















