vscode中lsp诊断错误/警告颜色需通过workbench.colorcustomizations配置editorerror.foreground和editorwarning.foreground,语法错误则需用editor.tokencolorcustomizations配invalid scope;error lens行内颜色需单独设errorlens.errorcolor;终端console.error不红与编辑器配色无关,须强制ansi或装output colorizer。

VSCode 默认的错误/警告颜色在深色主题下经常显得太淡,尤其是波浪线和悬浮提示文字,根本没法一眼识别。这不是你的显示器问题,而是 VSCode 把语法错误(invalid scope)和语义诊断(LSP 报告的 error/warning)分了两套颜色系统,而默认主题对后者往往用得很克制。
怎么改 LSP 诊断的错误/警告颜色(最常需要调的)
这类颜色控制的是 TypeScript、Python(Pylance)、ESLint 等语言服务器报告的问题,包括波浪线本身、悬停弹窗里的文字、概览标尺(overview ruler)上的色块。它们不走语法高亮逻辑,必须通过 workbench.colorCustomizations 配置:
-
editorError.foreground:设为"#f75464"(vscode-dark-islands 主题用的珊瑚红),这是波浪线和提示文字的主色 -
editorWarning.foreground:推荐"#e8a33e"(琥珀色),比默认黄色更醒目且不刺眼 -
editorInfo.foreground:可用"#548af7"(主题蓝),保持信息类提示的一致性 - 如果想隐藏边框只留波浪线,加
"editorError.border": "#00000000"
怎么改语法错误的红色波浪线(比如拼错 console 或少冒号)
这类错误由编辑器底层词法分析触发,颜色由当前主题的 TextMate scope 决定,不是 LSP。要改它得用 editor.tokenColorCustomizations:
- 先按
Ctrl+Shift+P运行Developer: Inspect Editor Tokens and Scopes,把光标停在明显语法错误上(如consol.log()),看右侧弹出的 scope 链里是否含invalid或更具体的invalid.illegal.ts - 在
settings.json中添加规则,例如:{ "editor.tokenColorCustomizations": { "textMateRules": [ { "scope": "invalid", "settings": { "foreground": "#f75464", "fontStyle": "underline" } } ] } } - 注意:部分语言(如 TS)可能用更细粒度的 scope,优先用 Inspection 工具返回的最具体值
Error Lens 插件的行内错误颜色要不要单独配?
要,但逻辑不同。Error Lens 渲染的是诊断消息文本(比如 "Cannot find name 'x'."),它不复用 editorError.foreground,而是靠自己的配置项:
-
errorLens.errorColor:控制错误消息文字颜色,默认是"#ff6b6b",建议统一成主题的"#f75464" -
errorLens.warningColor:对应警告,设为"#e8a33e" -
errorLens.gutterIcons:开启后会在行号旁显示彩色图标,颜色也受上述配置影响 - 别漏掉
errorLens.messageEnabled: true,否则即使配了颜色也看不到行内文本
终端里 console.error 不红?那不是主题问题
VSCode 终端里 console.error("boom") 显示白字,和编辑器颜色设置完全无关。Node.js 默认只在 TTY 环境输出 ANSI 颜色,而 VSCode 终端有时被识别为非 TTY。解决方式只有两个方向:
- 强制启用颜色:启动命令前加环境变量,如
FORCE_COLOR=1 npm start(macOS/Linux)或set FORCE_COLOR=1 && npm start(Windows CMD) - 用扩展处理纯文本关键词:装
Output Colorizer,在settings.json里加规则:{"pattern": "(?i)error", "color": "red"} - 别指望
Error Lens或主题配色能影响终端——它只作用于编辑器内的代码文件
真正容易被忽略的是:语法错误(invalid)和语义错误(LSP Diagnostic)的颜色配置入口完全不同,混在一起调只会有一半生效;另外,Error Lens 的行内文本颜色是独立体系,不继承任何全局 error 颜色设置。











