vscode 默认支持 html 结束标签自动补全,关键在于启用 html.autoclosingtag、确保语言模式为 html,并禁用 emmet 或 prettier 对 > 键的劫持;插件仅用于原生不覆盖的场景。

VSCode 默认就能自动补全 HTML 结束标签,装插件反而容易出问题——关键在配置是否干净、语言模式是否正确、有没有被 Emmet 或 Prettier 暗中关掉。
html.autoClosingTag 设为 true 是最简解法
VSCode 1.84+ 内置了 html.autoClosingTag,默认就是 true,只要没手动关掉,<div> 输入 <code>> 就该立刻补出
。失效时别急着装插件,先查这个开关。
- 按
Cmd + ,(macOS)或 Ctrl + ,(Windows/Linux)打开设置
- 搜索
html.autoClosingTag,确认复选框已勾选
- 如果发现值是
false,点一下把它设回 true
- 顺手检查
HTML › Suggest: Html Tags 和 Editor › Quick Suggestions › Other 是否也开着
右下角语言模式不是 HTML 就白配
即使 html.autoClosingTag 开着,如果当前文件被识别成 Plain Text、PHP 或 Vue(非 <template></template> 块),原生闭合就完全不触发。VSCode 不会“猜”你在写 HTML。
anything-to-html
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
下载
- 看编辑器右下角状态栏,确认显示的是
HTML,不是别的
- 如果不是,点击它 → 选择
Configure File Association for '.xxx' → 设为 HTML
- 对
.vue 文件,<template lang="html"></template> 内部才走 HTML 模式;若写成 lang="pug" 或没声明 lang,则不生效
-
.jsx 或 .tsx 中的 <div> 属于 JSX 语法,原生 HTML 补全不接管,得靠 ESLint + Prettier 校验结构
<h3>Emmet 和 Prettier 是最常踩的坑</h3>
<p>Emmet 的 <code>emmet.triggerExpansionOnTab 和 Prettier 的 prettier-vscode 插件,都会劫持 > 的输入行为,导致你敲完 <div> 按 <code>> 后什么也不发生,甚至光标跳到奇怪位置。
- 临时验证:新建一个
.html 文件,输入 div> 然后按 Tab —— 如果补出 <div></div>,说明 Emmet 在工作,但压制了原生闭合
- 解决方法一:在设置里搜
emmet trigger,取消勾选 Emmet: Trigger Expansion On Tab
- 解决方法二:在
settings.json 里加两行:"emmet.triggerExpansionOnTab": false 和 "html.autoClosingTag": true
- 如果用了
prettier-vscode,加一句:"prettier.disableLanguages": ["html"],防止它保存时重写结构掩盖补全效果
Auto Close Tag 插件只在特定场景有用
这个插件不是用来替代原生功能的,而是补原生做不到的边角:比如 <script></script>、<style></style> 的闭合,或 Vue/JSX 文件中非 <template></template> 区域的 HTML 片段。但它和原生功能冲突,装了反而要关掉 html.autoClosingTag。
- 需要支持
<script></script> 闭合?在 settings.json 加:"auto-close-tag.SublimeTextMode": true
- 想在
.vue 文件里生效?加:"auto-close-tag.activationOnLanguage": ["vue", "html"]
- 装了插件但没反应?先关掉
html.autoClosingTag,再确认右下角语言模式是 HTML 或 Vue
- 补全后光标卡在错误位置?大概率是
editor.formatOnType 或缩进设置(如 editor.tabSize)和插件打架,建议关掉 formatOnType 单独用保存格式化
真正难调的从来不是“怎么开”,而是“谁关了它又不告诉你”——Emmet、Prettier、语言模式、settings.json 里的隐藏覆盖项,任何一个出问题,> 就沉默。建议从空项目开始,逐个禁用扩展验证,比堆插件更省时间。