VSCode 本身不生成目录,所有高效目录操作均依赖插件且需正确配置:必须确保文件语言模式为 Markdown、Markdown All in One 插件已启用并重启,命令为“Markdown: Create Table of Contents”,中文标题跳转失效需设 slugifyMode 为 vscode,updateOnSave 仅更新已有 [TOC] 块,侧边栏大纲需同时开启 explorer.experimental.showOutline 和 outline.automaticCollapse 为 false。

VSCode 本身不生成目录,所有“高效率目录操作”都依赖插件,且必须配合正确触发方式和配置,否则会失效或跳转错位。
为什么 Ctrl+Shift+P 输入 “Create Table of Contents” 没反应
这不是命令没注册,而是插件未激活或文件类型未识别:
- 确保当前打开的是
.md文件(不是.txt或无后缀文件),VSCode 必须将编辑器语言模式设为Markdown(右下角状态栏查看,点击可切换) -
Markdown All in One插件安装后需重启 VSCode 或重载窗口(Ctrl+Shift+P→Developer: Reload Window) - 部分工作区禁用了扩展:检查
.vscode/extensions.json是否有"recommendations"排除了该插件,或设置了"extensions.ignoreRecommendations": true - 命令名大小写敏感,实际命令是
Markdown: Create Table of Contents,输入时漏掉冒号或空格会导致匹配失败
生成的目录链接点不开,跳转到错误位置
这是锚点(anchor)生成规则与标题内容不一致导致的,常见于中文、符号、空格场景:
- VSCode 默认将标题转为小写、去标点、空格变短横(
-),例如## API 调用示例!→ 锚点为#api-调用示例,但手动写的链接若写成[API 调用示例](#API-调用示例)就会失效 - 避免在标题开头/结尾加空格、全角符号(如《》、【】)、emoji;若必须保留,建议用
id显式指定锚点:## API 调用示例 {#api-call},再在目录中链接到#api-call - 预览窗口中点击跳转正常,但编辑器内 Ctrl+Click 无效?确认开启了
markdown.extension.preview.followLink配置项(默认开启,但可能被用户配置覆盖)
如何让目录只包含 H2 和 H3,跳过 H1 和 H4+
靠手动删不现实,必须改插件配置,不同插件路径不同:
-
Markdown All in One:在settings.json中添加"markdown.extension.toc.levels": "2..3" -
Auto Markdown TOC:配置项为"auto-markdown-toc.levels": "2-3" - 注意:数字范围写法不通用,
"1..4"是 All in One 的语法,"1-4"是 Auto TOC 的语法,混用会导致配置被忽略 - 修改后无需重启,但已有目录需重新执行
Create Table of Contents才生效
保存文件后目录没自动更新,还得手动点一次
自动更新不是默认开启的,且仅对已存在的 [TOC] 区域生效,不是所有目录都能“热刷新”:
- 先确认你插入目录时用的是
[TOC]占位符(不是纯列表),All in One 只监听含[TOC]的段落并替换它 - 启用自动更新:设置
"markdown.extension.toc.autoUpdate": true - 该功能只在保存时触发,且仅当光标位于
[TOC]所在行或其附近才可靠;若目录被放在代码块、引用块或 HTML 注释里,会被跳过 - 大型文档(>500 行)可能因性能限制延迟更新,可临时提高超时阈值:
"markdown.extension.toc.updateDelay": 800(单位毫秒)
最常被忽略的一点:目录的“高效”不来自插件本身,而来自你是否让标题可预测、锚点可复现、配置项不冲突。一旦标题含动态内容(如日期、版本号)、或多人协作时各自用不同插件生成目录,链接断裂就几乎不可避免——这时候宁可手动维护一小段关键目录,也别迷信全自动。


















