VS Code HTML 代码片段生效需同时满足三条件:语言模式为 html、html.json 中含 "language": "html" 且 JSON 合法、编辑器进程彻底重启;缺一不可。

VS Code 的 HTML 代码片段不会自动生效,必须满足三个硬性条件:语言模式匹配、JSON 结构合法、编辑器进程已刷新缓存。缺一不可。
html.json 必须显式声明 "language": "html"
很多人把 snippet 写进 javascript.json 或全局 snippets.code-snippets,结果在 .html 文件里完全不触发——VS Code 只加载当前语言模式对应的文件,不看文件后缀,只认右下角显示的 language ID。
- 打开命令面板(
Ctrl+Shift+P),输入Preferences: Configure User Snippets,**必须选html**,不是“New Global Snippets File” - 生成的文件名是
html.json,内容开头要包含"language": "html"字段(VS Code 有时会漏掉,需手动补) - 如果项目里用
.vue或.svelte,HTML 片段默认不生效;需单独配vue.json或svelte.json
body 中双引号和 & 必须转义
未转义的 " 或 & 会让整个 JSON 解析失败,VS Code 不报错,但 snippet 直接静默失效。
-
"body": ["<div class='\"container\"'>$1</div>"]✅ 正确:双引号写成\" -
"body": ["<script>console.log(\"ok\")</script>"]✅ 含 script 也需转义 -
"body": ["<p>1 & 2</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/skill5806" title="html-deploy"><img src="https://img.php.cn/upload/skill/000/000/081/179066538882434.jpg" alt="html-deploy" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/skill5806" title="html-deploy">html-deploy</a> <p>使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。</p> </div> <a href="/xiazai/skill5806" title="html-deploy" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p>"]❌ 错误:&是 HTML 实体,在 JSON 字符串里应写为\&;更稳妥的是直接写\&(因为 VS Code 插入时按纯文本处理) - 别在
body里写// 注释—— JSON 不支持注释,整段 snippet 会被跳过
占位符编号必须连续且不能嵌套
$1、$2 是光标跳转顺序,VS Code 严格校验编号逻辑。跳号或嵌套会导致跳转中断,甚至插入空白。
- 正确:
"body": ["<header>$1</header>", "<main>$2</main>", "$0"]→ Tab 依次停在 header 内容、main 内容、最后位置 - 错误:
"body": ["<div>${1:${2:value}}</div>"]→ 嵌套占位符,整个body被忽略 - 错误:
"body": ["<div>$2</div>"]→ 没有$1,VS Code 不启动跳转机制,光标直接停在行首 -
$0是最终停留点,不是可选终点;建议总把它放在结构末尾或 JSX/HTML 内容区,方便立刻输入子节点
改完 html.json 必须彻底重启 VS Code
VS Code 对 snippet 缓存极强。仅保存文件、关闭标签页、甚至重开编辑器窗口都不够——旧进程还在内存里,新配置根本加载不上。
- 关闭所有已打开的
.html文件(包括预览中的) - 退出 VS Code 进程:Windows 查任务管理器杀
Code.exe,macOS 运行killall -9 Electron - 重新启动 VS Code,新建一个空
.html文件,输入你设的prefix+Tab测试 - 如果仍不生效,右下角点击语言标识,确认显示的是
HTML(不是Plain Text或Auto Detect)
最常被跳过的环节是进程清理和语言模式确认;很多人花半小时调 JSON 格式,其实问题出在没真正重启编辑器,或者状态栏上静静躺着一个 “Plain Text”。


















