VSCode波浪线由多源叠加生成,需按前缀识别来源并精准关闭:typescript:/javascript:对应validate.enable,eslint:需禁用插件或设eslint.enable为false,cSpell:则关cSpell.enabled;隐藏波浪线可用problems.decorations.enabled或语言专属设置,注意配置优先级与重载窗口。

VSCode 的实时错误提示波浪线(红色/黄色下划线)不是“开关一按就全开或全关”的单一功能,而是由多个独立来源叠加渲染的结果。直接搜 error squiggles 或关掉 problems.decorations.enabled 虽然立竿见影,但大概率会误杀真实错误——比如把 console.lgo 这类拼写错误也一起藏掉。
怎么确认波浪线是谁画的
悬停在波浪线上方,看提示文字前缀:
- 以
typescript:、javascript:开头 → 来自内置 JS/TS 验证器,控制项是javascript.validate.enable或typescript.validate.enable - 以
eslint:开头 → ESLint 插件所为,关它得禁用扩展,或设eslint.enable为false - 以
cSpell:或没前缀但标的是中文注释 → 几乎肯定是Code Spell Checker在报错,不是语法问题,关cSpell.enabled即可 - 右下角状态栏有
ABC图标 → 拼写检查插件正在运行;没有图标却仍有红线,再查Spell Right或某些 Markdown 预览插件是否偷偷启用了拼写逻辑
只关波浪线,不关后台检查
你真正需要的,往往不是停止检查,而是“别画线”。这样 Ctrl + Shift + M 打开 Problems 面板仍能看到全部问题,悬停也能看到提示,只是编辑器不干扰视线:
- 全局隐藏所有诊断波浪线:设
problems.decorations.enabled为false(注意:这会影响所有语言、所有来源) - 仅对 C/C++ 隐藏:设
C_Cpp.errorSquiggles为"disabled"(字符串,不是布尔值) - 只想让拼写检查不画线但继续扫描:v2.20+ 版本可用
cSpell.showTypes,设为["warning"],去掉"error"和"hint"
按语言精准开关,避免误伤
不同语言的错误来源不同,硬统一关容易漏掉关键提示。推荐逐个确认并调整:
- JavaScript 文件里满屏
no-unused-vars黄线?关javascript.validate.enable,保留 ESLint 做主检查 - TypeScript 项目中
.js文件疯狂报类型错误?关javascript.validate.enable,而不是整个 TypeScript 服务 - Python 文件里 import 报红线但实际能运行?优先关
python.linting.enabled,而非python.analysis.enabled(后者影响补全和跳转) - Markdown 或 README 中英文单词被标红?不用关全局,加语言专属配置:
"[markdown]": { "cSpell.enabled": false }
关了还显示?检查三层配置覆盖
明明在用户设置里写了 "cSpell.enabled": false,重启后某文件里波浪线还在——这不是 Bug,是配置优先级在起作用:
- 工作区级(
.vscode/settings.json)优先级最高,先查项目根目录下有没有"cSpell.enabled": true - 语言专属配置(如
"[typescript]": { "cSpell.enabled": true })会覆盖全局设置 - 某些主题(如 Nord、One Dark Pro)把拼写错误样式硬编码进 theme 文件,换回默认主题验证一下
- 极少数情况是 ESLint 规则里启用了拼写检查(如
@typescript-eslint/spelling),这时波浪线其实是eslint发出的,要查eslint.rules
最常被忽略的一点:关掉 cSpell.enabled 后,记得手动执行 Developer: Reload Window,否则部分语言服务可能缓存旧配置,红线照旧挂着。事情说清了就结束。











