补全不生效是因为 html.suggest.html5、emmet.triggerExpansionOnTab、emmet.showExpandedAbbreviation 三项设置为 false,且语言模式未设为 HTML。

补全不生效,不是插件没装,而是几个关键开关被关了——html.suggest.html5、emmet.triggerExpansionOnTab、emmet.showExpandedAbbreviation 这三项必须为 true,且右下角语言模式得是 HTML。
为什么输 <di> 不提示 <code><div>
<p>最常见原因是 <code>emmet.showExpandedAbbreviation 被设成了 "never"。这个设置一关,Emmet 就彻底沉默,连初始标签提示都消失。
- 必须设为
"inMarkupAndStylesheetFiles" 或 "always"
- 它和
html.suggest.html5 是两套逻辑:html.suggest.html5 控制语义标签(如 <header></header>)是否出现在提示列表里;emmet.showExpandedAbbreviation 决定“输入缩写后是否弹出补全建议”
- 如果只开
html.suggest.html5 但关了 Emmet 提示,你敲 <di> 仍看不到任何建议</di>
为什么按 Tab 不展开 ul>li*3
"inMarkupAndStylesheetFiles" 或 "always"
html.suggest.html5 是两套逻辑:html.suggest.html5 控制语义标签(如 <header></header>)是否出现在提示列表里;emmet.showExpandedAbbreviation 决定“输入缩写后是否弹出补全建议”html.suggest.html5 但关了 Emmet 提示,你敲 <di> 仍看不到任何建议</di>
ul>li*3
emmet.triggerExpansionOnTab 必须为 true,且当前文件语言模式必须是 HTML。VS Code 的 Emmet 不响应 Enter 或空格,只认 Tab。
- 检查
emmet.includeLanguages:如果是.vue文件,需加"vue": "html";.js里写模板字符串,要配"javascript": "html" - 别被
emeraldwalk.runonsave这类插件劫持 Tab 键——它可能拦截按键,导致缩写根本没传给 Emmet - 按 Ctrl+Space(macOS 是 Cmd+Space)手动唤出补全菜单,能快速验证是不是 Emmet 没激活
为什么 <my-button></my-button> 这种自定义标签不提示
VS Code 原生 HTML 补全对 Web Component 完全无感。它不认识 size、theme 这类自定义属性,也不会提示组件名。
立即学习“前端免费学习笔记(深入)”;
- 必须通过
html.customData注入 JSON Schema 描述文件 - Schema 里要明确定义标签名、属性名、类型、是否必需等字段,否则补全引擎无法识别
- 配置路径必须是相对项目根目录的,比如
./custom-elements.json,不能用绝对路径或 URL - Vue/Svelte 中的
<template></template>区域由 Volar / Svelte for VS Code 插件接管,原生html.customData在那里无效
为什么补全后光标卡在错误位置或缩进错乱
本质是补全、格式化、缩进三者策略冲突。尤其当 editor.formatOnType 开着,又用了 Prettier,补全一完成就立刻触发格式化,光标常被重置到行首或嵌套错位。
- 临时关掉
editor.formatOnType,观察补全行为是否恢复正常 -
editor.tabSize必须设为固定值(如 2),避免不同文件缩进逻辑打架 -
html.format.indentInnerHtml设为 true 可让内部统一多缩进一级,但若同时开了 Prettier,它会覆盖该设置——此时应统一交给 Prettier 管理 -
html.autoClosingTag和 Auto Close Tag 插件冲突:VS Code 1.84+ 内置该功能,再装同名插件反而互相压制,建议二选一
最容易被忽略的是语言模式——哪怕只在一个 .vue 文件里写 <template></template>,右下角显示的是 vue 而不是 HTML,所有基于 HTML 模式的补全规则就全部失效。点一下状态栏手动切过去,比调十次 settings.json 更快见效。



















