中文注释出现红波浪线是拼写检查器误将中文识别为错误英文单词所致,应禁用cSpell或调整ignoreRegExpList规则,而非关闭诊断功能。

为什么中文注释满屏红波浪线?
这不是语法错误,也不是编码问题,而是拼写检查器(Spell Checker)在“认真工作”——它把整段中文当成一个不存在于英文词典里的“单词”,然后果断标红。VS Code 自带的拼写检查 + cSpell 这类插件,都默认只认拉丁字符,对中文、日文、emoji 等完全无感。你没写错,它只是“看不懂”。
关掉拼写检查最安全的三步
真正该动的是拼写功能本身,不是诊断系统、不是语言服务器、更不是 lint 工具。否则你会顺手关掉真实的类型报错或未定义变量提示。
- 打开设置:按
Ctrl + ,(Windows/Linux)或 Cmd + ,(macOS)
- 搜索
cSpell.enabled,把它设为 false
- 如果没装
Code Spell Checker,就搜 editor.spellcheck,设为 false
- 打开设置:按
Ctrl + ,(Windows/Linux)或Cmd + ,(macOS) - 搜索
cSpell.enabled,把它设为false - 如果没装
Code Spell Checker,就搜editor.spellcheck,设为false
改完后建议手动重载窗口(Ctrl + Shift + P → 输入 Developer: Reload Window),否则部分语言服务可能缓存旧配置,红线还在。
只禁用注释/字符串里的拼写检查(进阶)
如果你还想保留对 Markdown 或 README 里英文的拼写提示,只是不想让代码里的中文注释被干扰,可以更精细地控制:
- 在
settings.json 中添加:"cSpell.language": "en",
"cSpell.words": [],
"cSpell.enabledLanguageIds": ["markdown", "plaintext"],
"cSpell.ignoreRegExpList": ["//.*", "/\*[^]*?\*/", "#.*"]
- 这样它仍会检查 Markdown 文件,但跳过所有行注释、块注释和 Python 风格注释里的内容
-
cSpell.ignoreRegExpList 是关键,漏写会导致正则不生效,红线照旧
别误关了真有用的诊断功能problems.decorations.enabled 是个常见误操作目标——它一关,所有波浪线(包括 TypeScript 类型错误、ESLint 未定义变量)全消失。表面清爽,实则危险。
真正该留着的是:javascript.validate.enable、typescript.preferences.includePackageJsonAutoImports、eslint.enable。它们负责逻辑安全,而拼写检查只负责“看起来专业”。
一个容易被忽略的点:某些项目里,cSpell 插件更新后会自动开启 cSpell.allowCompoundWords,但它对中文无效,反而让分词更混乱——直接关掉更省心。
settings.json 中添加:"cSpell.language": "en", "cSpell.words": [], "cSpell.enabledLanguageIds": ["markdown", "plaintext"], "cSpell.ignoreRegExpList": ["//.*", "/\*[^]*?\*/", "#.*"]
cSpell.ignoreRegExpList 是关键,漏写会导致正则不生效,红线照旧problems.decorations.enabled 是个常见误操作目标——它一关,所有波浪线(包括 TypeScript 类型错误、ESLint 未定义变量)全消失。表面清爽,实则危险。
真正该留着的是:javascript.validate.enable、typescript.preferences.includePackageJsonAutoImports、eslint.enable。它们负责逻辑安全,而拼写检查只负责“看起来专业”。
一个容易被忽略的点:某些项目里,cSpell 插件更新后会自动开启 cSpell.allowCompoundWords,但它对中文无效,反而让分词更混乱——直接关掉更省心。
改完别急着合上设置页,悬停一下原来标红的地方,确认提示消失了,且真实错误(比如 console.lgo)还能正常标黄。事情说清了就结束。


















