Sublime Text 原生不支持一键折叠 HTML/Markdown 文档注释,因其未被语法定义为 comment.block 可折叠作用域;fold_comments: true 仅对明确定义 comment.line/block 且含 foldingStartMarker 的语言生效。

Sublime Text 原生不支持一键折叠 HTML 或 Markdown 文档注释(如 <!-- -->、<!--- --->、--- YAML front matter),因为这些结构未被语法定义为 comment.block 可折叠作用域——高亮了,但不参与折叠计算。
为什么 fold_comments: true 对文档注释无效
该设置只对语言包明确定义了 comment.line 或 comment.block scope 且配有 foldingStartMarker 的场景生效。HTML 语法把 <!-- --> 归为 comment.block.html,但默认没启用折叠规则;Markdown 的 --- front matter 更常被识别为 meta.separator.markdown,而非注释。
- 右下角显示
HTML或Markdown≠ 注释可折叠,得看作用域是否含comment - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,光标停在<!--行,若状态栏只显示text.html.basic而无comment.block,说明折叠链断了 - 装了
HTML-CSS-Class-Completion或MarkdownEditing插件,也不自动补折叠逻辑——它们专注高亮和补全
用正则选中 + fold_selection 快速收起所有文档注释
这是最稳、不依赖语法包、100% 可控的临时方案,适合清理 README.md 里的说明段落、HTML 模板中的大段注释、或 Vue SFC 中的 <!-- -->。
- 按
Ctrl+F打开查找,启用Regex模式 - 输入匹配 HTML 注释的正则:
<!--[\s\S]*?-->;Markdown front matter 用:^---[\s\S]*?^---$(需勾选Match case和Whole line) - 点
Find All,全部注释块高亮;再按Ctrl+Shift+L将每个匹配转为独立光标 - 确保光标只落在注释行内(避开空行或紧邻标签),然后按
Ctrl+Shift+Alt+[(Windows/Linux)或Cmd+Ctrl+Option+[(macOS)触发fold_selection - 侧边栏出现独立三角图标,点击即可展开;关闭文件后该折叠自动丢失,不写入磁盘
Ctrl+K, Ctrl+0 折叠全部时,文档注释为何仍展开
因为 fold_all 只折叠语法定义中声明了折叠边界的结构(如 def、function、{、<div>),而文档注释不在其中。它不是“按缩进/空行/符号配对”智能识别,而是严格查语法文件里的 foldingStartMarker 正则。
- 即使你手动改过
HTML.sublime-syntax,加了foldingStartMarker: "<!--",也必须同时配foldingStopMarker: "-->",否则 Sublime 4+ 会忽略整条规则 - YAML front matter 若被识别为
meta.separator,加comment规则无效;得先把它重映射为comment.block作用域,再加折叠标记 - 别指望
// region或#region在 HTML/Markdown 里生效——Sublime 原生只在 JS/TS/Python/C++ 等少数语言中解析这类伪指令
想持久化折叠文档注释?绕不开语法定制
如果频繁处理带大量文档注释的文件(如静态站点模板、组件文档页),唯一可靠方式是修改或覆盖语法定义,让 Sublime 明确认出“这是一段可折叠注释”。但这需要实操经验,容易踩坑:
- 不要直接改
Packages/HTML/HTML.sublime-syntax—— 升级会被覆盖;应复制到Packages/User/HTML.sublime-syntax - 在
contexts下新增一个 rule,匹配<!--并 assigncomment.block.htmlscope,再在foldingsection 加对应 start/stop 正则 - Markdown 的
---需先确认当前语法是否为MarkdownEditing(它把 front matter 当meta.separator),还是原生Markdown(可能根本没定义 separator scope) - 改完后重启 Sublime 或执行
Ctrl+Shift+P→Reload Syntax Files,再用Developer: Show Scope Name验证作用域是否更新
真正卡住人的,往往不是“怎么加规则”,而是改完后 Ctrl+K, Ctrl+0 还是没反应——八成是正则写错、scope 名拼错、或没 reload 语法文件。正则调试建议用在线工具先验证 [\s\S]*? 是否贪婪匹配正确,避免跨段落误吞内容。

















