前言
尽管 Windows Terminal 已经正式发布,Windows Console 仍然是 Windows 系统中不可或缺的部分,它的设置(如字体大小、背景颜色)的储存方式较为复杂,而网络上有关的中文信息较少。本文将从应用层面捋清 Windows Console 设置的储存方式,并介绍便于快捷更改配色方案的工具。
在阅读本文前,你应当清楚 Console 、Terminal 、Shell 的概念以及它们与下文提到的 Windows Console 、Powershell 等概念之间的对应关系。如果你还不太明白,可以参考终端、Shell、tty 和控制台(console)有什么区别?或自行搜索。
本文进行测试和实验所使用的 Windows 版本为 2020 年 5 月更新(v2004)。
设置的载入顺序和继承规则
Windows Console(下称“控制台”)是 Windows 操作系统上 Command Prompt(cmd)和 Powershell 的默认终端,它的设置信息储存在多个位置,控制台启动时会依次载入,根据微软开发博客[1]的说明,设置信息的载入顺序如下:
- 在 conhostv2.dll 中硬编码的设置信息
- 在注册表 HKEY_CURRENT_USERConsole 中以值方式储存的设置信息
- 在注册表 HKEY_CURRENT_USERConsole 中以子键方式储存的设置信息
- 在快捷方式(.lnk 文件)中储存的设置信息
后载入的设置会覆盖先载入的设置,不过值得注意的是,如果某项设置信息在注册表中缺失,那么它会保持不变,快捷方式中的设置信息会覆盖已载入的所有设置。
启动控制台的途径
控制台的启动途径大体可以分为两类:第一类包括通过按下 Windows + X 快捷键后打开的菜单中的,以及开始菜单中的“Windows Powershell”和“Windows Powershell(管理员)”选项启动,本质上它们启动的都是“%AppData%RoamingMicrosoftWindowsStart MenuProgramsWindows PowerShell”路径下的相应快捷方式,以此类方式启动的控制台所使用的设置最终由快捷方式中的设置信息(载入顺序中的第 4 项)决定;第二类途径包括通过“运行”以及“在此处打开……”启动,以此类方式启动的控制台所使用的设置最终由注册表中的设置信息(载入顺序中的第 2、3项)决定。
要区分两类途径启动的控制台十分容易:打开控制台窗口标题栏选项中的“属性”窗口,第一类的属性窗口标题为“‘Windows Powershell’属性”,第二类的则为“C:WindowsSystem32…”,即 Powershell 可执行文件的路径。属性窗口的不同也印证了两类控制台设置的区分。
更改设置的途径
可以通过控制台窗口标题栏选项中的“默认值”和“属性”选项更改设置,两种选项所更改的设置不同:根据微软开发博客[1]的说明,无论通过哪类途径启动,在通过“默认值”打开的“控制台窗口 属性”窗口中更改设置时,都只会更改注册表中以值方式储存的设置信息(载入顺序中的第2项);在通过“属性”打开的属性窗口中更改配置时,对于通过第一类途径或其他快捷方式启动的控制台而言,只会更改相应快捷方式中的设置信息,对于通过第二类途径启动的而言,则会更改注册表中以子键方式储存的设置信息(载入顺序中的第3项)。
利用工具更改配色方案
- ColorTool
手动更改设置,特别是应用成套的配色方案较为繁琐。为此,微软推出了方便为控制台应用配色方案的 ColorTool 工具。具体的使用方法请查看官方文档或其他教程。根据官方文档中的说明和本人的实验,可以发现 ColorTool 更改设置时遵循与手动更改设置相同的原则:无论 ColorTool 在通过哪类途径启动的控制台中运行,使用“-d”选项时,都只会更改注册表中以值方式储存的设置信息(载入顺序中的第 2 项);不使用选项而通过打开属性窗口点击“确定”以手动进行应用时,对于通过第一类途径或其他快捷方式启动的控制台而言,只会更改相应快捷方式中的设置信息(载入顺序中的第 4 项),对于通过第二类途径启动的控制台而言,则会更改注册表中以子键方式储存的设置信息(载入顺序中的第 3 项);使用“-b”选项时,会同时更改使用“-d”选项时和不使用选项而手动应用时更改的设置信息。
- concfg
concfg 是另外一个可以更改控制台配色方案的工具。具体的使用方法同样不再赘述,这里仅解释使用该工具导入配色方案时,其对储存在不同位置的设置信息的操作。与 ColorTool 不同,无论通过哪种途径启动控制台,如果你允许了 concfg 移除储存在注册表和快捷方式中的设置信息,载入顺序中的第 3、4 项会被移除,然后向第 2 项中写入有关颜色的设置,如果你没有允许,concfg 会直接向第 2 项中写入有关颜色的设置。
恢复默认设置
- 重置通过第一类途径启动的控制台
快捷方式没有恢复默认设置功能,你可以选择以下方法:
方法一:对照默认设置手动修改快捷方式的属性。
方法二:重新从 Powershell 可执行文件创建快捷方式,用其以相同文件名替换“%AppData%RoamingMicrosoftWindowsStart MenuProgramsWindows PowerShell”目录下的相应文件,然后在文件属性中将“起始位置”设为%HOMEDRIVE%%HOMEPATH%.
方法三:用未经修改的快捷方式文件去替换它。可以从网络上或者其他 PC 上获取未经修改的快捷方式文件。由于该快捷方式是分用户储存的,也可以新建用户来获取默认的 Powershell 快捷方式。
- 重置通过第二类途径启动的控制台
删除注册表 HKEY_CURRENT_USERConsole 项即可。
对于两类途径启动的控制台,若只需重置配色方案,只删除或修改与颜色相关的项或者使用 ColorTool 或 concfg 导入默认配色方案(一般名称为 “campbell”)即可。
结语
Windows Console 伴随 Windows 多年,历经多次迭代,不免变得繁复,缺失了 Linux “一切皆文件”的简洁性,但作为系统的基础组件,短时间内不会被移除或替代,对它的使用者而言,这也就产生了学习它的使用方法的必要性。想要深入了解 Windows Console,推荐阅读
include-yy:Windows 控制台和控制台应用程序zhuanlan.zhihu.com才疏学浅,如有纰漏,还请斧正。写文不易,感觉有用的话就点个赞吧!
参考
- ^ab1 https://devblogs.microsoft.com/commandline/understanding-windows-console-host-settings/