code spell checker 更新后报“unknown word.cspell”是因配置未适配新版本:cspell.language需改为数组格式,cspell.enabledlanguageids须显式包含当前文件语言id,禁用内置拼写检查,并设cspell.allowcompoundwords为true。

Code Spell Checker 更新后出现 Unknown word.cSpell 报错
这不是拼写错误,是插件更新后词典加载或语言配置未同步导致的误标。常见于 2.4.x 及以上版本升级后,cSpell.language 仍为旧格式(如 "en, zh" 字符串),而新版要求数组形式(["en", "zh"])。
- 打开
settings.json,检查cSpell.language值:若为字符串,改为数组;若缺失,补上"cSpell.language": ["en", "zh"] - 确认
cSpell.enabled为true,且没有被工作区设置覆盖(可临时删掉.vscode/settings.json验证) - 更新后首次启用可能缓存旧词典,执行命令面板中的
Developer: Reload Window强制重载
波浪线只在字符串里出现,注释不标红
说明插件语言 ID 绑定失效,或当前文件的语言模式未被 cSpell.enabledLanguageIds 显式包含。比如 .ts 文件实际语言 ID 是 typescript,但配置里只写了 javascript,就会漏检注释。
- 将光标置于注释中,按
Ctrl+Shift+P→ 输入Developer: Inspect Editor Tokens and Scopes,看右上角显示的 Language ID 是什么(如typescript、javascriptreact) - 在
settings.json中确保cSpell.enabledLanguageIds包含该 ID,例如:"cSpell.enabledLanguageIds": ["typescript", "javascript", "markdown", "plaintext"] - 避免使用
"*"通配符——它在部分新版本中已被弃用,会导致匹配失败
Ctrl+. 快捷键弹出空菜单或无响应
根本原因不是快捷键冲突,而是插件没识别出当前单词属于“可校验范围”。尤其在更新后,默认检查边界可能收紧,或语法过滤规则意外生效。
- 确认光标**严格落在波浪线下方的单个单词内**,不能在空格后、不能选中文本、不能在正则字面量或模板字符串插值表达式中
- 检查是否启用了
cSpell.wordsOnlyCheckInCommentsAndStrings,若为true,则变量名、import语句里的路径等位置天然不触发 - 若用的是自定义
.cspell.json,留意ignoreRegExpList是否误写了全局匹配(如/.*/),导致所有词都被跳过
中文注释/拼音变量名被标红,但插件已设 zh 语言
Code Spell Checker 的中文支持本质是“允许中文字符存在”,而非“对中文做分词校验”。所以 用户名 不报错,但 shoujihaoma(拼音连写)会被当做一个英文词去查词典,查不到就标 Unknown word.cSpell。
- 不要依赖
cSpell.language解决拼音问题;应改用cSpell.ignoreRegExpList过滤,例如:"ignoreRegExpList": ["[a-z]{3,}ma$"](忽略以 ma 结尾的 3 字母以上小写组合) - 更稳妥的做法是在代码中加行级禁用注释:
// cspell:disable-line或/* cspell:disable-next-line */ - 注意:VS Code 内置拼写检查(
editor.spellcheck)和 Code Spell Checker **互不兼容**,同时启用会导致行为混乱,建议只留后者
实际配置中最容易被忽略的一点:插件更新后,cSpell.allowCompoundWords 默认值可能从 true 变为 false,这会让 getUserName 被拆成 get、User、Name 三段分别校验——而 User 和 Name 在中文项目里常不在词典中,于是整行都飘红。手动设回 true 才能恢复驼峰识别逻辑。











