根本原因是编辑器未识别HTML上下文:状态栏显示Plain Text/JavaScript/XML而非HTML,需点击右下角配置文件关联为HTML;文件后缀非.html、在script内/字符串/注释中、输入法劫持Tab键、VS Code中emmet.showExpandedAbbreviation设为"never"等均会禁用补全。

补全功能不是浏览器行为,而是编辑器特性;不启用对应语言模式或插件,<di输完永远不弹<div>。
为什么输入 <di 后没出现 <div> 提示?
根本原因不是“功能坏了”,而是编辑器没识别成 HTML 上下文:
- 右下角状态栏显示的是
Plain Text、JavaScript或XML,而非HTML—— 点击它,选Configure File Association for '.html'→ 设为HTML - 文件后缀不是
.html(比如是.txt、.vue或无后缀),Emmet 和原生补全均不激活 - 在
<script>标签内部、字符串字面量里(如let s = "<div";)或注释中输入<,补全被主动禁用 - 某些输入法(如搜狗、微软拼音)会劫持
Tab键,导致 Emmet 缩写无法展开 —— 切英文输入法再试
VS Code 中必须确认的三项设置
仅靠默认配置不够,尤其装了 Prettier、Auto Close Tag 等插件后容易覆盖原始行为:
-
"html.suggest.html5": true—— 关掉后,<main>、<section>这类语义标签不会出现在提示列表中 -
"emmet.triggerExpansionOnTab": true—— 关掉后,ul>li*3按Tab不展开,连带影响<di的初始提示 -
"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFiles"—— 若设为"never",<di输完直接静音,这是最常被误设的坑
这些都得写进 settings.json,不能只依赖 UI 勾选(UI 有时不同步)。
立即学习“前端免费学习笔记(深入)”;
Sublime Text 闭合逻辑与冲突点
它有两种机制共存,但互斥:原生 auto_close_tag 和插件 Emmet,选错就补全错乱:
- 只想要基础闭合(
<p>回车 →<p></p>):启用"auto_close_tags": true,并确保没装 Emmet 或已禁用 - 要缩写展开(
nav>ul>li*3)、嵌套结构、属性预置:必须关掉原生闭合("auto_close_tags": false),只用 Emmet - 自闭合标签如
<img>、<input>永远不补尾标签 —— 这是规范行为,不是 bug - 想让
div回车变成<div class=""></div>?这不是设置能开的开关,得写.sublime-snippet文件
补全后光标停在哪,其实由你控制
很多人抱怨“补全完还得手动跳到 class 引号里”,是因为没改 snippet 行为。Emmet 默认把光标放在标签内容区(<div>|</div>),但你可以强制它落到属性值内:
- 在 VS Code 中,修改
emmet.variables,加"_cssProperty": "class"类似字段(需配合自定义 snippet) - 在 Sublime 中,建
divc.sublime-snippet,内容用${1:container}定义 tab stop,${0}放光标出口 - 更直接的办法:补全后按
Ctrl+Space(Win/Linux)或Cmd+Space(macOS)唤出完整建议列表,用方向键选中带class的变体
真正容易被忽略的是:补全效果高度依赖当前作用域(是否在 <template> 内、是否在 JS 字符串中)、语言服务器是否就绪(CSS/JS 插件未启动时,class="" 里不提示类名),以及——你有没有在敲错语法时,还指望编辑器猜出你要什么。



















