Vue属性补全失效的根源在于VS Code未将.vue文件的<template>块识别为HTML上下文,需通过emmet.includeLanguages显式绑定"vue-html": "html"和"vue": "html",并确保emmet.triggerExpansionOnTab启用且光标位于模板区域内。

Vue 属性补全失效,不是插件没装,而是 VS Code 没把 <template> 当 HTML 看——关键在语言模式识别和 Emmet 显式绑定。
为什么 v-bind、@click 在 .vue 里不提示?
VS Code 默认只对纯 .html 文件启用 Vue 相关指令补全。当你打开 App.vue,右下角显示的是 Vue 或 Vue (Volar),而非 HTML,此时原生 HTML 补全(含 Vue 指令缩写)被绕过。Volar 虽提供语法高亮和类型检查,但默认不接管 Emmet 的标签/属性展开逻辑。
- 输入
v-b按Tab没反应?说明 Emmet 没激活 -
<div v-后没弹出指令列表?语言模式未映射到 HTML - 即使装了 Vetur/Volar,若没配
emmet.includeLanguages,补全仍断链
emmet.includeLanguages 必须手动加这两行
这是最常漏掉的配置项。仅靠插件自动识别不够,必须显式告诉 VS Code:.vue 文件里的模板部分,等同于 HTML 上下文。
打开 settings.json,加入:
立即学习“前端免费学习笔记(深入)”;
"emmet.includeLanguages": {
"vue-html": "html",
"vue": "html"
}
-
vue-html是 Volar 为<template>块分配的内部语言 ID,不是随便写的字符串 -
vue是旧版 Vetur 或某些场景下的 fallback,保留更稳妥 - 删掉
"html": "html"这类冗余项,它不解决 Vue 文件问题
补全触发失败?检查 emmet.triggerExpansionOnTab 和语言模式
就算配置了 includeLanguages,如果 emmet.triggerExpansionOnTab 是 false,或者你当前光标不在 <template> 区域,Tab 依然不会展开缩写。
- 确保
"emmet.triggerExpansionOnTab": true已启用(默认开启,但易被其他插件覆盖) - 在
.vue文件中,将光标定位到<template>内,点击右下角语言标识,确认显示的是Vue HTML或Vue (Volar)—— 不是Plain Text或Vue单独一项 - 输入
div后按Tab,若生成<div></div>,说明 Emmet 已就位;再试v-if,应提示v-if=""并可 Tab 补全值
单引号/双引号自动闭合失效?别动 files.associations
网上有方案让 "*.vue": "html",这会破坏 <script> 和 <style> 的语法高亮与类型检查,属于误伤式修复。
正确做法是保持语言模式为 Vue,只修正模板区域的括号行为:
- 确保
"editor.autoClosingQuotes": "always"(默认开启) - 添加
"html.autoClosingTag": true(控制标签闭合,非引号) - 若单引号仍不闭合,检查是否被 Prettier 或 Volar 的格式化规则干扰:临时禁用
editor.formatOnType测试
真正容易被忽略的是:Volar 的 vue.html 语言模式本身支持引号自动闭合,但前提是它被正确加载——而这个加载依赖 emmet.includeLanguages 配置生效且没有语法错误打断语言服务启动。


















