VS Code HTML标签补全不生效需检查html.suggest.html5是否为true,Emmet失效需确认文件关联和Tab触发,自定义标签需配置html.customData指向JSON Schema。

VS Code 里 HTML 标签补全不生效?检查 html.suggest.html5 是否启用
默认情况下 VS Code 的 HTML 补全是开启的,但如果你装了某些禁用默认语言功能的插件(比如只留 Emmet 的轻量配置),html.suggest.html5 可能被关掉。这个设置直接控制原生标签、属性、全局事件(如 onclick)的提示是否出现。
打开设置(Ctrl+, 或 Cmd+,),搜索 html.suggest.html5,确保它为 true。也可以在 settings.json 中手动加一行:
"html.suggest.html5": true
- 关掉它后,
div、section这类语义标签不会出现在补全列表里,只剩 Emmet 缩写(如div→Tab)可用 - 即使启用了,
input的type="date"这类枚举值也不会自动提示——那是html.suggest.experimental.customHtml5控制的,目前仍属实验性,且仅部分 VS Code 版本支持 - 别混淆
html.autoClosingTag:它管的是输入<div>后自动补</div>,和补全提示是两回事
Emmet 补全失效?确认文件关联和触发方式是否匹配
Emmet 是 VS Code 默认 HTML 补全的核心引擎,但它依赖两个前提:当前文件被识别为 html 语言模式,且你用对了触发键。
- 右下角状态栏看语言标识,如果不是
HTML,点它 → 选择Configure File Association for '.xxx'→ 设为HTML - Emmet 默认只响应
Tab键(不是Enter或Space)。输入ul>li*3后按Tab才会展开;按Enter会换行,Space会插入空格并中断缩写 - 如果写到一半想补全(比如输
nav想看<nav></nav>),要先按Ctrl+Space唤出补全菜单,再选 Emmet 项——不能只靠Tab -
emmet.triggerExpansionOnTab必须为 true;若设为 false,Tab就只缩进,Emmet 彻底不工作
自定义属性或 Web Component 标签没提示?靠 html.customData 手动注入
原生 HTML 补全只覆盖标准规范,<my-button size="large"> 这种自定义元素或属性不会自动出现。必须通过 html.customData 注入 JSON Schema 描述。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
立即学习“前端免费学习笔记(深入)”;
新建 html-data.json,内容类似:
{
"version": 1.1,
"tags": [
{
"name": "my-button",
"description": "Custom button component",
"attributes": [
{ "name": "size", "values": ["small", "medium", "large"] }
]
}
]
}
然后在 settings.json 中指向它:
"html.customData": ["./html-data.json"]
- 路径是相对于工作区根目录的,不是相对于
settings.json文件本身 - JSON Schema 不支持正则或动态值,
size的可选值必须硬编码列出 - 改完
html-data.json后需重启 VS Code 或重载窗口(Ctrl+Shift+P→Developer: Reload Window),否则不生效 - 多个自定义数据源可写成数组:
["./html-data.json", "./web-components.json"]
Sublime Text 或 Vim 用户:别指望开箱即用,得配插件+配置
Sublime Text 默认只有基础标签名补全(如输 di 提示 div),无属性、无 Emmet。Vim 更原始,连 <div> 都要手敲。
- Sublime Text 装
Emmet插件后,输入ul>li*3+Tab才能展开;补全快捷键是Ctrl+Space,但默认只列标签,不列属性值 - Vim 需同时装
mattn/emmet-vim和tpope/vim-haml(后者提供部分 HTML 上下文感知),且要在.vimrc加let g:user_emmet_mode = 'a'才启用全部功能 - 这两款编辑器都不解析
customElements.define(),也没html.customData机制,想支持自定义标签只能靠手写 snippets 或外部脚本生成补全源


















