VSCode中editor.codeActionsOnSave不修复所有ESLint问题,是因为该设置仅触发ESLint自身标记为“Fixable”的规则,且依赖项目本地ESLint实例正确加载;常见失效原因包括规则配置格式错误(如用字符串而非数组)、未启用项目级eslint、Prettier冲突、规则本身不可修复(如no-unused-vars默认不支持fix)等。

VSCode 没有“自动解决依赖冲突插件”的功能,所谓“自动解决”本质是手动配置 + 显式裁剪 + 环境对齐,不是点一下就完事。
为什么 editor.codeActionsOnSave 不修所有 ESLint 问题
这个设置只触发 ESLint 自身支持 fix 的规则,且前提是 VS Code 正确加载了项目本地的 ESLint 实例。常见失效原因:
-
eslint.config.js或.eslintrc.js中某条规则写成"no-console": "error"(字符串形式),而非"no-console": ["error"](数组形式)——后者才允许插件尝试修复 - 右下角 ESLint 图标显示
Using globally installed ESLint,说明没走项目里node_modules/.bin/eslint,重启窗口或执行Developer: Reload Window可刷新加载 - 同时启用了
prettier插件且未禁用其保存时格式化(prettier.enable为true),导致 Prettier 覆盖 ESLint 的修复结果 - 规则本身不可修复:
no-unused-vars默认不带fix,需配合eslint-plugin-unused-imports才能修;import/no-unresolved属于诊断类,无法自动修
Prettier + ESLint + EditorConfig 三者共存必冲突
它们都在抢同一件事:缩进、引号、分号、空行、结尾换行。VS Code 不会智能协商谁听谁的,只会按注册顺序/优先级覆盖。真实做法是“砍掉两个,留一个主控”:
- 禁用
EditorConfig插件(或仅保留其解析能力,不启用格式化),因为它的逻辑最弱、最难调试 - 在
.eslintrc.js中引入eslint-config-prettier,关闭所有与 Prettier 重叠的规则:extends: ["eslint:recommended", "prettier"] - 确保
prettier插件的prettier.requireConfig设为true,避免它用默认值覆盖 ESLint 配置 - 删掉项目根目录下的
.editorconfig文件,或至少注释掉indent_style、quote_type等与 ESLint/Prettier 冲突的项
Python 插件冲突:ms-python.python 和 ms-python.pylance 不是搭档,是对手
旧版 ms-python.python(Legacy)和 ms-python.pylance 同时启用时,会各自启动语言服务器、重复监听文件变更、争抢 python.defaultInterpreter 控制权。这不是配置能调和的,是架构级互斥:
- 必须禁用
ms-python.python,只保留ms-python.pylance—— 官方已明确标注前者为 legacy - 禁用后仍异常?说明残留进程还在跑。直接删扩展目录:
rm -rf ~/.vscode/extensions/ms-python.python-*(macOS/Linux)或%USERPROFILE%\.vscode\extensions\ms-python.python-*(Windows) - 检查
settings.json是否还留着python.jediEnabled、python.languageServer等已废弃字段,删掉它们 - 若用 Poetry 或 Pipenv,确保
python.defaultInterpreterPath指向虚拟环境内python可执行文件,而不是系统 Python
AI 补全插件一开多个就失效
VS Code 的 editor.suggest.provider 接口是单点注册机制,github.copilot、aliyun.tongyi-lingma、codegeex.codegeex 同时启用时,后加载的会覆盖前者的补全入口,最终只有最后一个生效,其余静默失败:
- 不要“都装着备用”。选一个主力,其他全局禁用;工作区需要切换时,再用
extensions.enabled白名单临时开启 - 禁用后务必检查
settings.json里是否还存有对应插件的开关项,比如copilot.enable、tongyi-lingma.autoSuggest,这些字段不随插件禁用而清除,会继续干扰 - 某些 AI 插件(如早期 Copilot)会在后台拉起本地服务进程,单纯禁用插件不终止它。终端执行
ps aux | grep -i copilot(macOS/Linux)或任务管理器搜Copilot,手动 kill - 补全空白或延迟高?打开 Developer Tools(
Ctrl+Shift+I),看 Console 是否刷Command 'editor.action.triggerSuggest' is already registered—— 这就是冲突铁证
真正难的从来不是“怎么配”,而是意识到 VS Code 的插件模型本质是“抢占式注册”,没有中央协调器。所有“自动”背后,都是你亲手划清边界、删掉冗余、对齐版本的结果。


















