macOS 原生支持昼夜自动切换,需系统设“自动”外观并配置 window.autoDetectColorScheme;Windows 无可靠信号,只能靠脚本轮询或硬编码时段切换,且 workbench.colorTheme 与 editor.tokenColorScheme 必须配对设置,OLED 用户还需手动覆盖六处背景色为 #000000。

能自动跟随,但 macOS 和 Windows 行为完全不同:macOS 原生支持实时响应系统昼夜切换;Windows 不提供可靠信号,window.autoDetectColorScheme 基本无效。
macOS 上启用自动跟随只需两步
系统必须先开启“自动”外观(基于日出日落),VSCode 才能感知变化。仅开“深色模式”或“夜间模式”滤镜没用。
- 系统设置 → 外观 → 选“自动”
- 打开
settings.json,加入:{ "window.autoDetectColorScheme": true, "workbench.preferredDarkTheme": "Default Dark+", "workbench.preferredLightTheme": "Default Light+" }
主题名必须精确匹配已安装主题 ID:Default Dark+ 不能写成 default dark+ 或 Dark+ (default dark)(后者是 UI 主题名,不是 preferredDarkTheme 的合法值)。
改完保存,执行 Developer: Reload Window 测试一次系统手动切换,确认是否同步。
Windows 上 window.autoDetectColorScheme 几乎不工作
Windows 10/11 的“深色模式”开关不触发系统级配色变更信号,VSCode 无法监听。所谓“自动”只能靠外部脚本按时间轮询或调用系统 API 模拟。
- 别信插件宣传的“智能检测”,底层全是定时修改
workbench.colorTheme字段 + 重载窗口 - PowerShell 脚本必须用
ConvertFrom-Json/ConvertTo-Json -Depth 10操作settings.json,手写字符串拼接极易破坏 JSON 格式 - 重载命令
workbench.action.reloadWindow需要 Command Runner 等扩展支持,code --force不生效
如果只是想固定时段切换(比如 20:00 切深色),脚本里加 Get-Date 判断小时即可;但注意:Windows 无原生日出/日落 API,纯靠本地时区硬编码。
workbench.colorTheme 和 editor.tokenColorScheme 必须分开设
快捷键 Ctrl+K Ctrl+T 只改 workbench.colorTheme(UI 区域),代码编辑区颜色由 editor.tokenColorScheme 控制——二者完全解耦,不配对就会出现“黑边栏 + 白代码”的割裂感。
- 深色 UI 推荐配对:
"workbench.colorTheme": "Default Dark+"+"editor.tokenColorScheme": "Default Dark+" - 浅色 UI 同理:
"workbench.colorTheme": "Default Light+"+"editor.tokenColorScheme": "Default Light+" - 第三方主题(如 One Dark Pro)通常自动绑定,但一旦你手动设过
editor.tokenColorScheme,它就可能被覆盖,删掉该行让主题接管更稳
检查当前值:打开设置搜 tokenColorScheme,右侧显示的才是实际生效的语法主题名。
OLED 用户必须手动覆盖六处背景色
所谓“深色主题”默认背景多为 #0d1117 或 #1e1e1e,不是纯黑。OLED 屏幕上这些像素仍在发光,护眼效果打折扣。
- 必须在
settings.json中显式覆盖:editor.background、sideBar.background、activityBar.background、statusBar.background、panel.background、titleBar.activeBackground - 全设为
#000000才算真黑;顺带关掉editor.fontLigatures(连字会增加渲染负担) - 注意:部分主题(如 GitHub Dark)不提供
#000000变体,得用自定义 CSS 注入(需启用vscode-custom-css扩展)
真正麻烦的不是设主题,而是确保所有子区域(终端、Markdown 预览、调试控制台)都同步变暗——它们各自有独立配置项,漏一处,眼睛就得重新调焦一次。


















