Emmet Tab 补全失效主因是配置未启用或冲突:需确保"emmet.triggerExpansionOnTab": true、语言模式为HTML、重载窗口;语义标签需开启"html.suggest.html5": true;格式化插件可能劫持光标位置。

按 Tab 键没反应?先确认 Emmet 是否真正启用
输完 <di></di> 按 Tab 却没补全成 <div></div>,大概率不是插件没装,而是 Emmet 的触发开关被关了。VS Code 默认开,但远程开发、WSL 或某些企业镜像会重置为关闭状态。
-
"emmet.triggerExpansionOnTab": true必须存在且为true;设成false或删掉这一行,<di></di>+ Tab 就完全失效 -
"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFiles"不能是"never",否则连基础提示都不出现 - 改完 settings.json 后,必须执行
Developer: Reload Window(快捷键 Ctrl+Shift+P 输入后回车),热重载不生效 - 右下角语言模式必须是
HTML;如果是Plain Text或Vue,Emmet 默认不响应——.vue文件需额外加"emmet.includeLanguages": {"vue-html": "html"}
输入 ! 或 html:5 没生成骨架?检查语言模式和缩写支持
在空 HTML 文件第一行输入 ! 或 html:5,按 Tab 应该直接输出完整 HTML5 结构。如果没反应,不是缩写写错,而是 Emmet 根本没加载该上下文。
- 确保当前文件已保存为
.html后缀,或手动点击右下角语言模式选HTML -
html:5是旧式写法,VS Code 当前更认!;两者都无效时,大概率是"emmet.syntaxProfiles"被误覆盖,删掉这一项即可 - 若只在部分项目失效,检查工作区
.vscode/settings.json是否有冲突配置,它会覆盖全局设置 - 不要依赖插件“HTML Snippets”来实现这个功能——它和 Emmet 冗余,还可能干扰原生行为
想补语义化标签如 <header></header>,但只出来 <div>?打开 HTML5 语义建议
<p>输入 <code><he></he> 按 Tab 只提示 不提示 <header></header>,是因为语义化标签补全是独立开关控制的,和基础缩写无关。
-
"html.suggest.html5": true 必须开启,否则 <nav></nav>、<main></main>、<section></section> 等不会进补全列表
- 这个设置不影响“能不能补”,只影响“补哪些”;即使它是
false,<div> 和 <code><p></p> 仍可补全
- 搭配 CodeGeeX 使用时,
"codegeex.languageSupport": ["html"] 也得加上,否则语义标签不会进 AI 补全候选
- 注意:VS Code 1.84+ 对
<template></template> 块内语义标签支持变弱,建议在纯 .html 文件中验证
补全出来了,但光标卡在错误位置或自动缩进乱掉?关掉格式化劫持
常见现象:输入 <div> + Tab,补出 <code><div></div> 后光标停在中间,但回车换行后缩进错两层,甚至多出空格。这不是补全逻辑问题,而是格式化插件抢了控制权。
立即学习“前端免费学习笔记(深入)”;
- 临时禁用 Prettier、Beautify 或 ESLint 插件,测试是否恢复——90% 的光标错位由此引发
- 关掉
"editor.formatOnType": true,尤其在写模板时;保留 "editor.formatOnSave": true 更安全
-
"editor.tabSize" 必须设为明确数字(如 2),不能留空或写 "auto",否则不同插件对缩进理解不一致
- 如果用了 Auto Close Tag 插件,务必设
"html.autoClosingTag": false,否则和内置闭合逻辑打架,导致双补全或光标跳飞
补全本身不难配,难的是多个开关、插件、语言模式、工作区设置之间互相覆盖。最稳妥的做法:删掉所有自定义 settings.json,只留三行——"emmet.triggerExpansionOnTab": true、"html.suggest.html5": true、"editor.quickSuggestions": {"other": true, "strings": true},再逐个加回其他配置,边加边验证。
"html.suggest.html5": true 必须开启,否则 <nav></nav>、<main></main>、<section></section> 等不会进补全列表false,<div> 和 <code><p></p> 仍可补全
"codegeex.languageSupport": ["html"] 也得加上,否则语义标签不会进 AI 补全候选<template></template> 块内语义标签支持变弱,建议在纯 .html 文件中验证补全出来了,但光标卡在错误位置或自动缩进乱掉?关掉格式化劫持
常见现象:输入 <div> + Tab,补出 <code><div></div> 后光标停在中间,但回车换行后缩进错两层,甚至多出空格。这不是补全逻辑问题,而是格式化插件抢了控制权。
立即学习“前端免费学习笔记(深入)”;
- 临时禁用 Prettier、Beautify 或 ESLint 插件,测试是否恢复——90% 的光标错位由此引发
- 关掉
"editor.formatOnType": true,尤其在写模板时;保留"editor.formatOnSave": true更安全 -
"editor.tabSize"必须设为明确数字(如2),不能留空或写"auto",否则不同插件对缩进理解不一致 - 如果用了 Auto Close Tag 插件,务必设
"html.autoClosingTag": false,否则和内置闭合逻辑打架,导致双补全或光标跳飞
settings.json,只留三行——"emmet.triggerExpansionOnTab": true、"html.suggest.html5": true、"editor.quickSuggestions": {"other": true, "strings": true},再逐个加回其他配置,边加边验证。



















