vscode原生及主流插件不支持按语义自动分类标题;仅能生成线性toc,因markdown无元数据、插件api不支持nlp、正则匹配易误判;可行方案为人工前缀约定、yaml front matter配合脚本处理或静态模板渲染。

VSCode 里没有“目录自动分类”这个功能
直接说结论:VSCode 原生和主流插件(如 Markdown All in One、Markdown TOC)都不提供“按内容类型/标签/关键词自动把标题分组归类”的能力。它们只做一件事:扫描 # 到 ###### 的标题行,按层级生成线性 TOC 列表。
所谓“自动分类”,比如把所有带 API 的标题塞进“接口章节”,把含 配置 的归到“环境设置”下——这不是 Markdown 解析器的职责,也没有插件实现这种语义识别逻辑。
为什么插件不支持按语义分类
这类需求踩中了三个硬限制:
- Markdown 标题是纯文本,不含元数据(比如没有
type: api这种字段),插件无法区分“API 设计”和“API 调试示例”在语义上是否同类 - VSCode 插件 API 不开放 NLP 或关键词匹配能力,无法安全地做中文分词、同义词合并或上下文判断
- 即使强行用正则匹配关键词(如
/api/i),也会误伤:标题“禁用 API 网关”会被错误归入“API”类,而“Auth 流程”可能因没写“API”被漏掉
能替代“自动分类”的可行做法
如果真需要结构化分组,得靠人工约定 + 工具辅助:
- 在标题前加统一前缀,比如
### [API] 用户登录接口、### [配置] 数据库连接参数,再用Markdown All in One的toc.levels配置只提取###级,并配合 VSCode 的“查找替换”批量提取前缀生成分组标题 - 用 YAML front matter 定义分类字段,例如在文件开头写:
---\ntoc_category: \"部署\"\n---
,再写个简单脚本(Node.js 或 Python)读取 front matter 和标题,按toc_category分组生成 HTML 或 Markdown 片段 - 放弃“自动”,改用
Markdown Preview Enhanced插件的自定义 TOC 模板功能,在settings.json里手动写几段带条件的{{#if}}模板——但这只是静态渲染,不真正“分类”,只是视觉分隔
容易被忽略的兼容性坑
GitHub / GitLab 渲染 Markdown 时,会忽略任何插件生成的非标准语法(比如自定义 front matter 分类字段或模板变量)。这意味着:
- 你在 VSCode 里辛苦做的“分类 TOC”,推到仓库后在 GitHub 上看不到分组效果,只剩原始标题列表
- 锚点链接仍依赖标准标题转义规则(中文变拼音+小写+去标点),但分类标题本身不会产生新锚点,点击后跳转位置可能错乱
-
Markdown All in One的markdown.extension.toc.includeLevel只控制层级范围,不能过滤含特定字符串的标题——别指望靠它实现“只显示 API 相关条目”
真正要落地分类,得接受:要么写脚本预处理,要么在发布流程里加构建步骤,VSCode 插件层做不到。











