
给 Windows Terminal 装上会看时间的皮肤主题自动切换实战【免费下载链接】terminalThe new Windows Terminal and the original Windows console host, all in the same place!项目地址: https://gitcode.com/GitHub_Trending/term/terminal周五下午你盯着发白的终端背景皱了皱眉顺手打开「设置 个性化」把应用模式从浅色切到深色——标题栏跟着变了终端里却还是一片白。你盯着看了两秒手动改了配色然后决定这件事以后不该靠手动。Windows Terminal 的主题自动切换要做的就是这一件事让配色方案跟着系统深浅色主题走或者按你设定的时间点自动变。先看效果做完之后你的终端会是这个样子系统切到深色主题终端配色跟着变深切回浅色它又变回来全程不用碰鼠标。分屏场景下每个窗格按各自的 profile 应用对应配色互不打架。它是怎么工作的原理速览可以把它理解成给终端装了个看天色自动换灯泡的传感器灯泡配色方案是你预先挂好的两盏传感器就是系统主题状态天黑了就自动换到深色那盏。机制本身很轻——终端只盯住系统主题这一个开关开关一翻就换到对应方案不需要重启进程。这个行为的设计出处在官方规范 doc/specs/#4066 - Theme-controlled color scheme switch.md其中写明终端应当根据所选主题自动切换配色方案包括system主题的情况。配置格式的规范则定义在 doc/cascadia/profiles.schema.json 的SchemePair类型里light/dark两个字段各指一个已存在的配色方案名。从零搭起来核心操作整个过程只改你本地settings.json仓库本身一个字都不动。先把系统主题交给系统自己管打开「设置 个性化 颜色」把应用模式设为自动按日出日落切换。这一步是给终端的传感器通电——如果这里锁死在深色或浅色后面终端侧配得再全也不会动。给 colorScheme 换上双方案配置按Ctrl,打开设置文件JSON在profiles.defaults里加一个对象形式的colorScheme。之所以用对象而不是字符串是因为字符串只能写死一个方案对象才能同时挂住深浅两套// 自定义部分深浅双方案方案名必须与 schemes 里已有的一致 profiles: { defaults: { colorScheme: { light: Campbell, dark: Campbell Powershell } } }方案名写错了不会报错终端会静默回退到默认方案——这是这个配置最容易翻车的地方写之前对一眼schemes数组里的名字。把整个应用交给 system 主题顶层theme决定传感器读谁的信号。写成system后终端跟随系统自动翻转写light或dark则锁死双方案配置形同虚设// 自定义部分跟随系统主题 { theme: system, // ... }保存后新开的标签页立即生效已经开着的窗口等下一次系统主题翻转时自然跟上即可。如果到这里已经够用了——你只在乎跟系统走——后面进阶部分可以先跳过。往深里走进阶 / 场景化拓展固定时段切换不依赖系统按钟点换配色有些人的作息跟日出日落不同步比如夜班党或者下午才到工位的人。这种情况就别依赖系统主题了用任务计划程序在固定时间点改本地配置。先建一个脚本放在你自己目录里别放仓库中# 按小时挑配色时段和方案名都改成自己的 $hour (Get-Date).Hour $scheme if ($hour -ge 18 -or $hour -lt 6) { Campbell } elseif ($hour -ge 12) { Campbell Powershell } else { Solarized Light } $settingsPath $env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json $settings Get-Content $settingsPath -Raw | ConvertFrom-Json $settings.profiles.defaults.colorScheme $scheme $settings | ConvertTo-Json -Depth 32 | Set-Content $settingsPath改的是你%LOCALAPPDATA%下的本地配置文件仓库是只读的跟它没有关系。脚本本身不定时靠任务计划程序兜底在任务计划程序里建基本任务触发器设成每日 6:00 / 12:00 / 18:00 各一次操作选启动程序程序填powershell.exe参数指向脚本路径。两种机制打架时谁说了算时间触发和系统主题同时存在时脚本自己定个优先级。下面这段放在脚本开头系统主题当前是深色就什么都不改其余时段再按时间上方案——相当于把系统当第一裁判# 系统已切深色时不覆盖其余时段按时间换 $theme (Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize).AppsUseLightTheme if ($theme -eq 0) { exit }再叠一层电池供电时强制深色护眼优先。# 电池模式强制深色 $battery Get-CimInstance Win32_Battery if ($battery.BatteryStatus -eq 1) { $scheme Campbell # 换成你的深色方案 }场景谁说了算做法系统主题已显式翻转系统优先脚本开头检测后直接exit固定工作时段时间优先脚本按小时覆盖colorScheme电池供电深色优先检测Win32_Battery后锁深色分屏下让所有窗格一起变配置改完后想立刻看到效果又不想关窗口命令面板CtrlShiftP里输入 Reload 执行重载配置所有分屏窗格会统一应用新配色不会出现一半深一半浅的尴尬。别踩这些坑排错与注意事项版本太老配了没反应对象形式的colorScheme需要较新的 Windows Terminal 版本老版本只认字符串。先跑一下wt --version确认不行就升级到最新版。改完 JSON 终端打不开了十有八九是ConvertTo-Json把嵌套结构压扁、或引号转义错了。手改文件前先把settings.json复制一份备份改完可以用任意 JSON 校验器过一遍再交给终端。为什么方案没切过去颜色一点没变方案名和schemes数组里的名字差一个空格都会静默回退默认方案。对一下拼写别信没报错就是对的。亚克力和像素着色器要不要一起开useAcrylic和experimental.pixelShaderPath都吃 GPU低配设备或老核显上先别叠加主题联动本身零开销。脚本会不会把文件写坏Set-Content是整体覆盖写之前文件被终端重写终端也会自动保存配置可能互相踩一脚。脚本里先读一遍、校验是合法 JSON再动手写。最后说两句配置联动是现成的按钟点切是自己拼的两条路都通了之后剩下的就是挑几套顺眼的配色轮班。项目 roadmap 里整体主题支持页签色、标题栏色、窗格边框色统一定义和主题市场还在路上见 doc/terminal-v2-roadmap.md——等这两样落地主题切换的玩法会比现在宽得多。你的配色组合或踩坑心得欢迎按 CONTRIBUTING.md 的指引去提 issue 聊聊。【免费下载链接】terminalThe new Windows Terminal and the original Windows console host, all in the same place!项目地址: https://gitcode.com/GitHub_Trending/term/terminal创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考