来谈谈Windows Terminal吧
2020-05-08 / CHINQ / / 17 min. read

Windows Terminal

早在2019年6月的时候,Windows Terminal就发布出来在Microsoft Store上了
Windows Terminal 发布以后,立刻引爆了整个技术圈,各种社交媒体上纷纷传播着它的消息,它开源的 GitHub 仓库的星标数一路飙升(2020年5月8日已经61k),迅速成为当日 GitHub 趋势榜的首名,甚至连它 issue 区都挤满了人——以至于项目运营团队紧急出场管理
下面来看看官方预告视频

在我看来,WT 的一些特性更偏向于「润物细无声」型。比如基于 DirectX 的字体渲染引擎,原生支持 Unicode 字符、Emoji、连字等,虽然不起眼,但确确实实地提升了用户体验。而且……亚克力背景真的很好看呀!好看是第一生产力嘛

作为微软团队主导开发的开源项目,我对其还是抱有很大信心的

安装

注意:Windows Terminal 要求 Windows 10 1903 (build 18362) 及以上版本
如果你无法使用 Microsoft Store,也可以下载 releases 页面打包好的 .msixbundle 手动安装(记得先安装依赖库 Desktop Bridge VC++ v14 Redistributable Package)
也可以使用 Chocolatey 包管理器来安装:
choco install microsoft-windows-terminal
或者使用 Scoop 安装(通过 @h404bi 维护的第三方 bucket):
scoop bucket add dorado https://github.com/h404bi/dorado
scoop install windowsterminal
如果你愿意,你还可以手动编译安装,具体请参考 官方文档

配置

安装完成之后,WT 默认是长这样的:

是不是感觉没什么出彩的?让我们给它打扮打扮!

2020/03/14 更新:现在 Windows Terminal 自带 Cascadia Code 字体,开箱颜值就挺高了。而且这字体我很喜欢,Linux 上作为终端字体也很好看

配置文件简介

目前(截至 2019 年 10 月 现在也一样),我们只能通过 settings.json 配置文件来配置 Windows Terminal。
在标签右侧的下拉菜单中点击「Settings」,即可用你默认的 .json 文件编辑器打开配置文件。该文件的实际位置在这里:

C:\Users%UserName%\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
按住 Alt 键再点击「Settings」,可以打开默认的配置文件 defaults.json。你可以将其作为参考修改 settings.json,但注意不要直接修改 defaults.json,因为对其做出的改动均不会被保留

全局配置

这里仅介绍些常用配置:

{
    // 默认打开的 Profile GUID(下面会详细介绍)
    "defaultProfile": "{e1e1ac58-02c1-456a-a857-01149673a65d}",
    // 终端窗口默认大小
    "initialCols": 120,
    "initialRows": 30,
    // 亮色或暗色主题,可选值 "light", "dark", "system"
    "requestedTheme": "system",
    // 合并标题栏和标签栏
    "showTabsInTitlebar": true,
    // 如果 showTabsInTitlebar 与本值同为 false 时,自动隐藏标签栏
    "alwaysShowTabs": true,
    // 在标题栏上显示当前活动标签页的标题
    "showTerminalTitleInTitlebar": true,
    // 双击选择时用于分词的字符
    "wordDelimiters": " /\\()\"'-.,:;<>~!@#$%^&*|+=[]{}~?\u2502",
    // 选择时复制到剪贴板
    "copyOnSelect": true,
    // 标签页宽度不固定
    "tabWidthMode": "titleLength",

    // ...
}
添加新 Shell

以 WSL 为例(虽然 WT 自带了 WSL 的 Profile,不过这里不管它):

"profiles": {
    "defaults": {
        // 所有 Profile 共用的设置可以放这里,就不用写多次了
        // 字体设置
        "fontFace": "Cascadia Code",
        "fontSize": 11,
        // 光标类型,可选值 "vintage" ( ▃ ), "bar" ( ┃ ), "underscore" ( ▁ ), "filledBox" ( █ ), "emptyBox" ( ▯ )
        "cursorShape": "underscore",
        // 背景亚克力透明效果(窗口失去焦点时无效)
        "useAcrylic": true,
        "acrylicOpacity": 0.8
    },
    "list": [
        {
            // 每个 Profile 的唯一标识符,生成方法见下
            "guid": "{e1e1ac58-02c1-456a-a857-01149673a65d}",
            // 设置为 true 即可在新建菜单中隐藏
            "hidden": false,
            // 名字,会显示在菜单中
            "name": "Ubuntu",
            // 启动命令行
            "commandline": "wsl.exe",
            // 启动目录
            "startingDirectory": ".",

            // 背景图片
            // "backgroundImage" : "X:\\path\\to\\background.png",
            // "backgroundImageOpacity" : 0.5,
            // "backgroundImageStretchMode" : "uniformToFill",

            // 菜单与标签中显示的图标
            "icon": "X:\\path\\to\\ubuntu.png",
            // 配色方案,见下
            "colorScheme": "Tango Dark",
            // 光标颜色
            "cursorColor": "#FFFFFF",

            // ... 其他配置请参见官方文档
        }
    ]
}

GUID 网上有很多生成器,你也可以用 PowerShell 命令生成一个:

[guid]::NewGuid()

调整配色

从 defaults.json 中可以看出,WT 内建可用的配色方案有:Campbell、Campbell Powershell、Vintage、One Half Dark、One Half Light、Solarized Dark、Solarized Light

调整快捷键

修改按键绑定
默认的一些热键:

打开新标签页:Ctrl + Shift + T
使用指定 Profile 打开标签页:Ctrl + Shift + 1…9
关闭标签页:Ctrl + Shift + W
前一个标签页:Ctrl + Tab
后一个标签页:Ctrl + Shift + Tab
复制:Ctrl + Shift + C
粘贴:Ctrl + Shift + V
想自定义的话直接参照 defaults.json 修改 keybindings 即可

添加右键菜单

一个趁手的终端,很重要的一点就是能够随时呼出。目前,有这么几种快速打开 Windows Terminal 的方式:

Win + S 或者 Win + R,输入 wt 按回车;
资源管理器中按 Ctrl + L,输入 wt -d . 回车在当前目录中打开(如果设置了 “startingDirectory”: “.” 可以直接输入 wt);
使用 Quicker 或者 AutoHotkey 等第三方工具。
不过我还是比较习惯传统的右键菜单「在这里打开终端」的方式。WT 目前还没有内置这一功能,想要手动添加也比较麻烦(下文参考了这个 issue 中的方法)。
以管理员权限打开 PowerShell,运行以下命令:

$basePath = "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell"
New-Item -Path "$basePath\wt" -Force -Value "Windows Terminal here"
New-ItemProperty -Path "$basePath\wt" -Force -Name "Icon" -PropertyType ExpandString -Value "X:\path\to\terminal.ico"
New-Item -Path "$basePath\wt\command" -Force -Type ExpandString -Value '"%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe" -p Ubuntu -d "%V"'
如果你足够熟练,也可以自行通过其他方式修改注册表,反正就那么些字段,路径正确就行了。Windows Terminal 的图标可以在 这里 获取

后记

到这里,WT 就基本配置完成了,下面是闲聊时间

我用过很多终端,Windows Terminal 虽然不错,但也没到要吹上天的地步

我认为,真正决定操作系统命令行体验的,不是终端,是 Shell。诚然,如果终端很漂亮的话,光看着也非常赏心悦目,但如果其中的 Shell 是 cmd.exe,那实际体验可能就令人抓狂了

在之前介绍 WSL 的文章中我也说过,我喜欢 WSL 的原因之一,就是它提供了一种以类 Unix 系统命令行的那一套东西去操作 Windows 的能力(比如 Bash 和各种 GNU 小工具)。PowerShell 是不错,论强大肯定不输给任何命令行 Shell,但我用不惯呀(不过最近我也有在学习)。以前的 Cygwin 等项目虽然也能达成同样的效果,但是因为其底层实现的不同,还是 WSL 来得更舒适一些

所以当我得知 WSL2 底层实现换成了虚拟机的时候是很抗拒的。系统调用翻译层的设计不是很惊艳吗?怎么直接就变成个小 VM 了?原本 WSL 最为人称道的(至少我是如此)互操作性要怎么办?距离我接受 WSL2,看来还是需要一定的时间

不过有一说一,Windows Terminal 还是很不错的

Microsoft,干得漂亮!❤️

我的美化方案

哦差点忘了,这里给一下我的美化方案json

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "confirmCloseAllTabs" :false,       //设置关闭多个tab时不提示
    "initialCols" : 120,                //默认宽度
    "initialRows" : 30,                 //默认长度
    "rowsToScroll" : "system",          //鼠标一次滚动行数,"system"为系统值
    "requestedTheme" :"system",         //主题,默认为"system"

    "profiles":
    {
        "defaults":
        {
            "padding": "8, 8, 8, 16",
            "snapOnInput" : true
            // Put settings here that you want to apply to all profiles
        },
        "list":
        [
            {
                //----------PowerShell------------
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false,
                "fontSize" : 12,                    //字体大小
                "foreground" : "#00ff00",         //字体颜色
                "cursorColor" : "#fbff00",        //光标颜色
                "cursorShape" : "bar",              //光标类型

                //设置背景
                "acrylicOpacity": 0.5,  //背景毛玻璃不透明度
                "useAcrylic": true,     //背景使用毛玻璃效果
                "background": "#232834",     //背景颜色
                "backgroundImage": "C:\\Users\\wordy\\Pictures\\windows_terminal_backgroundimage\\yourname.png",     //背景图片 请自行更改
                "backgroundImageOpacity": 0.5,    //背景图片透明度
                "backgroundImageStretchMode": "uniformToFill"     //背景图片拉伸效果
            },
            {
                //-----------CMD-------------
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "Command",
                "commandline": "cmd.exe",
                "hidden": false,
                "fontSize" : 12,                    //字体大小
                "foreground" : "#00ff00",         //字体颜色
                "cursorColor" : "#4495ff",        //光标颜色
                "cursorShape" : "bar",              //光标类型
                "snapOnInput" : true,

                //设置背景
                "acrylicOpacity": 0.7,  //背景毛玻璃不透明度
                "useAcrylic": true,     //背景使用毛玻璃效果
                "background": "#232834"     //背景颜色
                // "backgroundImage": "C:\\Users\\wordy\\Pictures\\windows_terminal_backgroundimage\\001.png",     //背景图片
                // "backgroundImageOpacity": 0.5    //背景图片透明度
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure",
                "hidden": false,                      //设置为true即可隐藏不用的 Azure Cloud Shell
                "fontSize" : 12,                    //字体大小
                "foreground" : "#00ff00",         //字体颜色
                "cursorColor" : "#4495ff",        //光标颜色
                "cursorShape" : "bar",              //光标类型
                "snapOnInput" : true,

                //设置背景
                "acrylicOpacity": 0.7,  //背景毛玻璃不透明度
                "useAcrylic": true,     //背景使用毛玻璃效果
                //"background": "#232834"     //背景颜色
                 "backgroundImage": "https://api.xp-play.top/v1/bingImage/",   //背景图片
                 "backgroundImageOpacity": 0.5    //背景图片透明度
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": 
    [

    ],

    //-------------设置快捷键-------------
    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": 
    [
        {
            "command" :"closeTab",          //添加一个关闭tab的快捷方式
            "keys" :
            [
                "ctrl+w"
            ]
        }
    ]
}

你可以使用了上次介绍的Jetbrains Mono字体哦
Bye~

😀
本文链接:
https://www.cqbg.ga/2020/05/08/%E6%9D%A5%E8%B0%88%E8%B0%88Windows-Terminal%E5%90%A7/