安装Windows终端:实际操作和功能概览

开发软件是一项挑剔的工作。在一天结束时,整个工作都是关于用一种奇怪的语言为一个挑剔的解释器编写指令,它会关闭你所努力工作的一切。好吧,是时候安装Windows终端并发现一个更好的方式了。

在这个终极指南中,你将了解到一个为开发人员提供的最佳控制台之一;Windows终端。您将全面了解Windows终端的几乎所有功能。您将学会如何在Windows命令行上完成任务。

Windows终端通过现代终端功能(如选项卡、窗格甚至背景图像)增强了控制台体验。甚至可以在Windows PowerShell或cmd.exe之间切换而无需切换控制台会话,同时运行完整的Linux shell。

本文将演示Windows终端的许多功能。这将是一个全程实践的教程,因此请准备好动手吧!

先决条件

安装和使用Windows终端本身的要求非常基本。您只需要一台安装了Windows 10版本1903(2019年5月)或更高版本的计算机。如果您想跟随本文中的所有演示进行操作,您还需要安装一些其他工具:

终端 vs. 控制台 vs. Shell

因为本文涉及许多术语,首先了解一些术语的区别非常重要,以免造成混淆。

尽管这些概念相似,但重要的是要注意终端不是控制台,控制台也不是 Shell。每个都有其特定的用途。Scott Hanselman 在一篇很棒的博文中对每个术语的定义进行了解释,但本文中将如何使用它们:

  • 终端:Windows 终端应用程序。
  • 控制台:任何非 Windows 终端的控制台主机应用程序。不是
  • Shell:终端和操作系统之间的程序。(pwsh、cmd、zsh 等)

安装 Windows 终端

有几种不同的方法可以安装Windows终端,但到目前为止最简单(也是微软推荐的方式)的方法是从Microsoft Store安装。您可以下载两个不同版本;标准的Windows终端Windows终端预览

在本文中,您可以使用任何一个版本。安装过程很简单,我们不会在本文中涵盖该过程,并假设您已经安装了它。

当您第一次打开Windows终端时,它看起来并不令人印象深刻。有许多调整您需要进行,但一切都始于下面这样的窗口。

Default Windows terminal

请注意,Windows终端有四个主要组件:

  1. 终端窗口 – 这是您将要进行大部分工作并可以自定义最多的地方。
  2. 标签名称 – Windows终端支持标签,这意味着您可以拥有不同的shell
  3. 新标签 – 此按钮将打开默认配置文件的新标签
  4. 配置文件列表 – 这将列出可供打开的配置文件。

Windows终端具有极简的布局,但在其背后隐藏了许多功能。

从源代码构建终端

虽然这是 Windows 终端,它确实来自微软,但它也是 完全开源 的,这意味着如果你愿意,你可以为其做贡献。这是一个采用 C++ 编写的程序,拥有一个非常活跃的社区。

尽管这是一个 GA 产品,在撰写本文时仍在解决一些小问题,并且未来发展路线图上还有一些功能。也许正是你帮助为其做出贡献!

如果你是一名开发者,真的想深入了解代码,你可以通过 PowerShell 构建 Windows 终端,按照以下步骤进行:

  1. 运行 git submodule update --init --recursive 以更新所有 git 子模块
  2. 运行以下 PowerShell 命令:
Import-Module .\tools\OpenConsole.psm1
Set-MsBuildDevEnvironment
Invoke-OpenConsoleBuild

设置.json 文件:自定义所有内容

最终,你可能想将终端个性化并进行定制。Windows 终端最好的一点就是它的可定制性。定制 Windows 终端最常见的方式是编辑位于 %LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\ 目录下的 settings.json 文件。

你也可以通过点击配置文件列表,然后选择 Settings 来访问 settings.json 文件。

settings.json 文件是你将为 Windows 终端进行大多数定制的地方,直到有图形选项可用。

Windows终端团队在即将发布的版本中承诺会很快发布一个图形界面用于管理设置!

除了将所有设置存储在一个方便的位置之外,当设置存储在JSON文件中时,您可以将您的设置放入源代码控制或在不同机器之间进行备份。

您甚至可以与他人共享这些设置。如果您想查看一个示例settings.json的样子,可以在这里找到一个。

settings.json模式

如果您正在使用Visual Studio Code,终端包括一个JSON模式,可以帮助验证您在settings.json中进行的任何自定义,包括自动填充任何新的自定义。

只要您的更改保存了(只要settings.json仍然有效),新的更改将立即在终端中反映出来,或者将显示一个错误,而无需刷新终端。

当涉及到自定义Windows终端时,虽然不是必需的,但强烈推荐使用Visual Studio Code进行JSON编辑。

当前有四个不同的部分控制 Windows 终端的外观和感觉:settings.json 全局(Global)、配置文件(Profiles)、配色方案(Schemes) 和键绑定(Key Bindings)。让我们逐个部分来看。

全局(Global)

全局部分 负责确定 Windows 终端的行为。始终位于文件顶部,全局部分控制诸如关闭时确认、视觉主题和默认配置文件之类的内容。您可以在以下代码片段中看到一个示例。

// settings.json

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

    "defaultProfile": "{d21f5dd0-bdc3-4cf7-9e3c-5d5d721074c9}",

    // 您可以在这里添加更多全局应用程序设置。
    // 要了解更多全局设置信息,请访问 <https://aka.ms/terminal-global-settings>

    // 如果启用,则选择将自动复制到剪贴板。
    "copyOnSelect": false,

    // 如果启用,则格式化数据也将复制到剪贴板
    "copyFormatting": false,

		...
		...
}

配置文件(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 发行版生成一个配置文件。它还包括一个默认值部分,将应用于settings.json中的每个配置文件的设置。这是放置兼容 Unicode 字体的好地方,稍后将在本文中介绍。

你可以在以下代码片段中看到配置文件的示例。

// settings.json

"profiles":
    {
        "defaults": {},
        "list":
        [
            {
                "guid": "{d2df7eb9-1d7e-4a05-91a6-04ac0ee99970}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            }
				]
		}

创建新配置文件

设置配置文件可能很有用,如果你想在同一个shell上添加变体,或者向终端添加自定义远程配置文件。

要在settings.json中创建一个新的Windows终端配置文件,你需要执行以下步骤:

确保在每个配置文件后面都加上逗号,除了最后一个,以使JSON有效。

  1. 复制你的配置文件部分中的任何配置文件。这些从JSON文件中的list节点下的[开始,到]结束。这是上述第七行到第十四行。
  2. 通过在任何PowerShell会话中运行[guid]::NewGuid()来生成一个新的GUID。用你生成的GUID替换你新配置文件中当前的guid值。当终端设置默认配置文件时,GUID是随机生成的。
  3. 添加或更改任何其他参数以自定义配置文件。
  4. 复制settings.json的内容,并通过JSON Lint或其他JSON验证器验证它是否仍然有效。解决任何问题。
  5. 保存你的更改。

有许多选项可供在配置文件中配置。请注意,如果在`settings.json`的默认部分中设置了某个设置,并且您在新配置文件中设置了相同的设置,您将覆盖默认设置。有关完整的说明,请查看[Windows 终端设置文档](https://docs.microsoft.com/en-us/windows/terminal/)

配色方案

此部分涉及到 Windows 终端配置文件的配色方案。配色方案告诉终端使用哪个十六进制值来显示终端中出现的每种颜色。由于终端可以呈现 24 位色彩,因此这些颜色可以非常丰富多彩。每个方案都将有一个名称和一个颜色列表,这些颜色与一个十六进制值相对应,可以像下面所示轻松更改。

// settings.json

"schemes": [
        {
            "name" : "Ubuntu",
            "background" : "#2C001E",
            "black" : "#4E9A06",
            "blue" : "#3465A4",
            "brightBlack" : "#b3b3b3",
            "brightBlue" : "#729FCF",
            "brightCyan" : "#34E2E2",
            "brightGreen" : "#8AE234",
            "brightPurple" : "#AD7FA8",
            "brightRed" : "#EF2929",
            "brightWhite" : "#EEEEEE",
            "brightYellow" : "#FCE94F",
            "cyan" : "#06989A",
            "foreground" : "#EEEEEE",
            "green" : "#300A24",
            "purple" : "#75507B",
            "red" : "#CC0000",
            "white" : "#D3D7CF",
            "yellow" : "#C4A000"
        }
    ]

当您在 Windows 终端中使用该方案时,这些颜色将对应于背景和文本颜色。如果您在 Visual Studio Code 中打开了`settings.json`,您可以单击具有图形滑块的十六进制值,该滑块显示了实际的颜色,如下所示。

VS Code color options

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

键绑定

键绑定是 Windows 终端分配热键的方式,用于新建窗格、选项卡,甚至基本操作如复制和粘贴。有很多操作可以分配自定义热键,这样可以轻松定制终端,让它更适合你的习惯。

你可以在以下代码片段中看到一些默认的键绑定。

// settings.json

"keybindings":
    [
        { "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
        { "command": "paste", "keys": "ctrl+v" },
        { "command": "find", "keys": "ctrl+f" },
        { "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+d" },
        { "command": { "action": "closePane" }, "keys": "ctrl+w" },
        { "command": { "action": "newTab" }, "keys": "ctrl+t" }
    ]

到目前为止,你的终端可能已经开始按照你想要的方式运行了,但你还没有完成。现在是时候学习如何继续自定义终端的外观和感觉了。

可视化设置

当您将大部分的工作时间都花在屏幕上阅读文字时,值得多花一些时间来使这些文字更易于阅读。无论是更改字体、大小还是颜色,为您的新Windows终端外观做一些工作,在整个工作日盯着它之后将会带来巨大的回报。

文字增强

Windows终端最被宣传的功能之一是24位色支持和加速文本渲染。这听起来可能并不令人印象深刻,直到您将其与powershell.execmd.exe的文本和颜色渲染进行比较。使用Python的丰富库进行演示,很明显旧控制台和Windows终端之间的渲染能力差异有多大。

Text enhancements in Windows Terminal

在Windows终端中打开Python的丰富库powershell.exe

Windows终端还支持Unicode字符,这意味着它可以与其他字母表和符号一起使用,包括西里尔文字符、日文汉字和任何其他字符都可以正常渲染。这是因为Cascadia Code字体,稍后将对其进行介绍。

Cascadia font

使用Windows终端和powershell.exe写日文汉字

这带来了一些明显的国际化好处,但支持Unicode和UTF-8也意味着Windows终端还可以支持……

Emoji ?

表情符号在命令行工具中可能看起来不是很有用,但它们在开发中变得越来越常见。软件工程师使用它们来标记提交和问题,在诸如Slack或Microsoft Teams的应用中快速回复消息,甚至还有一种表情符号编程语言。虽然其中一些明显比其他的更有用,但很明显表情符号已经成为一个不可或缺的元素。

以下是在powershell.exe控制台上渲染表情符号的示例,以及在使用Python的rich库的Windows终端中的效果。注意The Terminal is pretty这一行,看看它们之间的区别。

Emojis in Windows Terminal

使用Python的rich文本库显示表情符号

Cascadia字体

如前所述,Cascadia Code字体可以显示一些特殊字符。但是该字体还有一些其他微妙的变化,使其更容易连续几个小时查看,比如连字

顺便说一句:设计Windows终端的同一团队专门为Windows终端设计了Cascadia Code字体。

除了特殊字符外,Cascadia Code字体还支持连字。连字是一种在屏幕上显示时略有不同的符号。您可以在Cascadia Code这里查看支持的连字列表。

Ligatures in Windows Terminal

A printout of all the ligatures supported by Cascadia Code. Code here.

如果您不喜欢使用连字,但仍希望享受Cascadia Code的其他好处,Windows终端还提供了一种名为Cascadia Mono的字体,它正是如此。它们中的每一个也都有一个用于Powerline的变体(Cascadia Code PLCascadia Mono PL),下面将介绍它们。

Powerline

Powerline最初是一个为shell添加信息的vim插件,在Linux世界中已经存在了很长时间。其想法是在提示符中提供更多信息,使您在控制台工作时可以轻松获得更多信息。

Powerline已经被移植、克隆和复制到了每一个现代shell中,包括PowerShell,但由于先前控制台的限制,它一直缺少一些东西。终端通过包含称为字形的特定符号来解决这个问题。字形在powerline中用于一目了然地提供更多提示信息。

Powerline在PowerShell中

对于PowerShell,您可以通过安装oh-my-posh来配置类似Powerline的提示符,使用下面的示例代码。

# PowerShell

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

安装完成后,您的 PowerShell 提示符将提供更多信息,包括 git 分支名称以及远程和本地存储库之间的提交。您可以在下面看到一个示例。

Powerline support

这是来自 oh-my-posh 的 Paradox 主题,经过一些定制以显示当前操作系统和PowerShell 版本

Bash 中的 Powerline

对于 Bash,您需要安装一个类似 shell 的 zshfishshell。它们为终端添加了一些功能和自定义高亮显示,但单独使用可能有些困难。建议您还安装一个像 ohmyzsh 这样的 zsh 框架,这将使其使用起来更加轻松。ohmyzsh 提供了主题和类似 oh-my-posh 为 PowerShell 提示符提供的 bash 提示符定制。

安装完成后,您可以通过修改 ZSH_THEME 属性在 ~/.zshrc 文件中更改主题。使用像 vimnano 这样的编辑器进行更改并保存文件。完成后,运行 source ~/.zshrc,您的更改将生效。

Powerline in Bash

agnoster 主题更改为 zsh 中的 robbyrussell 主题。

背景图片

Windows终端发布时最受关注的功能之一是在每个配置文件中使用图像的能力。直到现在,您可能已经注意到背景都是在settings.json文件中使用background标签定义的单一颜色。

一些人在编码时会觉得图像会分散注意力,所以如果您是其中之一,这里有一个在settings.json中使用单一颜色背景的示例。

// settings.json

"profiles":
    {
        "defaults": {},
        "list":
        [
            {
                "guid": "{d2df7eb9-1d7e-4a05-91a6-04ac0ee99970}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
								"background": "#006e1c",
                "hidden": false
            }
				]
		}

设置了单一颜色后,该颜色将成为该配置文件的背景。如果您的配置文件中未设置背景标签,Windows终端将默认使用模式中的颜色。

Plain color background

上面的示例配置文件将显示此颜色作为背景。

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

// settings.json

"profiles":
    {
        "defaults": {},
        "list":
        [
            {
                "guid": "{d2df7eb9-1d7e-4a05-91a6-04ac0ee99970}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
								"backgroundImage": "%USERPROFILE%\Pictures\terminal_cat.jpg",
                "hidden": false
            }
				]
		}
Images in Windows terminal background

如果您决定自定义自己的背景,请注意终端不会根据您的背景考虑您的颜色。终端将默认使用当前配置文件模式中的颜色。如果您不小心,可能会在浅色背景上放置浅色字体,这会使阅读变得非常困难。并非所有背景都适合作为终端背景。

终端中的终端猫占据了您的背景。

只要settings.json仍然是有效的 JSON 文件,并且仍然符合终端模式,您将立即看到背景更新,无需手动刷新或关闭再打开终端。您可以在下面看到这种实时更新的一个很好的例子。

Real-time setting updates

Windows 终端将在您在 settings.json 中进行更改并保存后立即更新。

定位图像

您可能会认为图像在终端窗口中太过分散注意力,而且确实如此。但是,如果您需要经常在选项卡和配置文件之间切换,它们也可以是一个快速参考。下面是使用背景图像突出显示正在使用的 shell 的示例。

// settings.json

"profiles":
    {
        "defaults": {},
        "list":
        [
            {
                "guid": "{d8a5efb7-25a0-4d75-8c6c-1f2603188971}",
                "name": "PowerShell 7",
                "source": "Windows.Terminal.PowershellCore",
								"backgroundImage": "%USERPROFILE%\Pictures\icons\pwsh.png",
								"backgroundImageStretchMode": "none",
                "backgroundImageAlignment": "bottomRight",
								"backgroundImageOpacity": 0.75,
                "hidden": false
            }
				]
		}

要设置背景图像,如上所示,您需要三个额外的参数,这些参数以backgroundImage开头,以帮助控制屏幕上图像的大小、位置和不透明度。始终记得检查文档以查看可用的选项。以下是上面显示的简介的示例。

A PowerShell 7 profile with the PowerShell logo as a background image

Windows终端还支持动画gif,所以如果您觉得它不会太分散注意力,您也可以在配置文件中玩一些有趣的东西。

Animated GIFS in Windows Terminal

高级Windows终端命令

现在您的终端已设置并根据您的喜好进行了自定义,现在是时候探索一些Windows终端的更高级功能了。

使用不同内核分割窗格

Windows终端支持多个窗格。这意味着您可以在同一个终端窗口中运行并行会话。这种行为并不新鲜。其他控制台应用程序多年来一直支持窗格。Windows终端的不同之处在于,由于它支持配置文件(在settings.json中),您可以使每个会话在其自己的窗格中打开。即使每个会话是完全不同的操作系统,比如使用WSL或远程配置文件(稍后会详细介绍),您也可以为每个操作系统显示一个窗格。

创建不同配置文件的分割窗格,settings.json中每个配置文件必须有自己的splitPane键绑定。通过使用profile参数,并使用Windows Terminal配置文件的名称或GUID,您可以将每个配置文件并排打开。

split属性可以设置为horizontalverticalauto,它将选择基于当前选择的窗格提供最多空间的方向。下面是设置四个窗格的键绑定的示例。


// settings.json

"keybindings":
    [
        { "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+d" },
        { "command": { "action": "splitPane", "split": "auto", "profile": "Windows PowerShell" }, "keys": "ctrl+alt+1" },
        { "command": { "action": "splitPane", "split": "auto", "profile": "Command Prompt" }, "keys": "ctrl+alt+2" },
				{ "command": { "action": "splitPane", "split": "auto", "profile": "a4b7092a-6825-422c-bdb8-89b9251f4d7d" }, "keys": "ctrl+alt+4" }
    ]
The Windows Terminal with 4 different profiles open in different panes. (PowerShell 7, Ubuntu 20.04, PowerShell 5.1 and Azure Cloud Shell)

自定义如何打开Windows Terminal

如果您不喜欢热键,或者想要以CLI快速打开终端,那么您很幸运。Windows Terminal包含一个名为wt的命令行可执行文件,允许您自动以任何配置打开它。

下面是传递各种参数以改变行为的打开终端的示例。

Behavior changes in New Window Terminal

远程配置文件

大多数情况下,您的配置文件将运行本地shell。然而,Windows Terminal还可以通过称为远程配置文件的概念显示远程会话!

如果你查看Windows终端的其他示例配置文件,你可能会注意到其中一些根本不使用.exe应用程序。Windows终端足够灵活,你甚至可以使用ssh命令或Enter-PsSession PowerShell命令创建映射到远程服务器或其他shell的配置文件。你甚至可以使用terraform console启动Terraform会话!你可以在下面的配置文件中看到一个示例。

通过在settings.json的配置文件部分中使用commandline参数,你可以打开几乎任何东西作为其自己的Windows终端配置文件,而不需要进行交互式登录。

// settings.json

"profiles":
    {
        "defaults": {},
        "list":
        [
            {
                "guid": "{f74c374e-d9ce-4f53-b3f1-072e020f08a5}",
                "name": "Python REPL",
                "backgroundImage": "%USERPROFILE%\Pictures\icons\python.png",
                "commandline": "python",
                "hidden": false                
            },
            {
                "guid": "{98a15d46-813c-4d1e-badd-5a22798e73c1}",
                "name": "Test EC2 Instance",
                "backgroundImage": "%USERPROFILE%\Pictures\icons\vm.jpg",
                "commandline": "ssh -i %USERPROFILE%\demos.pem [email protected]",
                "hidden": false                
            }
        ]
    }
Renaming profiles

使用Windows终端配置文件打开Python REPL和与AWS EC2实例的SSH连接

摘要

此时,你不仅应该熟悉Windows终端,还应该配置了自定义设置,并且已经设置了相当舒适的配置。你应该能够自定义配置文件和键绑定以控制终端的外观和操作,以及知道如何修改终端中可以使用的字体、图形和字符。

命令行工具不会消失。开发人员和工程师都需要继续使用它们。新的Windows终端不会阻止软件开发成为一个盯着屏幕上小字的工作,但可能会让这一切变得更容易!

Source:
https://adamtheautomator.com/install-windows-terminal/