vscode html自动闭合标签生效需满足三前提:html.autoclosingtag为true(默认但易被覆盖)、右下角语言模式确为html(非vue/plain text等)、禁用auto close tag插件及干扰源如emmet或prettier。

html.autoClosingTag 为 true 是前提,不是可选项
VSCode 默认开启 HTML 标签自动闭合,但很多人实际没生效,根本原因就是这个配置被设成了 false 或被工作区设置覆盖。别信 GUI 界面里那个勾选框——它可能只是缓存状态。直接打开 Preferences: Open Settings (JSON),搜 "html.autoClosingTag":如果存在且值为 false,删掉这行或改成 true;如果压根没这行,说明是默认值 true,不用动;如果同时出现 true 和 false(比如全局和工作区冲突),后者生效,得删掉冲突项。
右下角语言模式必须是 HTML,不是 Vue 或 Plain Text
这是最常被忽略的硬性前提:html.autoClosingTag 只对语言 ID 为 html 的文件生效。新建未保存文件默认是 Plain Text,自动闭合完全不触发;保存为 .html 后,右下角状态栏必须显示 HTML,不是 HTML (EJS)、Vue 或 PHP。点右下角文字可手动切换;如果点开后没有 HTML 选项,检查 files.associations 是否把 *.html 错配成其他语言 ID。在 .vue 或 .jsx 文件里,它天然无效——那些语言 ID 是 vue-html 和 javascriptreact,不是 html。
Auto Close Tag 插件在 VSCode 1.84+ 上基本失效
装了 Auto Close Tag(作者 Jun Han)反而会让行为更不可靠:html.autoClosingTag 设为 true 时,插件会被静默禁用,状态栏看不到 ACT 图标,但仍在后台加载。更麻烦的是,插件和原生逻辑对 <script></script>、<style></style> 的处理方式不同,容易补错或漏补。建议直接卸载该插件,或至少确保 html.autoClosingTag 为 true 并禁用插件。唯一值得换插件的场景是需要 <script></script>、<style></style> 补全——原生不支持,而插件开启 "auto-close-tag.SublimeTextMode": true 后可做到。
Emmet 和 Prettier 是最常见的干扰源
即使配置全对,以下几项仍会让闭合“看似失效”:
• emmet.triggerExpansionOnTab 开启后会劫持 > 键行为,导致输入 <div> 后敲 <code>> 没反应,临时验证可把它设为 false;
• prettier.disableLanguages 如果包含 "html",Prettier 保存时可能删掉自动生成的闭合标签;
• editor.autoClosingBrackets 设成 "always" 会干扰 HTML 特有逻辑,推荐设为 "languageDefined";
• editor.formatOnType 开启时,补全后立刻触发格式化,光标容易卡住或缩进错乱。
真正麻烦的不是开不开,而是原生闭合、Emmet 展开、Prettier 格式化、Volar 语言服务这几层机制叠加后行为不可预测——任何一个环节错位,光标就卡在不该卡的地方。











