Windows Terminal 美化实例

前言

众所周知,Windows的默认终端一直遭受诟病,以傻、黑、粗闻名于世(如图所示)



于是微软于今年年初的Build2019大会上公布了新的终端模拟器——Windows Terminal,并且在6月中旬在Micorsoft Store上发布了预览版的Windows Terminal。

可是当你兴冲冲地打开下载好的终端预览版,就会发现这一点都不美观,起码没有达到宣传视频(需要梯子查看)中的效果。



于是乎,我经过一系列的探索,成功将Windows Terminal和Powershell进行一番改造,成功变成了如下的样子(至少美观许多)



改造PowerShell

默认的PowerShell并不美观,仅仅是将原来“傻大黑”变成了“傻大蓝”。(由于我的PowerShell已经改造过了所以我这里就没有办法截图了)我们的做法是在PowerShell里面加一个PowerLine,然后剩下的,在Terminal中配置。

安装PowerLine的方法很简单,我们要先安装oh-my-posh,首先打开一个PowerShell,输入

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

如果你使用管理员权限打开PowerShell并且想把oh-my-posh安装到所有用户,则输入

Install-Module posh-git
Install-Module oh-my-posh

这里如果让你允许什么不可信的来源,输入Y表示同意即可。

安装完成后,输入

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme PowerLine

如果你的电脑里没有安装Git,在输入Import-Module posh-git会报错,解决方法是安装Git或者把这一行去掉。

但是这次使用Import-Module的指令,再次启动PowerShell就会发现没有效果,这是因为这些指令仅限于本次会话的PowerShell有效,因此,若要使这一效果在每次启动的时候都有效,那就要将其添加到启动脚本中。

打开~\Documents\WindowsPowerShell,新建文本文档,叫做Microsoft.PowerShell_profile.ps1(记得开拓展名显示),输入以下内容,保存。

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme PowerLine

这样,在每次PoweShell打开的时候都能启用PowerLine主题。

可是这样,PowerShell打开的时候仍有乱码(或者说,有违和感),这是因为没有给你使用的字体链接表情,乱码的地方其实就是表情符号。



这里对于字体的链接,要在下一部分进行讲解,因为这涉及到字体选择的问题,对于使用的字体,要单独设置。

改造终端

安装Windows Terminal

首先你要讲你的Windows升级到1903(Windows 10五月更新)才能使用新版的Terminal,目前Windows Terminal在Microsoft Store上有下载,这是目前最简单的安装方法了。

在商店里搜索terminal或者使用下面的链接 购买 Windows Terminal (Preview) - Microsoft Store zh-CN

在Windows Terminal的GitHub仓库中,也提供了使用Chocolatey安装的方法(非官方编译):

choco install microsoft-windows-terminal

当然你如果比较巨你也可以从源代码编译运行甚至自己加一些功能。(笑

下载略经修改的配置文件

Windows Terminal的配置文件储存在~\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\RoamingState\profiles.json这个json文件中。

这个json文件比较大,放在这里占用的空间也比较大,我就把配置文件和其他用到的一些东西用到的放在了我的一个GitHub仓库中。单纯是配置的json文件也可以在这里查看

将你下载的所有东西,解压覆盖在~\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\RoamingState这个文件夹中。

稍微熟悉一下终端配置的JSON文件

下载完成后,使用你喜欢的编辑器(比如VS Code)打开上面提到的profiles.json,然后你可以看到前几行是:

 "globals" : 
    {
        "alwaysShowTabs" : true,
        "defaultProfile" : "{08b5e85b-3615-463d-8df1-70bc4703843f}",
        "initialCols" : 120,
        "initialRows" : 30,
        "keybindings" : 
        [
            \\...
        ]
        \\...
    }

其中alwaysShowTabs是是否永远显示上面的标签栏,如果值是假,就会自动隐藏标签栏。defaultProfile是默认启动的配置文件,这是一个GUID,对应着下面的配置文件,这里填着哪个配置的GUID,Terminal启动时就会默认执行哪一个配置文件。initialColsinitialRows则表明启动时默认的终端是多长多宽。keybindings是表示终端的快捷键,看字面意思可以明白的八九不离十,这里就不赘述了。

然后往下翻,翻到profiles那一栏,然后我们看第一个配置,这里选项比较多,我就挑几个比较常用的和与外观有关的说明一下。

 {
    "acrylicOpacity" : 0.75,
    "closeOnExit" : true,
    "colorScheme" : "Solarized Light",
    "commandline" : "powershell.exe",
    "cursorColor" : "#657B83",
    "cursorShape" : "bar",
    "fontFace" : "Sarasa Term SC",
    "fontSize" : 12,
    "guid" : "{08b5e85b-3615-463d-8df1-70bc4703843f}",
    "historySize" : 9001,
    "icon" : "ms-appdata:///roaming/powershell_32px.png",
    "name" : "PowerShell",
    "padding" : "0, 0, 0, 0",
    "snapOnInput" : true,
    "startingDirectory" : "%USERPROFILE%",
    "useAcrylic" : true
}

acrylicOpacity是不透明度,值越大,背景就越浓,否则就越淡。useAcrylic是是否开启毛玻璃特效,值为false的时候就没有毛玻璃特效。colorScheme是颜色主题,这个在后面设置,但是名字一定要与后面的值一样。cursorColor是光标的颜色,cursorShape是光标的形状,分别对应的就是

  • bar


  • empytBox


  • filledBox


  • vintage


commandline就是对应启动的shell,这里powershell.exe表明启动的是PowerShell,当然你也可以换成pwshcmd甚至是VS的开发命令行、ssh直接连接远程主机或者虚拟机甚至是我开发的邪性命令行游戏Futa Hand Extender。只要是命令行的程序,这里都可以填入,但是要注意一下json的语法。

这里要在多说一句,这里填入wsl命令就可以启动默认的Linux子系统,wsl ~就可以让启动目录是wsl的用户主目录~而不是/mnt/c/windows/system32,然而,如果子系统中使用的默认shell不是bash(我就换成了zsh),在使用wsl -d Ubuntu-18.04 ~指定特定发行版且指定用户主目录的时候就会出现权限不足的问题。这可能是一个bug。

fontFace就是字体了,我这里使用的是更纱等距黑体,即Sarasa Term SC,这款字体是开源字体,可以美观地显示中文,而且是等宽字体,也就说在终端中不会出现排版错误,这款字体你可以在这里下载。当然你也可以使用你喜欢的等宽字体(最好是等宽,但不强制)。guid就是这个配置的GUID,对于每一个配置,都应该使用不同的GUID,否则Terminal就会发生错误,GUID可以使用Powershell访问CLR生成,即在PowerShell中打出以下指令就可以获得一个新的GUID:

[System.Guid]::NewGuid().ToString()

icon则是这个配置的图标,也就是在标题栏和新建中显示的图标,比如



ms-appdata:///roaming/路径就是json储存的路径,我已经在仓库中放了一些图标,你也可以放置一些图标到文件夹中,然后就可以使用这个图标(因为没找到好看点的PowerShell图标我就直接用了Core的图标)。name就是配置的名称,在新建菜单中显示的名称。

然后翻到在下面的schemes,这里啥都不重要,因为你自己是不可能调出好看的颜色的,主要看name这里是这个颜色主题的名字,这个名字对应了你上面配置文件所使用的名字,名字不对就不能使用这个主题。对于颜色主题的选择,会在后面的部分介绍。

注册字体

对于你想使用的字体,若要让其正常显示PowerLine的内容,就要修改注册表。

打开注册表编辑器,定位到

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

新建一个string值,名称为你使用字体的名称(比如Sarasa Term SC),值为

MICROSS.TTF,Microsoft Sans Serif,108,122
MICROSS.TTF,Microsoft Sans Serif
MINGLIU.TTC,PMingLiU
MSMINCHO.TTC,MS PMincho
BATANG.TTC,Batang
MSYH.TTC,Microsoft YaHei UI
MSJH.TTC,Microsoft JhengHei UI
YUGOTHM.TTC,Yu Gothic UI
MALGUN.TTF,Malgun Gothic
SEGUISYM.TTF,Segoe UI Symbol

当然,如果你懒,或者怕误操作,并且就用我安利的字体,那你就可以将以下内容复制到一个reg文件中,双击自动导入。

Windows Registry Editor Version 5.00
​
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Sarasa Term SC"=hex(7):4d,00,49,00,43,00,52,00,4f,00,53,00,53,00,2e,00,54,00,\
  54,00,46,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,\
  00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,2c,00,31,00,\
  30,00,38,00,2c,00,31,00,32,00,32,00,00,00,4d,00,49,00,43,00,52,00,4f,00,53,\
  00,53,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,\
  6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,\
  00,66,00,00,00,4d,00,49,00,4e,00,47,00,4c,00,49,00,55,00,2e,00,54,00,54,00,\
  43,00,2c,00,50,00,4d,00,69,00,6e,00,67,00,4c,00,69,00,55,00,00,00,4d,00,53,\
  00,4d,00,49,00,4e,00,43,00,48,00,4f,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,\
  53,00,20,00,50,00,4d,00,69,00,6e,00,63,00,68,00,6f,00,00,00,42,00,41,00,54,\
  00,41,00,4e,00,47,00,2e,00,54,00,54,00,43,00,2c,00,42,00,61,00,74,00,61,00,\
  6e,00,67,00,00,00,4d,00,53,00,59,00,48,00,2e,00,54,00,54,00,43,00,2c,00,4d,\
  00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,48,00,\
  65,00,69,00,20,00,55,00,49,00,00,00,4d,00,53,00,4a,00,48,00,2e,00,54,00,54,\
  00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,\
  4a,00,68,00,65,00,6e,00,67,00,48,00,65,00,69,00,20,00,55,00,49,00,00,00,59,\
  00,55,00,47,00,4f,00,54,00,48,00,4d,00,2e,00,54,00,54,00,43,00,2c,00,59,00,\
  75,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,20,00,55,00,49,00,00,00,4d,\
  00,41,00,4c,00,47,00,55,00,4e,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,61,00,\
  6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,00,00,53,\
  00,45,00,47,00,55,00,49,00,53,00,59,00,4d,00,2e,00,54,00,54,00,46,00,2c,00,\
  53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,53,00,79,00,6d,00,62,\
  00,6f,00,6c,00,00,00,00,00

寻找合适的颜色主题

我这个配置文件内置了几个颜色主题,并且都是亮色的,很不符合一些人的胃口,这时候我们就需要在mbadolato/iTerm2-Color-Schemes这个仓库中寻找自己喜欢的颜色主题,这里颜色主题有足足两百多个,选完自己喜欢的,就可以到仓库的windowsterminal文件夹里面下载适用于Windows Terminal的格式。下载之后,粘贴到schemes这个数组里,然后在想应用的配置文件里的colorScheme设置为你新下载的主题的名字。如果你不知道怎么操作,可以简单地学习一下json语法或者直接简单粗暴,替换不需要的。

然后如果你觉得你的光标颜色看不清楚,那你就需要修改对应配置文件的cursorColor,你可以简单粗暴地修改成#000000(黑色)或者#FFFFFF(白色),你也可以到上面的仓库里的xfce4terminal/colorschemes 文件夹里查看你想要的颜色主题(我下面以3024 Day为例)

点开之后,看到

[Scheme]
Name=3024 Day
ColorForeground=#4a4543
ColorBackground=#f7f7f7
ColorCursor=#4a4543
ColorPalette=#090300;#db2d20;#01a252;#fded02;#01a0e4;#a16a94;#b5e4f4;#a5a2a2;#5c5855;#e8bbd0;#3a3432;#4a4543;#807d7c;#d6d5d4;#cdab53;#f7f7f7

其中ColorCursor=#4a4543就表明了#4a4543是我们原配的光标颜色。

(我也不知道Windows Terminal为什么这么鬼畜光标颜色单独算的

结束语

由于Windows Terminal仍处于预览阶段,因此还没有图形化的设置编辑器,因此当你点击上面的设置之是会简单粗暴地使用你的默认编辑器打开json文件,因此我们才需要这么大力气来进行个性化配置(当然之是装个PowerLine是很简单的)。

最后还是恭喜Windows结束了默认的终端模拟器十分难看的阶段,毕竟这个开源的Windows Terminal,将要成为Windows系统的默认终端模拟器。

参考资料

EOF

不要向我要文中提到的邪性命令行游戏

编辑于 2019-08-02