eslint + volar 组合在 vue 文件中不报错,根本原因是 vetur 未卸载导致冲突、语言模式未识别为 vue、缺少 tsconfig.json/jsconfig.json 致类型推导失败,或 eslint 自动修复配置缺失/规则不可修复。

ESLint + Volar 组合为什么在 Vue 文件里不报错?
Vue 单文件组件(.vue)的语法解析和类型检查,依赖语言服务器正确识别 <template></template>、<script setup></script> 和 <style></style> 三块区域。Vetur 已停止维护,若仍启用它,会与 Volar 冲突,导致 ESLint 无法读取 <script></script> 中的 TypeScript 代码,自然不触发修复。
实操建议:
- 卸载 Vetur,安装
Volar(由 Vue 官方维护)和TypeScript Vue Plugin (Volar) - 在 VSCode 设置中关闭
vetur.validation.template和vetur.validation.script - 确认右下角语言模式是
Vue(不是HTML或Plain Text),否则 Volar 不激活 - 项目根目录必须有
tsconfig.json或jsconfig.json,否则 Volar 无法推导类型,ESLint 的@typescript-eslint规则就“看不见”错误
保存时 source.fixAll.eslint 没反应?检查这三个地方
VSCode 的自动修复不是“装了插件就生效”,它需要语言服务、规则可修复、以及明确的触发开关三者同时满足。常见静默失败,往往卡在其中一环。
实操建议:
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools,在 Console 里搜eslint,确认看到ESLint server started - 检查
settings.json是否同时配置了:"editor.codeActionsOnSave": { "source.fixAll.eslint": true },且没有被 workspace 级设置覆盖 - 确认项目本地已安装
eslint和@typescript-eslint/eslint-plugin(非全局安装),否则 VSCode 插件找不到可执行的eslint --fix逻辑 - 某些规则(如
no-unused-vars)默认不可自动修复,需在.eslintrc.cjs中显式设为"fixable": "code"才生效
Auto Rename Tag 在 <template></template> 里失效怎么办?
这个插件只作用于被 VSCode 正确识别为 HTML-like 语法的区域。Vue 的 <template></template> 块是否能被处理,完全取决于 Volar 的语法高亮输出是否包含标准的 text.html.basic scope。如果 scope 断了,插件就“看不见”标签。
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
实操建议:
- 在
.vue文件任意位置按Ctrl+Shift+P→ 输入Developer: Inspect Editor Tokens and Scopes,把光标放在<div> 上,看右侧是否显示 <code>text.html.basic;若显示meta.tag.any.html或空白,说明 Volar 未正常注入 HTML 语法层 - 确保
settings.json中启用了:"auto-rename-tag.activationOnLanguage": ["vue"] - 禁用所有其他 Vue 相关插件(尤其是旧版 Vetur、Vue Peek),避免语法解析抢占
- 重启 VSCode 并重新打开工作区(不是仅重载窗口),Volar 需要完整初始化语言服务器
- 先确认右下角语言模式是
Vue,再按Ctrl+Shift+P→Change Language Mode→ 强制选一次Vue - 在
settings.json中添加:"cSpell.enableFiletypes": ["vue", "javascript", "typescript", "html"] - 临时在文件顶部加一行
// spell-checker: disable,保存后再删掉——如果这时突然开始标红,说明之前被项目级cspell.json或 workspace 设置全局禁用了 - 中文拼写需额外开启:
"cSpell.allowCompoundWords": true,否则“用户名”“登录页”这类词会被拆开误判
Code Spell Checker 为何漏检 <p>wroong</p>?
拼写检查不是靠字符串字面量匹配,而是依赖语法高亮器(TextMate grammar)提供的 scope 范围。如果 <template></template> 内容没被识别为 string 或 comment,插件就跳过——这在 Vue 文件中极其常见,尤其当 Volar 未加载或语言模式错误时。
实操建议:
Inspect Editor Tokens and Scopes 看清 VSCode 实际“看见”了什么。










