Sublime Text 的代码折叠依赖语法定义而非缩进或括号位置,需确认右下角显示正确语法名;自动折叠失效时可用 fold_selection 手动折叠选中行;fold_all 按层级逐步折叠,fold_level 可指定折叠深度;JSON/Markdown 等需安装专用插件启用折叠。

Sublime Text 里 fold 命令默认只认语法结构,不是所有代码块都能一键折叠
Sublime Text 的代码折叠能力依赖于当前文件的 syntax definition(语法定义),而不是缩进或大括号位置。这意味着:即使你写了标准的 Python 函数或 JS 对象,如果语法高亮没正确加载,ctrl+shift+[ 也折不动。
- 检查右下角状态栏,确认显示的是
Python、JavaScript等真实语法名,而不是Plain Text或空值 - 若显示错误,点击它 → 选择对应语言;或用快捷键
ctrl+shift+P→ 输入Set Syntax: Python - 部分自定义语法或老旧插件(如旧版
Vue Syntax Highlight)可能未定义foldingStartMarker,导致{、def、function不触发折叠
手动折叠任意行范围:用 fold_selection 命令最可靠
当自动折叠失效,或者你想临时收起一段注释、配置 JSON、日志输出等非标准结构时,fold_selection 是最直接的解法——它不依赖语法,只看光标选中的行范围。
- 选中你要折叠的多行(鼠标拖选,或
ctrl+L多次选中连续行) - 按
ctrl+shift+[(Windows/Linux)或cmd+shift+[(macOS) - 折叠后,光标移到折叠标记上按
enter可展开;再次按ctrl+shift+[会尝试扩展折叠范围(比如从 3 行扩到包含其父级的 5 行)
fold_level 和 fold_all 的行为差异容易混淆
fold_all 并不是“把所有能折的地方都折起来”,而是按层级逐级折叠:先折函数/类一级,再折 if/for 二级,依此类推。而 fold_level 是指定只折到某一层级(比如只折 class 和 def,不折内部的 if)。
-
fold_all:快捷键alt+0(数字零),执行一次 ≈ 折到 level 1;再按一次 ≈ 折到 level 2;第三次才可能真正“全折” -
fold_level:需通过命令面板调用 ——ctrl+shift+P→ 输入Fold Level 2→ 回车,适合快速清理特定粒度的嵌套 - 注意:
unfold_all(alt+1)只会展开当前已折叠的部分,不会恢复被手动折叠(fold_selection)的区域,得单独点开或用unfold_all多按几次
JSON / Markdown / 自定义配置文件怎么启用折叠
这些格式默认无折叠支持,因为 Sublime 自带的 JSON 和 Markdown 语法包没内置折叠规则。必须手动补上或换包。
- JSON:安装插件
BracketHighlighter+ 启用match_brackets_in_comment无效;正确做法是装JSON Folding插件(Package Control 搜索即得) - Markdown:原生不支持标题折叠;可装
MarkdownFold,它把# H1、## H2当作折叠节点 - 自定义配置(如
.env、nginx.conf):需编辑对应.sublime-syntax文件,添加类似下面的规则(以 nginx 为例):
fold:
start: "\\{"
end: "\\}"
但改语法文件有风险,普通用户更建议用 fold_selection 应急——毕竟这类文件本就不是为逻辑嵌套设计的。
真正麻烦的不是怎么折,而是哪些地方「看起来能折却折不了」:比如 Vue 单文件组件里 块用了 type="module",某些语法包会误判为非 JS 上下文;又比如缩进用混了 Tab 和空格,fold_by_indentation 就会失效。遇到折不动,先看语法名,再试手动选区,最后查插件兼容性——别一上来就改配置。










