当我启动其他实用程序(man、vi、nano 等...)时,我的 WSL 字体会一直更改为默认字体(甚至不是单色字体!)
我检查了 WSL 的“默认值”和“属性”,并将字体设置为“Consolas”。但每次启动其他实用程序时,它都会恢复为默认字体……
谷歌了一下,仍然不知道发生了什么,或者无论如何我可以为此进行配置。
答案1
该问题似乎在两个错误报告中提到:
使用 Consolas 字体运行 powershell.exe 命令时,WSL 控制台窗口中的字体更改为光栅字体 #367
Windows 10 1809/19H1/20H1 破坏了 Powershell 的控制台设置。继续使用光栅字体打开。#280。
开发人员对该问题尚未做出明确回应。第二个链接给出了一些解释:
它只在 1809 中被检测到,因为控制台的默认字体是 Consolas。在此之前,我相信是 Lucida Console?并且代码对该字体的工作方式相同。我对该代码的理解(它一直存在,在我加入 PowerShell 团队之前)是,在 Windows 源代码中,我们只有一个用于 PowerShell 的快捷方式,该快捷方式定义了默认字体。因此,当默认字体被更改时,东亚用户会抱怨他们的字形无法呈现,因为字体不支持它。因此,此代码检测到字体和语言环境不兼容,并将其切换到可以呈现的语言环境。
我对于在 Windows PowerShell 中进行任何更改犹豫不决,因为即使是像这样看似很小的更改也会导致意外的回归。
第一个链接中建议了一种解决方法(但并不适用于所有人),即FaceName
在注册表中的键值处更改为 WSL 控制台中使用的字体:
HKEY_CURRENT_USER\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe
HKEY_CURRENT_USER\Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe
我现在的价值FaceName
是Lucida Console
。
在第一个链接中也提到:
观察:如果您有一个 BAT 文件,其中您调用 powershell script.ps1 两次,第二次调用会将字体重置为光栅。
在调用之间插入 chcp 437 会有所帮助。
结论是,这一直存在问题,但现在问题才出现,因为 Windows 版本 1809 将默认字体更改为 Consolas。将默认字体更改为Lucida Console 或 Consolas 可能会有所帮助,虽然不能解决错误,但可能会稍微隐藏它。在调用 PowerShell 之前FaceName
添加命令也可能有帮助。chcp
唯一真正的解决方案是微软修复该错误,但似乎所涉及的代码相当旧,因此当前的 PowerShell 团队对修改它犹豫不决。
答案2
我将提供一个稍微正交的解决方案。我不知道您的字体为何被重置。原因可能非常简单,如果有人发布了它,您应该接受他们的答案。
但我认为这不值得进行故障排除。
WSL 使用的“默认”终端(目前)是传统的“Windows 控制台主机”,据我所知,它已有 20 多年历史了。微软在过去几年中发布了Windows 终端作为其替代品。它是:
- 功能丰富的选项卡式终端界面,适用于 WSL、PowerShell、CMD 和任何 Windows 控制台应用程序。
- 可从 Microsoft Store 安装。
- 开源(Github 链接)
- 积极开发,(目前)定期发布新功能
- 可设置为 Windows 11 中的默认终端,从而取代控制台主机。
对于任何遇到 Windows 控制台主机问题的人,我个人的建议是升级到 Windows 终端。