Markdown All in One 生成静态 TOC 且不自动更新,需手动重生成;Auto Markdown TOC 通过标记实现局部更新,适配 Git 工作流;markdown-toc CLI 适合自动化集成但无实时预览;仅 Markdown Preview Enhanced 提供浮动侧边目录面板。

Markdown All in One 适合日常写作但不支持自动更新 TOC 区域
它提供 Create Table of Contents 命令,执行后在光标处插入静态目录,但不会监听后续标题变更。如果你频繁增删章节,每次都要手动删旧目录再重新运行命令——它不自动刷新,只是“生成一次”。
常见错误现象是:改完标题后点击目录链接跳转失败,因为锚点名变了(比如中文标题转成 %E7%AE%80%E4%BB%8B),而旧目录里的链接没同步。
参数差异上,它默认解析 # 到 ###### 全部六级标题,可通过设置 markdown.extension.toc.levels 限制范围,例如设为 "2..4" 就只纳入 H2–H4。
Auto Markdown TOC 支持标记驱动更新,适合大型文档协作
它依赖你在文档中写入特定标记,比如 [toc] 或 <!-- toc -->...,然后运行 Update TOC 命令,只替换该标记区间内容。这种机制天然适配 Git 工作流——CI 脚本也能识别标记并调用 CLI 更新,避免误改人工编写的说明文字。
容易踩的坑是:标记必须独占一行且无前后空格,否则插件无法定位;另外它默认忽略以 <!-- omit in toc --> 开头的标题行,但这个注释要严格放在标题正上方,不能隔空行。
性能影响小,但对多级嵌套标题的缩进逻辑较保守,H6 标题可能被压平显示,不如 Markdown TOC 插件灵活。
命令行工具 markdown-toc 更适合自动化集成而非编辑器内实时使用
markdown-toc -i README.md 这类 CLI 工具本质是单次文本处理,没有语言服务、不参与 VSCode 编辑生命周期。它的优势在于可嵌入 pre-commit 钩子或 GitHub Actions:
- 支持批量处理多个文件
- 可指定插入位置(顶部 / [toc] 标记处)
- 输出格式稳定,不依赖 UI 状态
但缺点也很直接:你不能在编辑过程中实时看到目录变化,也无法点击跳转预览;如果文档里有非标准标题语法(如 ## 某标题 {#custom-id}),它默认忽略自定义锚点,仍按标题文本生成链接。
兼容性方面,它输出的是纯 Markdown,和所有渲染器一致,但不处理 HTML 标签混排的标题行——遇到 ## <span>标题</span> 就会漏掉。
侧边浮动目录面板不是所有插件都提供,别默认期待
目前只有 Markdown Preview Enhanced 提供常驻右侧的浮动大纲视图,能随滚动高亮当前章节,但它生成的不是可编辑的 Markdown 目录,而是只读导航栏。如果你需要导出带目录的 PDF 或 HTML,得额外配置 Pandoc 或启用该插件的导出功能。
而 Markdown All in One 和 Auto Markdown TOC 都不提供此面板,它们只负责往文档里写链接列表。
容易被忽略的一点是:浮动目录依赖 VSCode 的预览服务,如果关闭了内置预览(比如用了第三方预览扩展),这个面板就失效——它不是独立进程,而是预览 WebView 的一部分。


















