vscode真深色需同时配置三系统:workbench.colortheme、editor.tokencolorscheme、terminal.integrated.colorscheme均设为dark主题,且markdown预览需启用"useeditorstyle";纯黑背景须自定义6项colorcustomizations并校验json格式。

VSCode 默认就是深色模式,但“看起来是深色”不等于“真正生效”——很多用户切了主题后发现代码区还是白的、终端发亮、Markdown 预览灰蒙蒙,本质是只动了 UI 主题,没对齐语法、终端、预览三块独立配色系统。
怎么确认当前是不是真深色
别只看背景颜色。有些主题把 editor.background 设成 #1e1e1e,但 terminal.background 还是默认浅灰,markdown.preview 完全走浏览器样式。真正判断依据是三个配置项是否同时指向 dark:
-
workbench.colorTheme值为"Dark+ (default dark)"或其他带Dark的合法主题 ID(注意大小写和括号) -
editor.tokenColorScheme值为"Default Dark+"(不是Default Light+) -
terminal.integrated.colorScheme值为"Default Dark+"或第三方 dark 方案(如"One Half Dark")
按 Ctrl+Shift+P → 输入 Developer: Inspect Editor Tokens,悬停在代码上能直接看到当前 token 对应的 scope 和实际渲染色,比肉眼判断准得多。
为什么改了主题代码区还是亮的
因为 workbench.colorTheme 只管 UI 区域(侧边栏、标题栏等),而代码区的语法高亮由 editor.tokenColorScheme 独立控制。常见错误是 UI 切了 Dark+,但 editor.tokenColorScheme 仍为 Default Light+,结果边栏黑、字符串白,眼睛更累。
- 打开
settings.json,确保这两行同时存在且值正确:"workbench.colorTheme": "Dark+ (default dark)","editor.tokenColorScheme": "Default Dark+" - 第三方主题(如
One Dark Pro)通常自动绑定两者,但Material Theme默认禁用深色语法渲染,必须手动开启或删掉editor.tokenColorScheme让它接管 - 改完不用重启,但需按
Ctrl+R重载窗口才能刷新 UI
终端和 Markdown 预览为什么还是白的
它们不继承 workbench.colorTheme,各自有开关。漏掉任一,就会出现“一半黑一半白”的割裂感,比全亮还伤眼。
- 终端:搜
terminal.integrated.colorScheme,选Default Dark+;若无效,再检查terminal.integrated.defaultProfile是否启用了支持暗色的 shell(如 PowerShell、zsh) - Markdown 预览:必须加这行:
"markdown.preview.experimental.useEditorStyle": true,否则它永远用浏览器默认样式,跟编辑器脱节 - PDF 预览(如 LaTeX Workshop)不受主题影响,需手动改插件目录下的
viewer.css,在#viewerContainer里加filter: invert(88%);
想实现纯黑背景要填哪几个坑
默认 Dark+ 是 #1e1e1e 深灰,OLED 屏仍有余光。要真黑,得手动覆盖 6 个区域,缺一不可:
editor.backgroundsideBar.backgroundactivityBar.backgroundstatusBar.backgroundpanel.backgroundtitleBar.activeBackground
全部写进 settings.json 的 workbench.colorCustomizations 对象里,格式必须严格:"workbench.colorCustomizations": { "editor.background": "#000000", "sideBar.background": "#000000", ... }。少一个引号、多一个逗号,整个对象就失效。
纯黑之后,原本在深灰上还 OK 的高亮色(比如 #FFFFFF 字符串、#569CD6 括号)会立刻刺眼,建议同步关掉高饱和括号插件(如 Bracket Pair Colorizer),并调低字体抗锯齿:"editor.fontLigatures": false。











