工作区设置中纠错类配置仅当作用域为“resource”时才可覆盖全局设置,如eslint.validate、editor.codeactionsonsave等;而update.mode等application级配置则无法被覆盖。

工作区设置(.vscode/settings.json)中的纠错类配置,会无条件覆盖全局用户设置,但仅限于标记为 "resource" 作用域的设置项。 比如 eslint.validate、editor.codeActionsOnSave、javascript.suggest.autoImports 这类行为直接影响编辑器内诊断和修复动作的配置,都属于可被覆盖的范围;而像 update.mode 或 telemetry.enableTelemetry 这类应用级开关,写在工作区里也完全无效。
哪些纠错相关设置支持工作区覆盖?
VSCode 官方对每个设置都标注了作用域(Scope),只有 scope 为 "resource" 的设置才能被工作区 settings.json 覆盖。常见可覆盖的纠错/语言行为类配置包括:
-
eslint.enable、eslint.packageManager、eslint.useFlatConfig typescript.preferences.importModuleSpecifierEnding-
editor.quickSuggestions(影响自动补全触发)、editor.suggest.showKeywords -
javascript.inlayHints.parameterNames.enabled(参数名内联提示) -
editor.codeActionsOnSave中的"source.fixAll.eslint"等子项
你可以在 Settings UI 中搜索任意配置项,右侧 ⓘ 图标会明确显示当前生效值来自 User 还是 Workspace;鼠标悬停在 settings.json 的键名上,编辑器也会提示该设置的作用域类型。
为什么改了全局 eslint.validate 却没在项目里生效?
最常见的情况是:项目根目录下 .vscode/settings.json 显式写了 "eslint.validate": ["javascript"],而你的全局设置是 ["javascript", "typescript"]——前者直接覆盖后者,不会合并,也不会报错或警告。
- VSCode 不做“智能合并”,同名配置项是纯替换关系
- 如果项目里禁用了 ESLint(
"eslint.enable": false),即使全局开了,该项目也不会跑任何 ESLint 检查 -
.eslintrc.js或eslint.config.mjs是规则定义层,不控制插件是否启用;它只在 ESLint 插件启用后才被读取 - 多根工作区中,每个文件夹可有自己的
.vscode/settings.json,彼此独立,不存在继承或 fallback
settings.json 和 .eslintrc.* 的优先级怎么协同?
它们管的是不同层面的事:settings.json 控制“是否启用某工具 + 怎么调用它”,.eslintrc.* 控制“工具内部具体校验哪些规则”。两者不是并列竞争关系,而是链式依赖:
- 先由
.vscode/settings.json决定 ESLint 插件是否激活、用哪个node_modules下的包、是否开启自动修复 - 插件启动后,再按顺序查找项目根目录下的
eslint.config.mjs→.eslintrc.cjs→.eslintrc.js→.eslintrc.json,加载实际规则 - 如果
settings.json里配了"eslint.workingDirectories": [{ "mode": "auto" }],ESLint 插件会尝试按子目录分别加载各自.eslintrc.*,此时规则是分目录生效的
真正容易被忽略的是:当你在工作区 settings.json 里把 eslint.enable 设为 false,整个 ESLint 链条就断了——后面所有 .eslintrc.* 文件都不会被读取,哪怕它们语法完全正确。











