配置项冲突导致插件静默失效,核心是settings.json中多个插件争抢同一控制权,如editor.defaultformatter被重复定义时vscode按“最后写入优先”覆盖且不报错;需检查各语言块是否唯一指定格式器id,并确认对应插件已启用、无状态脱节。

配置项冲突不是插件本身的问题,而是 settings.json 里多个插件争抢同一控制权导致的加载异常——比如两个插件都试图接管 editor.defaultFormatter,VSCode 会静默丢弃后加载的那个,但不报错,只让你觉得“Prettier 突然不工作了”。
检查 editor.defaultFormatter 是否被覆盖
这是最常被误配的字段。VSCode 不允许多个插件同时声明为某语言的默认格式器,它按“最后写入优先”覆盖,但不会提示冲突。
- 打开
settings.json(Ctrl+Shift+P→Preferences: Open Settings (JSON)) - 搜索
"editor.defaultFormatter"和带语言前缀的写法,如"[javascript]"、"[typescript]"、"[vue]" - 确认每个语言块只出现一次
"editor.defaultFormatter",且值是某个插件的 ID(如"esbenp.prettier-vscode") - 如果看到类似
"[javascript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }和"[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }并存,删掉其中一个
editor.formatOnSave 与插件启用状态不匹配
当 editor.formatOnSave 为 true,但对应语言的 defaultFormatter 插件被禁用或未安装,VSCode 不会报错,但保存时会静默跳过格式化——你以为插件坏了,其实是配置和状态脱节。
- 检查
editor.formatOnSave是否全局开启,再逐个确认它依赖的 formatter 插件是否启用(Ctrl+Shift+P→Developer: Show Running Extensions) - 对多语言项目,更稳妥的是关闭全局
editor.formatOnSave,改用语言专属配置,例如:"[json]": { "editor.formatOnSave": true },<br>"[typescript]": { "editor.formatOnSave": true } - 若用 ESLint 做格式化,必须同时设
"eslint.format.enable": true,否则即使defaultFormatter指向 ESLint,也不会触发
语言服务类配置重复注册(如 Vue 的 vue.preferences.useVolarForVue3)
Volar 和 Vetur 不能共存于 Vue3 项目;但 VSCode 不阻止你同时安装它们,只要 settings.json 里没明确约束,两者都会尝试激活,结果是语法高亮错乱、Go to Definition 跳转失败,甚至扩展宿主崩溃。
- 确认是否只启用一个 Vue 语言服务:禁用
octref.vetur(旧版),保留johnsoncodehk.volar(Vue3 官方推荐) - 在
settings.json中显式锁定行为:"vue.preferences.useVolarForVue3": true,<br>"vetur.validation.template": false
- 同理,TypeScript 项目中避免同时启用
ms-vscode.vscode-typescript-next和官方内置 TS 支持;后者已足够,前者容易因版本错位卡住启动
插件自定义配置项相互覆盖(如 Prettier + ESLint + EditorConfig)
三者都试图控制缩进、引号、分号等规则,但没有协调机制。VSCode 不合并它们的配置,而是按加载顺序覆盖——通常 ESLint 最晚生效,但它若没配 eslint-config-prettier,就会和 Prettier 冲突。
- 统一交由 ESLint 管理:禁用 Prettier 的自动格式化(
"prettier.enable": false),只保留其语法高亮能力 - 确保
eslint-config-prettier已安装并启用,它会关闭 ESLint 中所有和 Prettier 重叠的规则 - 删掉
.editorconfig文件或设"editor.codeActionsOnSave": { "source.fixAll": true },避免 EditorConfig 在保存时又插一脚 - 验证方式:打开一个 JS 文件,手动运行
ESLint: Fix all auto-fixable Problems,看是否能正确处理引号、结尾空行等——如果还报错,说明配置没对齐
真正难排查的不是报错,而是“什么都没发生”:没有弹窗、没有日志、只有功能突然失效。这时候要盯住 settings.json 里那些看似无害的键值对——它们不崩溃,但会让插件互相失能。











