如何打造好看还好用的 Windows Terminal
换回 Windows ,终端体验可能是最不尽人意的。由于环境所致,Windows 内置的 PowerShell 和 cmd 实用性远不比 Unix 系统的终端。系统、SSH、Git 在 Windows 上可能会同时需要 3 个终端……
既然出场配置不尽人意,那就自己动手打造最适合的终端。
效果
至于默认终端长什么样子大家自己心里清楚就好,我先放上我最后配置好的效果:
接下来我将详细介绍我是如何一步步实现这种效果的,部分内容可能过于繁复,各路高人可以选择性阅读。
让我们开始吧。
Windows Terminal 简介
Windows Terminal 是一款微软自家的 终端模拟器 ,拥有其他第三方终端难以匹敌的响应速度、完整的字符渲染机制(如果配置得当的话)、现代化风格的设计。这款 开源免费 终端自发布以来就好评不断,在眼花缭乱的第三方终端面前丝毫不乱阵脚,甚至连自家默认终端都完全不放过,照单全部碾压。
你可以点击上方链接前往 Microsoft Store 安装,或者使用 Scoop 一行命令安装:
scoop install windows-terminal
兴冲冲直接打开,好像还是很一般?
不急,我们还可以根据自身审美对其进一步完成个性化配置。
个性化配置
在 Windows Terminal 下拉菜单中点击 Settings
进入配置(或使用快捷键 Ctrl + ,
),会使用记事本打开配置文件。
而配置文件是一个 JSON 格式的文件,包含以下几个部分:
- 全局配置 Globals:在配置文件最外侧大括号内的内容,会影响整个窗口的配置。如亮/暗主题,默认打开终端等。
- 环境配置 Profiles:
profiles
内的内容,存放单个环境的配置。这里可以单独配置每个在 Windows Terminal 中打开的终端,如 PowerShell,CMD,Git Bash 等。 - 色彩配置 Schemes:
schemes
内的内容,放置终端的主题色彩配置。这些配置可以在环境 Profiles 中被单独调用。 - 快捷键配置 Keybindings:
Keybindings
内的内容,适用于终端内的自定义快捷键配置。
大致了解 Windows Terminal 中各项配置的意义后,我们就可以着手自定义自己的配置了。
全局配置 Globals
这是在配置文件最外侧大括号内的内容,整个配置文件一开始的地方,适用于整个窗口。
我们可以自定义:
- 默认终端
defaultProfile
:Windows Terminal 打开时默认开启哪个终端,填入对应终端的 UUID 即可(环境配置 Profiles 中会详细介绍 GUID) - 亮/暗主题
requestedTheme
:可以设为light
亮色主题、dark
暗色主题、system
跟随系统。 - ……
我只列举了常用的几个,如愿了解全部可以在本文最下方 References 中前往官方文档查看。
环境配置 Profiles
环境配置包含两大块 defaults
和 lists
,前者为所有环境的默认配置,后者为单个环境的特殊配置。
这里可以调整背景配置、字体相关、颜色配置(需要在后面 schemes 中有相关)、光标配置等。
也许你也注意到每个配置都有一个 UUID,这可以理解为配置的身份证号。它有一定格式,通过这个码就能准确地找到这个配置。全局配置中的默认终端就是填写环境的 UUID 来确定的。
默认配置就包含 Windows 自带的 PowerShell 和 CMD 。如果我们想新增一个配置,在PowerShell 中输入 new-guid
就可以新创建一个 UUID,按如下格式插入一段代码到 profiles
的 list
里:
"list":
[
{
// Make changes here to the git-bash.exe profile
"guid": "{12a5517e-7758-458a-adf1-c3cadeda9ac8}",
"name": "Git Bash",
"icon": "F:\\_work\\Windows-Terminal\\git-icon.png",
"commandline": "C:\\Program Files\\Git\\bin\\bash.exe",
"hidden": false
},
...
]
这里拿添加 Git Bash 举例。注意路径改为自己的,且路径的分节符用两个 \\
,因为一个反斜线会被识别为转义符。
你也可以使用 这个网站 生成一个独一无二的 UUID 。
如果你经常需要控制自己的 VPS,不妨试试单独配置一个环境,使得打开时输入密码直接使用 SSH 管理远程服务器(目前 PowerShell 已支持 SSH):
"list":
[
{
"guid": "{da0d1a9a-79de-403f-afe8-9f2353033a7b}",
"name": "VPS1",
"commandline": "powershell.exe ssh root@xxx.xxx.xxx.xxx"
},
...
]
此外还有背景配置和光标配置。我开启了背景半透明,需要设置如下两行:
{
"useAcrylic": true,
"acrylicOpacity": 0.6
}
第一项为开关,第二项为透明度。
我个人并不对背景图片很感冒,有时感觉过于花哨,不过还是介绍下如何开启:
{
"backgroundImage": "[[ Image Path ]]",
"backgroundImageStretchMode": "uniformToFill",
"backgroundImageOpacity": 0.6
}
第一个为图片路径,第二个为伸缩模式,第三个为背景透明度。
配色主题 Schemes
控制 Winds Terminal 的同样是 JSON 文件,放在 shremes
中。可以自己调,也可以尝试别人做好的配置:iTerm2 Color Schemes 。这里包含许多适配了 Windows Terminal 的色彩方案,将喜欢的直接复制过来即可。
然后在环境配置中对应环境添加 colorScheme
属性使方案生效。
快捷键配置 Keybindings
大家可以按住 Alt
然后点击下拉菜单的 Settings 查看默认配置。不要修改这个文件的内容,完全不会生效的。
其实默认的快捷键就挺好用的。唯一单独拿出来说道的是 Quake mode,此模式可以让 Windows Terminal 在按下快捷键后从屏幕顶部滑落,再按一次就会消失,且在运行后全局生效。Quake mode 的快捷键是 “win+`”,但是 Ubuntu 中的习惯是 Ctrl+Alt+T,如果有后者的习惯这里值得更改。
把 Windows Terminal 添加到右键菜单
也许你已经习惯了「右键 - Git bash Here」,但是我们说过我会把所有工作都集中到着一个终端完成的,所以后面我也会说明该如何才能直接在 Windows Terminal 中使用 Git Bash 全部功能。不过在此之前,让我们先看看怎么把 Windows Terminal 添加到右键菜单中。
首先上微软 GitHub 地址下载 Windows Terminal 的图标到本地,地址 。
然后新建一个 .reg
的注册表文件,名字任意、位置任意,并填入:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt]
@="Windows Terminal here"
"Icon"="[[ 图标绝对位置 ]]"
[HKEY_CLASSES_ROOT\Directory\Background\shell\wt\command]
@="C:\\Users\\[[ 用户名 ]]\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe"
所有路径还是要使用两个 \\
,原因同上。
然后执行这个文件即可。
当然你使用 Quicker 等右键效率软件也可以得到相似效果,这里就不展开了。
如果遇到打开路径不对的问题,可以参照 #故障处理
一节的方法。
更进一步——Oh My Posh
按照上面的步骤来,还是有点不尽人意。没有 Git 仓库提示,全部黑底白字也有点厌倦,更别说一类像 Oh My Zsh 那些高效的插件了。
不过 Zsh 有 Oh My Zsh ,Poweshell 也有自己的 Oh My Posh ,用于实现一部分常用内容。
oh-my-posh 安装并应用主题
使用下列命令安装 oh-my-posh
并初始化:
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
Set-Prompt
Set-Theme Paradox
# 主题根据自己喜好来选,可以去上面 GitHub 链接向下翻查看预览
然后用下面命令打开默认 PowerShell 的启动配置文件(如果没有就创建):
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
notepad $PROFILE
并在弹出的窗口中粘贴以下内容:
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox
之后每次打开 Windows Terminal 中的 PowerShell 都会做好自动完成 oh-my-posh
的引入和主题配置。
很简单是不是?但是接下来我可能要告诉你,这里是整个配置中坑最多的!你可能会遇到执行权限的问题;当你好不容易成功执行,又发现字符渲染出事了。我想告诉大家,这里是我折腾最久的地方,从零碎的互联网中爬了大量教程才出坑。
如果你没有遇到任何问题,祝贺你。如果你也像我一样出事了,我把这里的详细解决思路放在后面 #故障处理
一节专门说明。相信我,这是你在搜索引擎前 10 页能找到最详细的处理方法了。(目前而言,可能之后有人直接抄袭我的做法也说不准)
插件功能的实现
光好看还不行,还要向 Zsh 那样强大才更好。
Oh My Zsh 有像高亮、自动补全等提高效率和易用性的插件。Oh My Posh 原生就支持高亮了,自动补全也有专门插件实现,那就是 PSReadline 。
输入下面命令打开 $profile
:
notepad $profile
然后将官方给的 样例 全部复制进去,注意命名空间的申明(using namespace
)一定要在最上端。并在 Import-Module PSReadLine
下面加上一行:
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
用于实现 Tab
触发选择模式。
此插件的方法很多,大家可以配合样例内的注释理解或更改。
将 Git Bash 添加到环境中
首先要说明的时,PowerShell 时直接支持了 Git 操作的!只要你安装了 Git 环境。
但是 Git Bash 带上的 GNU 工具包就没能直接支持了,像是 GPG 等。
这时候我们可以在系统中添加环境变量来实现 PowerShell 中一同支持 Git Bash 所有操作,彻底抛弃 Git Bash,全部转移至 Windows Terminal 。
将 Git 文件夹下的位置 usr/bin/
添加到 path 中,重启终端再尝试就发现都支持了。
到这里你应该已经可以彻底投入 Windows Terminal 怀抱了。
故障处理
折腾过程中难免遇到各种问题,我这里记录了一些比较有代表性的。欢迎留言或私信告诉我还有那些需要注意的地方,不胜感激。
右键打开目录错误
如果用右键打开时发现地址不对,比如在家目录而非当前目录。这时你需要在「Settings - profiles - defaults」中添加以下内容:
{
"startingDirectory": "."
}
这样默认打开目录就是当前目录了。
脚本执行权限问题
PowerShell 脚本 .ps1
有四种执行策略:
- Restricted —— 默认的设置, 不允许任何 script 运行
- AllSigned —— 只能运行经过数字证书签名的 script
- RemoteSigned —— 运行本地的 script 不需要数字签名,但是运行从网络上下载的 script 就必须要有数字签名
- Unrestricted —— 允许所有的 script 运行
你可以输入下面的命令查看当前执行策略:
get-executionpolicy
而由于 PowerShell 每次打开都是通过一个 .ps1
脚本完成个性化配置的,所以失败很有可能是因为权限不足导致的。
我们可以通过下面命令更改执行策略:
Set-ExecutionPolicy [[ 策略名 ]]
调成 RemoteSigned
或者 Unrestricted
均可,建议前者。
之后重启终端就可以正常初始化了。
PowerLine 字体渲染
*渲染错误
默认 PowerShell 「新宋体」不耐看不说,在渲染某些字符(比如 Git 相关符号)还会出乱码。而目前我所了解,中文环境下支持这样严格要求的字体,只有「Sarasa Gothic / 更纱黑体 / 更紗黑體 / 更紗ゴシック」,可以前往更纱黑体 GitHub 页面 下载。
别看压缩包只有 200+M ,全部解压后将近 10G 大小!
注意剩余空间,而且字体完全没必要解压在 C 盘,随便解压到一个位置然后双击打开后安装即可。
适合代码阅读环境的等宽字体有「等距更纱黑体 SC」或者「Sarasa Mono SC Regular」,名称可能有细微差别,以自己情况为准。
之后在 Windows Terminal 的「Settings - profiles - defaults」中加入:
{
"fontFace": "等距更纱黑体 SC",
}
如果你完全没有中文字体需求(系统语言、终端语言、路径名称、环境变量等完全不含中文),你也可以尝试下一款专门为阅读代码设计的字体 JetBrains Mono 。不过官方说明暂时没有支持中文的计划,详见这个 Issue 。
当然你也可以尝试其他 PowerLine 字体 ,安装后在 Settings 中做好与上面类似配置即可,至于有没有专门做好中文字体显示优化就要看你的选择了。
多环境命令冲突问题
如果你出现下面这样的报错,可能是 Windows 和引入的 Git 中命令有重复甚至冲突。
可以使用命令 Get-Alias
查看 PowerShell 中的命令,对于冲突的命令使用 Remove-Item alias:\[[ Command Name ]]
来移除。
下面列举几个我遇到的,欢迎大家补充。
Remove-Item alias:\rm
Remove-Item alias:\ls
Remove-Item alias:\cp
后
Windows Terminal 的出现可以说拯救了 Windows 上糟糕的命令行体验。原生支持让它拥有十分可观的速度和兼容性,同时也拥有很大的后期定制空间。如果你有配置 WSL(Windows Subsystem for Linux),配合 Windows Terminal 也可以获得更好的开发体验。
但是就像 Linux 软件生态远不及 Windows 一样,Windows 的命令行生态也是远不及 Linux 的。这只能慢慢填补,但至少我们现在能感受到更多希望。
这回,我们总该在 Windows 上更多青睐命令行了吧?
官方文档:https://github.com/microsoft/terminal/blob/master/doc/cascadia/SettingsSchema.md