vscode中markdown大纲不显示,首要原因是文件未被识别为markdown语言模式,需检查右下角状态栏并修正后缀或编码;其次确保标题使用合法atx语法(#开头、无全角符号、无行尾空格、不含未转义html或代码块内);frontmatter和代码块内容会被忽略;中文标题跳转需启用"markdown.preview.enableextendedautolinks";大纲更新需保存文件或手动触发重载。

VSCode里Markdown文件没大纲?先确认语言模式和文件后缀
大纲(Outline)面板不出现,90%是因为VSCode根本没把当前文件识别为Markdown。右下角状态栏看语言模式——如果不是Markdown,点击它手动选;如果显示Plain Text或Text,说明文件后缀不是.md或.markdown,或者文件编码不是UTF-8。VSCode 1.80+默认启用markdown.preview.enabled,但这个开关只影响预览,不影响Outline解析。
标题写法不对,大纲就“看不见”
VSCode大纲只认ATX风格标题(#开头),且格式极其严格:
-
# 标题前面不能有空格或制表符(顶格或仅1个tab可接受) -
## 标题行尾带空格 → 大纲里可能显示为空节点,甚至导致后续标题错位 - 用全角
#(U+FF03)代替ASCII#→ 完全不识别 -
# 标题 <strong>加粗</strong>或含未转义HTML → 解析中断,后续标题可能集体消失 - Setext式标题(
章节名\n===)→ Outline直接忽略
验证方式:按Ctrl+Shift+P输入Developer: Toggle Developer Tools,在Console里执行vscode.workspace.textDocuments.find(d => d.fileName.endsWith('.md'))?.languageId,返回'markdown'才算语言识别成功。
大纲面板开了但内容为空?检查frontmatter和代码块干扰
VSCode大纲解析器会跳过YAML frontmatter区域(---之间的内容)和所有代码块(```包裹的部分)。如果你的标题写在frontmatter里,比如:
--- title: # 这不是标题 --- <h1>真正的标题</h1>
那只有最后一行# 真正的标题会被纳入大纲。另外,如果整个文件被```包围(比如你误把Markdown当代码粘贴进代码块),Outline也会变空——它只解析顶层文本流,不进代码块。
想让中文标题生成可点击链接?得开扩展开关
原生大纲支持中文标题显示,但点击跳转失败常因markdown.preview.enableExtendedAutolinks关闭。这个设置控制是否把中文标题自动转成锚点ID(如#第一章-vscode-markdown目录功能概述)。不开它,大纲里标题虽在,点击却无响应。打开方式:Ctrl+, → 打开settings.json → 加入"markdown.preview.enableExtendedAutolinks": true。注意:该选项只对预览内跳转有效,Outline面板本身的点击跳转依赖编辑器底层定位逻辑,只要标题语法合法,通常没问题。
真正容易被忽略的是:大纲不刷新不会自动重载——改完标题后,必须保存文件(Ctrl+S)或手动聚焦到标题行再移开,Outline才会更新。它不监听未保存的编辑缓冲区变化。











