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

VSCode 默认就能自动补全 HTML 结束标签,装插件反而容易出问题——关键在配置是否干净、语言模式是否正确、有没有被 Emmet 或 Prettier 暗中关掉。
html.autoClosingTag 设为 true 是最简解法
VSCode 1.84+ 内置了 html.autoClosingTag,默认就是 true,只要没手动关掉,<div> 输入 > 就该立刻补出 </div>。失效时别急着装插件,先查这个开关。
- 按
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> 块),原生闭合就完全不触发。VSCode 不会“猜”你在写 HTML。
- 看编辑器右下角状态栏,确认显示的是
HTML,不是别的 - 如果不是,点击它 → 选择
Configure File Association for '.xxx'→ 设为HTML - 对
.vue文件,<template lang="html">内部才走 HTML 模式;若写成lang="pug"或没声明lang,则不生效 -
.jsx或.tsx中的<div>属于 JSX 语法,原生 HTML 补全不接管,得靠 ESLint + Prettier 校验结构
Emmet 和 Prettier 是最常踩的坑
Emmet 的 emmet.triggerExpansionOnTab 和 Prettier 的 prettier-vscode 插件,都会劫持 > 的输入行为,导致你敲完 <div> 按 > 后什么也不发生,甚至光标跳到奇怪位置。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
立即学习“前端免费学习笔记(深入)”;
- 临时验证:新建一个
.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>、<style> 的闭合,或 Vue/JSX 文件中非 <template> 区域的 HTML 片段。但它和原生功能冲突,装了反而要关掉 html.autoClosingTag。
- 需要支持
<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 里的隐藏覆盖项,任何一个出问题,> 就沉默。建议从空项目开始,逐个禁用扩展验证,比堆插件更省时间。


















