vscode报错颜色分语法错误(invalid scope)和语义错误(lsp诊断),前者用editor.tokencolorcustomizations修改,后者用workbench.colorcustomizations配置editorerror.foreground等。

报错颜色不明显?先确认是语法错误还是语义错误
VSCode 的“报错颜色”其实分两类:一类是语法解析阶段的红色波浪线(error 类型 token),另一类是语言服务器(LSP)报告的诊断信息(Diagnostic)。前者由 TextMate 语法定义决定,后者由 TypeScript Server、Pylance、ESLint 等后端提供。你看到的红色下划线如果很淡、断续或只在保存后才出现,大概率是后者——它不走 editor.tokenColorCustomizations,而走 workbench.colorCustomizations 中的 editorError.foreground 和 editorError.border。
怎么改语法错误的红色波浪线颜色
语法错误(比如 JS 里写 consol.log()、Python 里少冒号)触发的是编辑器底层词法高亮机制,其颜色由当前主题的 invalid 或 invalid.deprecated scope 控制。要改它:
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Inspect Editor Tokens and Scopes - 把光标停在明显语法错误的位置(如拼错的
consol),看右侧弹窗中scope链是否含invalid或invalid.deprecated - 在
settings.json中添加规则,例如:
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "invalid",
"settings": {
"foreground": "#ff3b30",
"fontStyle": "underline"
}
}
]
}
注意:invalid 是通用 scope,部分语言(如 TypeScript)可能用更具体的 invalid.illegal.ts,优先用 Inspection 工具返回的最具体值。
怎么改 LSP 报告的错误/警告颜色(比如 ESLint、TypeScript 错误)
这类诊断信息的颜色不由语法 scope 决定,而是由 VSCode UI 层统一控制。修改它们必须用 workbench.colorCustomizations,不是 editor.tokenColorCustomizations:
-
editorError.foreground:控制错误波浪线和悬浮提示中的文字颜色 -
editorWarning.foreground:同理,用于警告(黄色波浪线) -
editorInfo.foreground:用于提示(蓝色波浪线,如 TS 的any提示) -
editorError.border和editorWarning.border可设为透明("#00000000")来隐藏边框,只留波浪线
示例配置:
"workbench.colorCustomizations": {
"editorError.foreground": "#ff3b30",
"editorWarning.foreground": "#ff9500",
"editorInfo.foreground": "#007aff"
}
⚠️ 这些设置只影响诊断提示的视觉样式,不影响诊断来源本身。如果根本看不到波浪线,请先检查对应扩展是否启用(如 ESLint 扩展是否已安装并激活)、文件是否被正确识别为对应语言模式。
六边形颜色提示(hex color length)不是错误,别配错地方
很多人搜“六边形颜色错误”其实是想让非法十六进制颜色字面量(如 #1234 或 #ggg)标红。这个功能叫 hex color length,但它属于 CSS/SCSS 语言支持的校验规则,**不产生标准 Diagnostic,也不走 editorError 配置**。它的提示样式由 CSS 语法的 invalid.illegal.css scope 控制:
- 打开 CSS 文件,把光标停在非法 hex 上(如
#xyz) - 运行
Developer: Inspect Editor Tokens and Scopes,确认 scope 是invalid.illegal.css - 在
editor.tokenColorCustomizations.textMateRules中单独加这条规则即可
别把它和 editorError.foreground 混在一起调——那是两套完全独立的机制,混着配只会发现改了没反应。











