VS Code Markdown预览默认非实时,需开启markdown.preview.autoRefresh或插件对应开关;公式需启用math支持并空行;代码块高亮依赖准确语言ID;导出PDF/HTML应使用markdown-pdf等现代工具而非内置选项。

Markdown预览默认不实时刷新?关掉这个设置
VS Code 内置的 Markdown 预览默认是「点击刷新」或「保存后刷新」,不是 Typora 那种真·实时。很多人以为自己配置错了,其实是没开自动更新开关。
打开设置(Ctrl+, 或 Cmd+,),搜 markdown.preview.autoRefresh,确保它被勾选。这个选项在 VS Code 1.80+ 是默认开启的,但升级后可能被重置,尤其装过旧版插件时。
- 如果用了
Markdown All in One,它会覆盖这个行为——它的markdown.extension.preview.autoUpdate才是真正起作用的开关 - 某些远程开发环境(如 Codespaces)里,文件系统事件监听可能失效,此时即使开了自动刷新也无响应,得手动按
Ctrl+Shift+P→Markdown: Refresh Preview - 预览窗口右上角有个「同步滚动」图标,点它才能让编辑区和预览区滚动联动;不点的话,哪怕内容变了,视口也不会跟着动
数学公式渲染不出来?确认 LaTeX 渲染器已启用
VS Code 默认不解析 $$...$$ 或 \[...\] 这类 LaTeX 公式,必须靠插件或设置激活。最常见现象是公式显示为纯文本,甚至报错 MathJax is not defined。
推荐用官方支持的方案:安装 Markdown All in One 插件,并在设置里打开 markdown.extension.math.enabled。它底层调用的是 KaTeX(轻量、快),不是 MathJax(重、慢、需联网)。
- 不要手动引入
mathjax.js脚本——VS Code 的预览是沙盒环境,外部 script 标签会被忽略 - 公式块前后必须空行,否则解析器会跳过:
$$ E = mc^2 $$上下都得有空行 - 如果你用的是 GitHub 风格的
$$块,但预览里只显示单行,检查是否误用了$E = mc^2$(行内公式)却没关掉markdown.extension.math.inlineEnabled
代码块语法高亮失效?检查语言标识符拼写
Markdown 代码块的高亮依赖语言标识符(fence 后面那个词),拼错一个字母就变纯灰底白字。比如写成 pyhton、js、bash(正确应为 bash,但有人打成 sh 就不生效)。
VS Code 使用的是 TextMate 语法包,语言 ID 必须严格匹配。打开命令面板(Ctrl+Shift+P),运行 Developer: Inspect Editor Tokens and Scopes,把光标放在代码块里,就能看到当前识别的语言 ID 是什么。
-
json有效,JSON无效;typescript有效,ts无效(除非你额外装了ts别名插件) - 前端项目常用
html、css、javascript,注意不是js或HTML - 自定义语言(如
astro、qwik)需要对应语言扩展已安装,否则不管怎么写标识符都没高亮
导出 PDF 或 HTML 总失败?别用右键菜单里的“导出”
VS Code 内置预览右键菜单里的 Export to PDF 或 Export to HTML 实际调用的是一个老旧的、不维护的导出模块,依赖本地 PhantomJS(早已废弃),99% 情况下点完没反应或报错 spawn EACCES 或 PhantomJS not found。
靠谱做法是换工具链:用 markdown-pdf 插件(注意不是 Markdown PDF,后者已停更),或者直接用命令行工具 mdpdf(Node.js 工具,基于 Puppeteer)。
- 装
markdown-pdf后,右键菜单会出现新选项Markdown PDF: Export (pdf),它生成的是真实 PDF,支持目录、页眉页脚 - 如果导出 HTML 后样式乱了,大概率是 CSS 路径问题——VS Code 导出 HTML 时不会自动内联样式,要手动在设置里打开
markdown-pdf.includeDefaultStyles - 中文导出 PDF 出现方框?在
markdown-pdf.styles里加一条@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC');并确保字体加载成功
复杂点在于:预览、导出、同步滚动、公式、代码块,这五件事背后用的是四套不同机制,改一个设置经常影响另一个。最常被忽略的是插件之间的开关冲突——比如同时开了 Markdown All in One 和 markdown-preview-enhanced,它们会互相劫持预览服务,结果谁都不工作。











