前言

为什么我要吃饱了撑着美化终端?这件事起源于昨天,说起来还跟上一篇文章的中文对齐有关。上文说过,我被 nb-cli 的中文不对齐问题难受很久,最后终于忍受不住自己频繁发作的强迫症,自己把这个问题修复了并 pull request 上去。

一开始出现这个问题的时候,我还以为只是我本地的中文字体不等宽,所以才会出现不对齐的问题,然后我就翻了翻 VSCode 的设置,Font Family 一栏写着 Consolas,'Courier New',monospace,都是英文字体。按照常识,如果 VSC 在这些字体中找不到中文,就会自动调用中易宋体(也就是我们熟知的宋体)来显示中文。这四种字体怎么想也都是等宽字体,所以我本地的问题可以排除了。

然而我还是抱着“试一试”的心态打算换一款字体,在 Fira CodeCascadia Code 之间纠结了几分钟,选择了 Cascadia Code,因为它是微软官方专门用终端设计的字体。换完了字体,中文不对齐的问题依旧是没有什么变化,否则你们也不会看见上一篇文章了

中文对齐的问题被修复了之后,我也懒得把字体换回原来的 Consolas 了,就顺便把中文字体也换成了微软雅黑,看起来确实是舒服了一些。俗话说得好,保暖思淫欲,有了漂亮的字体,我不免就想要有一个漂亮的终端。尤其是看到 NoneBot QQ 群里的大佬们一个个都把自己的终端打扮得漂漂亮亮的,我也忍不住问了问他们是怎么做到的。

大佬告诉了我答案———— Oh-My-Posh

坑爹的微软官方文档

上文提到了 Cascadia Code 字体,这款字体有一个 PL 版本,增加了对 PowerLine 字符的支持。那么怎么设置 PowerLine 呢?微软官方有一个文档,我自然就照着上面的方法配置了起来。

安装 Powerline 字体?早完成了。

使用 PowerShell,安装 Posh-Git 和 Oh-My-Posh?好,完成了。

自定义 PowerShell 提示符?好。。。。怎么完成不了?

我开心地照着文档上输入 Set-Theme Paradox,然后就出现了以下报错:

Set-Theme: The term 'Set-Theme' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

这跟说好的怎么不一样?我的 Powershell 怎么不认命令啊?

我首先怀疑的是 Powershell 版本的问题,于是上至最新的预览版,下至 Win10 自带的拉垮 5.0 都给我装了个遍,Powershell 返回的仍然是上面那段鲜红的报错。

接着我便怀疑起了是不是我的 Powershell 是用 Scoop 安装的导致的?然后我就把 Scoop 安装的 Powershell 卸掉,到官网上下载安装包,把上一步的操作又试了一遍,结果还是一样。

于是我便怀疑起了文档的准确性,往上一翻,便看到了标题下方的 2020/05/19 小字。我 TM 谢谢你,微软,照着将近十个月前的文档鬼才配得起来啊。

我把目光投向了 Oh-My-Posh 的官方文档

方框,无尽的方框

虽然 Oh-My-Posh 的文档全是英文,但上面代码块样式的命令我总算认得吧,于是又快快乐乐地安装起来。

不会真有人不认得代码块吧?

Install-Module oh-my-posh -Scope CurrentUser -AllowPrerelease,完成。

Get-PoshThemes,完成。。。等等,为什么这么多方框?

image-20210313214547483冰山一角

我感觉到些许不妙,但还是继续跟着文档走。

Set-PoshPrompt -Theme jandedobbeleer,完成。

然后一坨奇形怪状的东西就出现在了我的终端上(上图第一个就是)。

Cascadia Code,说好的 PowerLine 支持呢?我在百度上也找不到解决方法(有一说一,要真能找到才算有鬼),只看到了有一个人提出了修改语言设置中的“使用 Unicode UTF-8 支持全球语言”的方法,但我试了依旧没有用处。

群里大佬也给我支了招,认为是我的字体出了问题,让我去下载其他的 NerdFont,总有一个靠谱的。然后我依次更换了 Fira Code 和 Jetbrains Mono 等字体,方框依旧,有的甚至更多了。

我绝望了,还是先去写会儿 npm (NoneBot Plugin Manager,我自己写的 NoneBot 插件管理器,简称也是 npm 一半是巧合一半是玩梗) 吧。

最后的救命稻草

这时,群里另一位大佬向我推荐了 StarShip,告诉我这一款终端没有很多的 Emoji 和 PowerLine 字符,就算有方框应该也不多,勉强能用。

试试吧,反正都已经到这个地步了。

然后我就跟前两次一样,按照文档上说的做,总算没有波折地成功了一会。

这次确实没有那么多的方框了,偶尔出现一两个也不影响使用,我也就继续用了。

结语

这件事的经历让我知道了,千万不要看过时的文档,否则事倍功半。

以及字符编码依旧是一个坑,指不定哪一天就遇上哪个东西不支持那种字符了。

顺便推荐一个 VSC 插件:VSC Netease Music,可以让你不用打开网易云便可以在 VSC 上听歌。今天下午刚装的,感觉还算不错,至少我在写代码的时候不用时不时切到网易云了。