markdown目录不自动更新是因为插件仅在保存文件或手动执行命令时解析标题,不实时监听编辑;需确保已保存、标题格式规范(#开头无空格)、配置headinglevels支持所需层级,并用[toc]占位符配合create table of contents命令生成。

为什么 Markdown 目录总不更新?
不是插件坏了,而是你没触发它的刷新机制。VSCode 本身不监听标题变更,依赖插件主动解析——Markdown All in One 默认只在保存文件(Ctrl+S)或手动执行命令时生成/更新目录,不会实时响应编辑过程中的标题增删改。
常见错误现象包括:改完标题后目录链接仍指向旧锚点、新增 ## 级标题但目录里没出现、点击目录项跳转失败(URL 锚点含中文或空格未编码)。
- 确保文档已保存,未保存的修改不会被插件读取
- 检查标题行是否以纯
#开头,前后不能有空格或不可见字符(如零宽空格) - 避免在标题中使用特殊符号(如
&、?),它们会导致锚点生成异常;插件会自动转义,但部分旧版本处理不一致 - 若用的是
Markdown Preview Enhanced,需确认其 TOC 设置中启用了updateOnSave
如何让目录自动插入到指定位置?
Markdown All in One 的 Create Table of Contents 命令默认插入到光标当前位置,而不是固定头部。如果你希望每次都在 ## 目录 下方生成,得先手动写好这个标题并把光标停在它后面再执行命令。
更稳妥的做法是用代码片段(snippets)固化结构:
"toc": {
"prefix": "toc",
"body": [
"## 目录",
"",
"[TOC]",
""
],
"description": "插入标准目录占位符"
}
这样输入 toc + Tab 就能快速补全,后续再执行 Create Table of Contents,插件会识别 [TOC] 并原地替换为实际目录内容。
-
[TOC]是该插件约定的占位符,不是所有 Markdown 渲染器都支持,仅对插件生效 - 不要手动修改生成后的目录链接(如删掉括号里的锚点),否则下次更新会被覆盖
- 若文档已有手写目录,插件不会合并,而是整段替换——建议清空后再生成
多级标题深度不够?检查插件配置项
默认情况下,Markdown All in One 只解析 # 到 ###(三级),更高层级(#### 及以上)不会出现在目录里。这不是 bug,是可调配置项。
打开 settings.json,添加或修改:
"markdown-all-in-one.headingLevels": 6
这个值必须是数字,范围是 1–6,对应 # 至 ######。改完不用重启,保存即生效。
- 设为
1时,只有#标题进目录,适合极简文档 - 设太高(如 6)会让目录过长,尤其当文档大量使用
#####做小节分隔时 - 注意:该设置影响所有 Markdown 文件,无法按单个文件单独配置
侧边浮动目录面板怎么启用?
Markdown All in One 自带一个隐藏功能:侧边 TOC 面板。它不依赖预览窗口,独立悬浮,滚动时自动高亮当前章节——但默认关闭,且没有 UI 开关。
启用方式很简单,在命令面板(Ctrl+Shift+P)里输入并执行:
Markdown All in One: Toggle Sidebar TOC
- 首次启用后,面板默认停靠在右侧;拖动标题栏可调整位置或停靠到左侧
- 面板宽度不能缩得太窄,否则文字会折叠成省略号,失去导航意义
- 关闭方式同上,再次执行同一命令即可;关闭后状态不保存,下次打开文件还得手动开一次
这个面板真正有用的地方在于:当你同时编辑多个 Markdown 文件时,它不会随焦点切换而重载——只要没关,就一直显示当前活动文档的结构。但别指望它跨文件同步,每个标签页的 TOC 是隔离的。











