editor.quicksuggestions 仅控制代码补全框弹出,与语法错误标红无关;标红由语言服务器(如tsserver、pylance、eslint插件)诊断驱动,需检查语言模式、配置文件(tsconfig.json/.eslintrc)、插件状态及服务器启动情况。

VSCode 里没有“全局纠错规则”这个独立配置项——所谓纠错,实际由不同语言服务器(LSP)各自实现,修改必须按语言、按插件、按具体检查工具来操作。
为什么改了 settings.json 里的 "editor.quickSuggestions" 还是没提示?
这不是纠错问题,而是基础补全被关掉了。真正影响“报错/标红/波浪线”的是语言服务器的诊断能力,不是编辑器建议开关。
-
editor.quickSuggestions只控制是否弹出代码补全框,和语法错误标红完全无关 - 标红来自语言服务(如 TypeScript 的
tsserver、Python 的Pylance、ESLint 插件的后台进程) - 如果右下角语言模式显示为
Plain Text或错误类型(比如 .ts 文件被识别成JavaScript),诊断直接不启动 - TS/JS 项目缺
tsconfig.json或jsconfig.json,tsserver就退化为只检查原生 API,自定义类型和 import 错误全不报
ESLint 报错不显示?先查 .eslintrc 和插件状态
ESLint 不是 VSCode 内置功能,它的“纠错”靠插件驱动,且依赖项目级配置文件。
- 确保已安装
dbaeumer.vscode-eslint插件,并重启过 VS Code - 项目根目录必须有
.eslintrc.js、.eslintrc.json或eslint.config.js(v9+ 新格式) - 在设置中确认启用了
eslint.enable(默认 true),且eslint.packageManager指向正确的包管理器(npm/yarn/pnpm) - 打开命令面板(
Ctrl+Shift+P),运行ESLint: Show Output Channel,看是否有Failed to load config或Cannot find module类错误 - 不要在
settings.json里写"eslint.validate": ["javascript"]—— 这个字段在 ESLint 插件 v3.0+ 已废弃,现在靠文件后缀自动匹配
Python 类型错误不标红?Pylance 配置比想象中敏感
Pylance 是默认 Python 语言服务器,它的诊断行为受多个开关控制,且对解释器路径极其挑剔。
- 右下角点击语言模式,确认是
Python(不是Python (Jedi)或Python (Ruff)) - 运行
Python: Select Interpreter,路径必须指向激活虚拟环境中的python可执行文件(如./venv/bin/python),不能是系统级/usr/bin/python3 - 检查
python.defaultInterpreterPath设置是否被其他扩展覆盖(比如某些 Poetry 插件会静默重写它) - 关键配置项:
"python.analysis.typeCheckingMode": "basic"(启用基础类型检查)、"python.analysis.autoSearchPaths": true(自动索引当前工作区子目录) - 若用 Ruff 做 lint,需额外安装
charliermarsh.ruff-vscode,并设"ruff.enable": true;它和 Pylance 的诊断是两套并行系统,互不干扰
想统一禁用某类警告?别碰全局 setting,去改语言专属配置
VSCode 不提供“关闭所有未使用变量警告”这类跨语言开关。每个语言服务器暴露自己的规则粒度,强行在用户 setting 里覆盖会导致部分语言失效。
- TypeScript:在
tsconfig.json的"compilerOptions"下加"noUnusedLocals": false - ESLint:在
.eslintrc中配置"no-unused-vars": "off",或用注释临时禁用// eslint-disable-next-line no-unused-vars - Python(Pylance):用
# type: ignore注释,或在settings.json中针对 Python 设置"python.analysis.diagnosticSeverityOverrides": { "unresolved-import": "none" } - 切记:所有语言相关配置优先级是「项目级 > 工作区级 > 用户级」,用户 setting 里写的
python.*项只在没项目配置时才生效
最常被忽略的一点:语言服务器进程可能根本没起来。右下角语言模式旁那个小齿轮图标,点开能看到当前语言服务器状态。如果是灰色或显示“Starting…”,说明诊断链路中断——这时候调任何配置都没用,得先解决启动失败的问题。











