开发软件是一项挑剔的工作。在一天结束时,整个工作都是关于用一种奇怪的语言编写指令,给一个挑剔的解释器,它会关闭你所做的一切。好吧,是时候安装 Windows 终端,发现更好的方式了。
在这个终极指南中,您将了解到开发人员中最好的控制台之一;Windows 终端。您将全面了解几乎所有 Windows 终端功能。您将学习它如何帮助您在 Windows 命令行上完成任务。
Windows 终端通过现代终端功能如选项卡、面板,甚至背景图片,增强了控制台体验。您甚至可以在 Windows PowerShell 或 cmd.exe 旁边运行完整的 Linux shell,而无需在控制台会话之间切换。Windows PowerShell
本文将演示许多 Windows 终端的功能。这将是一个贯穿始终的实践教程,所以准备好开始工作吧!
先决条件
安装和使用 Windows 终端本身的要求非常基本。您只需要一台安装有 Windows 10 的机器,版本为 1903(2019 年 5 月)或更高。如果您想跟随本文中的所有演示,您还需要安装其他一些工具:
- 已启用的Windows 子系统用于 Linux (WSL) 功能,并安装了一个 Linux 发行版(所有演示都使用 Ubuntu 20.04)
- Visual Studio Code(VS Code)
- Python与安装了富文本库
- Visual Studio 2019或更高版本,需安装:
- Windows 10 1903 SDK
- 已安装的桌面开发组件与C++
- 已安装的通用Windows平台开发组件
- 已安装的C++(v142)通用Windows平台工具组件
终端vs.控制台vs.外壳
因为本文涵盖了许多术语,所以首先了解一些术语的区别非常重要,这样您就不会感到困惑。
尽管这些概念相似,但重要的是要注意终端不是控制台,也不是外壳。每个都有自己特定的目的。Scott Hanselman在一篇精彩的博文中详细解释了每个术语的定义,但以下是本文中将如何使用它们:
- 终端:Windows终端应用程序。
- 控制台:任何非Windows终端的控制台主机应用程序。
- 外壳:位于终端和操作系统之间的程序。(例如,pwsh,cmd,zsh等)
安装Windows终端
安装Windows终端有几种不同的方法,但到目前为止最简单(也是微软推荐的方法)的方法是从Microsoft Store安装。您可以下载两个不同版本;标准的Windows终端和Windows终端预览。
在本文中,您可以使用其中任何一个。安装过程很简单,所以我们不会在本文中进行介绍,并假设您已经安装了它。
当您首次打开Windows终端时,它看起来并不令人印象深刻。要达到理想效果,您需要进行许多调整,但一切都始于下面这样的窗口。

请注意,Windows终端有四个主要组件:
- 终端窗口 – 这是您将要进行大部分工作的地方,也是您可以进行最多自定义的地方。
- 选项卡名称 – Windows终端支持选项卡,这意味着您可以有不同的shell
- 新选项卡 – 此按钮将打开默认配置文件的新选项卡
- 配置文件列表 – 这将列出可供打开的配置文件。
Windows终端具有简约的布局,但其背后隐藏着许多功能。
从源代码构建终端
虽然这是Windows终端,并且它来自微软,但它也是完全开源的,这意味着如果你愿意,你可以为其做出贡献。它是一个具有非常活跃社区的C++程序。
尽管这是一个GA产品,但在撰写本文时仍在解决一些轻微的错误,并且有一些功能在未来开发的路线图上。也许你会帮助贡献给它们!
如果你是开发人员并且真的想深入了解代码,你可以从PowerShell构建Windows终端,按照以下步骤操作:
- 运行
git submodule update --init --recursive
来更新所有git子模块 - 运行以下PowerShell命令:
settings.json文件:定制所有内容
最终,你可能会想要将终端变成你自己的,并进行定制。Windows终端最好的一点就是它有多样化的定制性。最常见的自定义Windows终端的方法是编辑位于%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\目录中的settings.json文件。
你也可以通过点击配置文件列表并选择设置来访问settings.json文件。
settings.json文件是你将进行大部分Windows终端定制的地方,直到有可用的图形选项为止。
Windows 终端团队已经承诺在即将发布的版本中很快将发布一个GUI用于管理设置!
除了将所有设置存储在一个便捷的位置之外,当设置存储在一个JSON文件中时,您可以将您的设置放入源代码控制中,或者在移动到不同的机器时备份它们。
您甚至可以与他人共享设置。如果您想看一下示例settings.json是什么样子,请在这里查看一个。
settings.json 模式
如果您使用Visual Studio Code,终端将包括一个JSON 模式,它将帮助验证您在settings.json中进行的任何自定义,包括自动填充任何新的设置。
一旦您的更改保存(只要settings.json仍然有效),新的更改将立即在终端中反映出来,或者会在不需要刷新终端的情况下显示错误。
虽然不需要使用 Visual Studio Code 来编辑 JSON,但在自定义 Windows 终端时,强烈推荐使用。
目前有四个不同的部分控制着Windows终端的外观和感觉:settings.json 的Globals、Profiles、Schemes和Key Bindings。让我们来看看每个部分。
Globals
全局部分 负责确定Windows终端的行为。始终位于文件的顶部,全局部分控制诸如关闭时确认、视觉主题和默认配置文件等内容。您可以在以下代码片段中看到一个示例。
Profiles
A profile is a configuration of the Windows Terminal that has its own shell, theme, and settings. When you open up a Windows Terminal profile, it will open a session with the assigned shell, environment, or WSL distribution. This means you can have different shells open at the same time, or different sessions of the same shell, which can be useful when testing code cross-platform or need to run a background process.
Windows终端默认带有三个配置文件:Windows PowerShell、cmd.exe和Azure Cloud Shell。如果您安装了WSL,它还将为您安装的每个WSL发行版生成一个配置文件。它还包括一个defaults部分,将应用于settings.json中的每个配置文件的设置。这是放置Unicode兼容字体的好地方,稍后将在本文中介绍。
你可以在以下代码片段中看到个人资料的示例。
创建新个人资料
设置个人资料可以是有用的,如果你想要在同一个 shell 上添加变体,或者向终端添加自定义远程个人资料。
要在 settings.json 中创建一个新的 Windows 终端个人资料,您需要执行以下步骤:
确保在每个个人资料后面都添加逗号,以使 JSON 有效。
- 复制您的个人资料部分中的任何个人资料。这些从 JSON 文件中的 list 节点下的
[
开始,到]
结束。这是上面第七行到第十四行。 - 通过在任何 PowerShell 会话中运行
[guid]::NewGuid()
来生成新的 GUID。将您新个人资料中的guid
的当前值替换为您生成的 GIUD。当终端设置默认个人资料时,GUID 是随机生成的。 - 添加或更改任何其他参数以自定义个人资料。
- 复制 settings.json 的内容,并通过 JSON Lint 或其他 JSON 校验器验证它仍然有效。修复任何问题。
- 保存您的更改。
配置文件中有许多可配置的选项。请记住,如果你在 settings.json 文件的默认部分中有一个设置,并且你在新配置文件中设置了相同的设置,那么你将覆盖默认设置。要获取完整的细节,请查看 Windows 终端设置文档。
方案
此部分涉及 Windows 终端配置文件的颜色方案。颜色方案告诉终端每个颜色在终端中显示时要使用的十六进制值。由于终端可以以 24 位渲染颜色,这些颜色可以非常创造性。每个方案都会有一个名称和一组映射到十六进制值的颜色列表,可以像下面显示的那样轻松更改。
在使用 Windows 终端中的该方案时,这些颜色将对应于背景和文本颜色。如果你在 Visual Studio Code 中打开了 settings.json,你可以点击具有图形滑块的十六进制值,该滑块显示实际的颜色,如下所示。

终端主题(在 Windows 终端中称为方案)在终端程序世界中并不罕见。虽然没有一种方法可以创建适用于不同终端应用程序的主题(方案),但无论您使用哪种应用程序,您都可以找到许多工具来创建它们。您可以很容易地找到一个预制的,或者自己制作一个!

按键绑定
按键绑定是 Windows 终端分配热键的方式,用于执行新窗格、标签甚至基本操作如复制和粘贴。有很多操作可以分配自定义热键,这样您就可以轻松地自定义终端,使其符合您的使用习惯。
您可以在下面的代码片段中看到一些默认的按键绑定。
到目前为止,您的终端可能已经开始按照您的期望方式运行,但您还没有完成。现在是时候学习如何继续自定义终端的外观和感觉了。
视觉设置
当你把大部分的工作生涯都花在屏幕上阅读文字时,值得多花一些时间让文字更容易阅读。无论是改变字体、大小还是颜色,为你的新Windows终端调整外观都将在整整一天的工作后大大提升阅读体验。
文字增强
Windows终端最广告的功能之一是24位颜色支持和加速的文本渲染。这可能听起来并不令人印象深刻,直到你将其与powershell.exe或cmd.exe的文本和颜色渲染进行比较。使用Python的rich库来演示,就很清楚地展示了旧控制台和Windows终端在渲染能力上的巨大差异。

在Windows终端和powershell.exe中打开Python的rich库
Windows终端还支持Unicode字符,这意味着它可以用于其他字母表和符号,包括西里尔字母、汉字等任何字符都可以正常显示。这得益于Cascadia Code字体,稍后将进行介绍。

在Windows终端和powershell.exe中写日文汉字
这具有一些明显的国际化优势,但支持Unicode和UTF-8还意味着Windows终端还可以支持……
Emoji ?
表情符号可能看起来不像是一个在命令行工具中包含的有用元素,但它们在开发中变得越来越普遍。软件工程师们正在使用它们来标记提交和问题,使用诸如Slack或Microsoft Teams之类的应用程序快速回复消息,甚至还有一个表情符号编程语言。虽然其中一些肯定比其他一些更有用,但很明显表情符号不会消失。
以下是在powershell.exe控制台上呈现表情符号的示例,以及在使用Python的rich库的Windows终端中的效果。注意The Terminal is pretty
这一行并看到其中的区别。

使用Python rich文本库显示表情符号
Cascadia字体
如前所述,Cascadia Code字体可以显示某些字符。但该字体还具有一些其他微妙的变化,使其更容易长时间查看,比如连字。
PS: 设计Windows终端的同一团队专门为Windows终端设计了Cascadia Code字体。
除了特殊字符外,Cascadia Code字体还支持连字。连字是在屏幕上显示时稍微不同的符号。您可以在这里查看Cascadia Code支持的连字列表。

A printout of all the ligatures supported by Cascadia Code. Code here.
如果您不喜欢使用连字,但仍想要Cascadia Code的其他好处,Windows终端还附带了一种名为Cascadia Mono的字体,它只做到这一点。它们每个都有一个针对Powerline的变体(Cascadia Code PL和Cascadia Mono PL),下面将介绍它们。
Powerline
Powerline最初是一个为shell添加信息的vim插件,在Linux世界中已经存在很长时间了。其想法是在提示符中提供更多信息,在控制台工作时可以轻松获取更多信息。
Powerline已被移植、克隆和复制到所有现代shell中,包括PowerShell,但由于以前的控制台的限制,它一直缺少一些功能。终端通过包含称为glyphs的特定符号来解决这个问题。Glypes用于在powerline中以一瞥提供更多信息。
Powerline在PowerShell中
对于PowerShell,您可以通过使用下面的示例代码安装oh-my-posh来配置类似于powerline的提示符。
安装完成后,您的 PowerShell 提示符将提供更多信息,包括 git 分支名称和远程与本地存储库之间的提交。您可以在下面看到一个示例。

这是来自 oh-my-posh 的 Paradox 主题,并对其进行了一些自定义,以显示当前操作系统和 PowerShell 版本。
Bash 中的 Powerline
对于 Bash,您需要安装类似于 zsh 或 fishshell 的外壳。这些将向终端添加一些功能和自定义高亮显示,但单独使用起来可能有些困难。建议您还安装 zsh 的框架,如 ohmyzsh,这将使使用它变得更容易。ohmyzsh 提供了类似于 oh-my-posh 为 PowerShell 提示符提供的主题和 bash 提示符自定义。
安装完成后,您可以通过修改 ~/.zshrc 文件中的 ZSH_THEME 属性来更改主题。使用像 vim 或 nano 这样的编辑器更改它并保存文件。完成后,运行 source ~/.zshrc
,您的更改将被应用。

从 agnoster 主题更改为 zsh 中的 robbyrussell 主题。
背景图像
Windows Terminal发布时最受关注的功能之一是在每个配置文件中使用图像的能力。直到现在,您可能已经注意到背景都是在settings.json文件中使用background
标签定义的单一颜色。
有些人在编码时发现图像会分散注意力,如果您是其中之一,以下是在settings.json中使用单一颜色背景的示例。
设置了单一颜色后,该颜色将成为该配置文件的背景。如果在配置文件中未设置背景标签,则Windows终端将默认使用模式中的背景。

上面的示例配置文件将显示该颜色作为背景。
要使用背景图像,您需要将图像存储在本地文件系统中。在撰写本文时,终端不支持从URL加载背景图像。在settings.json中,转到要分配背景图像的配置文件。然后,添加backgroundImage
标签,并将其值设为图像的路径。以下是将配置文件背景设置为猫的图片的示例。

如果你决定自定义背景,请注意终端不会考虑你的颜色与背景的对比。终端将默认使用当前配置文件模式中的颜色。如果你不小心,可能会将浅色字体放在浅色背景上,这将使得阅读非常困难。并非所有背景都适合终端使用。
终端的 cat 命令会在你的终端中显示,并占用你的背景。
只要 settings.json 仍然是有效的 JSON 文件,并且仍然符合终端模式,你会立即看到背景更新,无需手动刷新或关闭再打开终端。你可以在下面看到这种实时更新的很好例子。

只要在 settings.json 中进行更改并保存,Windows 终端就会立即更新。
定位图片
你可能会认为在终端窗口中使用图片会分散注意力,而且确实如此。但是,如果你需要频繁在选项卡和配置文件之间切换,它们也可以是一个快速参考。下面是使用背景图片来突出显示所使用的 shell 的示例。
要设置背景图片,如上所示,您需要三个额外的参数,它们以backgroundImage
开头,以帮助控制屏幕上图片的大小、位置和透明度。请始终记住检查文档以查看可用的选项。下面是上述配置文件的示例。

Windows终端还支持动画GIF,所以如果你觉得不会太分心,你也可以在你的配置文件中玩一些有趣的东西。

高级Windows终端命令
现在你的终端已经设置并按照你的喜好定制好了,是时候探索一些Windows终端的更高级功能了。
使用不同内核拆分窗格
Windows终端支持多个窗格。这意味着您可以在同一个终端窗口中运行并行会话。这种行为并不新鲜。其他控制台应用程序多年来一直支持窗格。Windows终端的不同之处在于,它支持配置文件(在settings.json中),因此您可以在每个会话中打开自己的窗格。即使每个会话是完全不同的操作系统,例如使用WSL或远程配置文件(稍后会介绍远程配置文件),您也可以为每个操作系统显示一个窗格。
要创建不同配置文件的分割窗格,在settings.json中,每个配置文件必须有自己的splitPane
键绑定。通过指定profile
参数为Windows终端配置文件的名称或GUID,您可以将每个配置文件都打开在一边。
split
属性可以设置为horizontal
、vertical
或auto
,它将根据当前选择的窗格选择提供最多空间的方向。您可以在下面看到为四个窗格设置键绑定的示例。

自定义如何打开Windows终端
如果您不喜欢热键,或者您想要一种快速打开带有CLI的终端的方法,那么您很幸运。Windows终端包含一个名为wt
的命令行可执行文件,允许您自动打开它以任何您想要的配置。
在下面,您可以看到在打开终端时传递各种参数的示例,这将改变其行为。

远程配置文件
大多数情况下,您的配置文件将运行本地Shell。但是,Windows终端也可以通过名为远程配置文件的概念显示远程会话!
如果您查看 Windows 终端的其他示例配置文件,您可能会注意到其中一些根本不是使用 .exe 应用程序。Windows 终端足够灵活,甚至可以使用ssh
命令或Enter-PsSession
PowerShell 命令创建映射到远程服务器或其他 shell 的配置文件。您甚至可以使用terraform console
启动 Terraform 会话!您可以在下面的配置文件中看到一个示例。
通过在settings.json的配置文件部分使用commandline
参数,您可以打开几乎任何东西作为它自己的 Windows 终端配置文件,无需进行交互式登录。

使用 Windows 终端配置文件打开 Python REPL 和 SSH 连接到 AWS EC2 实例
摘要
到目前为止,您不仅应该熟悉 Windows 终端,还应该已经配置了自定义设置,并且已经设置了相当舒适的配置。您应该能够自定义配置文件和键绑定以控制终端的外观和操作,以及知道如何修改终端中可以使用的字体、图形和字符。
命令行工具不会消失。开发人员和工程师都需要继续使用它们。新的 Windows 终端不会阻止软件开发成为一个需要盯着屏幕上的小文本的工作,但它可能会让这个过程变得更容易!