定制Windows终端的指南

1,247 阅读12分钟

定制Windows终端的指南

在Windows 10中,Windows终端提供了一个大大改进的命令行体验。它充满了有用的功能,如GPU加速、标签、面板、主题和快捷方式,以及对不同环境的全面支持,如PowerShell、Command Prompt和Windows Subsystem for Linux。在这篇文章中,我将描述一些根据你的需要定制终端体验的方法,以及使你的体验更好的提示和技巧。

Windows终端应用可在微软商店中找到。如果你打开商店并搜索 "Windows终端",它应该是列表中的第一个项目。它也可以在其GitHub发布页面上找到,但如果你从那里安装它,你会错过自动更新。如果你想处于功能的边缘,你也可以安装预览版

Microsoft store showing Windows Terminal

安装后,启动终端。界面相当简单,顶部有标签,还有一个下拉菜单,用于在不同的配置文件之间切换。默认情况下,你会得到一个用于PowerShell、命令提示符、你所安装的任何WSL发行版和Microsoft Azure的配置文件。

Windows terminal default view

你可以通过下拉菜单或按键盘上的Ctrl + ,来打开设置。从v1.7版开始,Windows终端的设置不再像早期版本那样默认以JSON文件的形式打开。我们开发了一个新的设置界面,它现在是管理你的偏好的默认方式,尽管它只是底层JSON文件的一个前端,仍然可以通过按Ctrl + Shift + , 来访问。

Windows terminal settings user interface in version 1.7

底层的JSON配置文件可以通过点击设置齿轮图标来访问。

用键盘快捷方式启动终端

将Windows终端与键盘快捷键绑定的最简单方法是将其钉在任务栏上,然后按Win键加上与程序在任务栏上的位置相应的数字。例如,Win + 3在我的电脑上启动或聚焦终端窗口。

Windows taskbar showing position of Windows terminal

我不喜欢这种方法,因为它在进行切换时,会在我的屏幕上短暂地闪现任务栏(默认情况下是隐藏的),我觉得这很分散注意力。所以我更喜欢使用AutoHotkey,在这个脚本的帮助下,运行或提升一个Windows终端实例。

让这个工作的步骤是。

  • 创建一个新的文本文件,扩展名为.ahk
  • 复制并粘贴上述脚本到该文件中。
  • 双击该文件来运行它。

一旦完成,你就可以通过按键调出Windows终端。链接的脚本使用Win + `,但你可以把它改为你喜欢的键绑定。

从Windows资源管理器启动终端

你可以从文件资源管理器中启动Windows终端,在地址栏中输入wt 和Enter。这将在你的默认用户目录下启动一个新的终端窗口。要指定当前目录,请使用wt -d .

File explorer showing Windows Terminal command

此外,你可以在文件资源管理器中右击一个目录,选择 "在Windows终端中打开"。这将在选定的目录中用你的默认配置文件启动Windows终端。

File explorer showing Launch in Windows Terminal option

改变默认配置文件

当你启动一个Windows终端实例或打开一个新的标签时,默认配置文件就会出现。它最初应该被设置为Windows Powershell配置文件,但你可以很容易地把它改成其他的配置文件,比如你喜欢的WSL发行版。要做到这一点,可以通过更新settings.json 文件中的defaultProfile 属性的值来实现,即用你喜欢的配置文件的guid 。它也可以通过设置界面来改变,如下图所示。

Windows terminal startup profile

自定义标签设置

从V1.5版开始,Windows终端的标签切换器在一个垂直列表中显示当前打开的标签,可以用键盘或鼠标导航。在早期版本中,这个功能必须通过设置useTabSwitcher 属性(现在已经废弃)来激活true

Windows terminal tab switcher mode enabled

在Windows终端v1.5及以后版本中启用标签切换器模式

你可以通过将tabSwitcherMode 设置为false"disabled" 来选择不使用标签切换器的体验。当标签切换器被禁用时,按ctrl + tab或ctrl + shift + tab将以类似于大多数网页浏览器的方式切换标签。如果你想控制标签切换器中标签的顺序,你可以将tabSwitcherMode 设置为mruinOrder ,这将按最近使用的顺序或按其在终端的布局顺序列出标签。

设置.json

// Enables the tab switcher
"tabSwitcherMode": "mru",
"tabSwitcherMode": "inOrder"

// Disables the tab switcher
"tabSwitcherMode": "disabled"

Windows Terminal tab switcher settings

你也可以用tabSearch 命令搜索你打开的标签,但你必须先为它创建一个绑定。如果你通常有几个标签页同时打开,这很有用。

设置.json

{
    "actions": [
        { "command": "tabSearch", "keys": "ctrl+t" }
    ]
}

自定义配置文件设置

配置文件的设置可以通过settings.json 文件中的profiles 属性来访问。如果你希望任何设置适用于所有配置文件,请将其添加到defaults 属性中。否则,将其添加到list 阵列中的相关对象。

settings.json

"defaults":
{
    // SETTINGS TO APPLY TO ALL PROFILES
},
"list":
[
    // PROFILE OBJECTS
]

Windows terminal settings ui showing profile settings

在设置界面中,每个配置文件在全局设置下面的侧边栏有自己的条目。

改变起始目录

默认情况下,所有shells的起始目录是Windows用户目录("%USERPROFILE%"),但你可能希望在你的WSL配置文件中用Linux主目录来代替。你可以将startingDirectory 属性添加到你的WSL分发配置文件对象中,如下图所示,以覆盖这一设置。

设置.json

{
    "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
    "hidden": false,
    "name": "Ubuntu-20.04",
    "source": "Windows.Terminal.Wsl",
    "startingDirectory": "\\\\wsl$\\Ubuntu-20.04\\home\\<username>"
}

Windows terminal settings UI showing starting directory for a WSL distribution

隐藏一个配置文件

要从下拉菜单中隐藏一个配置文件,请将配置文件对象上的hidden 属性设置为true

设置.json

{
    "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
    "hidden": true,
    "name": "Azure Cloud Shell",
    "source": "Windows.Terminal.Azure"
}

Windows terminal settings UI showing hide from dropdown option

关掉滚动条

如果你主要使用tmux ,你可能想关闭WSL配置文件的滚动条,方法是将scrollbarState 选项设置为hidden

设置.json

{
    "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
    "hidden": false,
    "name": "Ubuntu-20.04",
    "source": "Windows.Terminal.Wsl",
    "startingDirectory": "\\\\wsl$\\Ubuntu-20.04\\home\\<username>",
    "scrollbarState": "hidden"
}

Windows terminal settings UI showing scrollbar setting

这个设置可以在配置文件的外观标签下找到。

定制背景

我们可以用背景图片来定制Windows终端。backgroundImage 属性可以被设置为一个图像URL、一个本地文件路径或desktopWallpaper 字符串(从v1.5版开始),有关图像可以是JPEG、PNG或GIF格式。你还可以控制相关的设置,如不透明度、对齐和拉伸。这些设置可以为所有配置文件或每个配置文件进行全局配置。

设置.json

{
    "backgroundImage": "https://images.unsplash.com/photo-1554110397-9bac083977c6?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=2100&q=80",
    "backgroundImageOpacity": 0.4,
    "backgroundImageAlignment": "center"
}

Windows Terminal background settings

Background image set on Windows terminal

如果你愿意,你也可以使用GIF动画。

对不起,你的浏览器不支持HTML5视频,但不用担心,你可以下载并使用你最喜欢的视频播放器观看它

GIF

true终端还支持Windows 10中的亚克力效果,可以通过设置useAcrylic 启用。该效果的透明度可以通过acrylicOpacity (接受0到1之间的浮点)来控制。你可以在有或没有背景图片的情况下使用这些设置。

设置.json

{
    "useAcrylic": true,
    "acrylicOpacity": 0.5
}

Windows Terminal showing acrylic settings

Windows Terminal showing acrylic effect

定制颜色方案

终端有几个颜色方案,你可以选择。它们可以通过颜色方案菜单访问。你可以从这个菜单中选择你喜欢的全局颜色方案,如果你不喜欢任何默认的方案,也可以添加新的方案。

Windows terminal showing colour schemes menu

如果你喜欢为每个配置文件设置不同的颜色方案,相关设置在每个配置文件的外观标签下。

Windows terminal showing profile colour scheme

配置文件的颜色方案会覆盖特定配置文件的全局颜色方案。

同样可以通过colorScheme 选项在settings.json 文件中实现。这个选项可以为所有配置文件全局设置,也可以为每个配置文件设置。

settings.json

{
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "name": "Windows PowerShell",
    "commandline": "powershell.exe",
    "colorScheme": "Campbell Powershell",
    "useAcrylic": true,
    "acrylicOpacity": 0.9
}

Windows Terminal showing Campbell Powershell colour scheme

Campbell Powershell的颜色方案

通过settings.json 文件,添加自定义颜色方案也比较容易。你所需要做的就是在文件的schemes 数组部分定义颜色方案对象。一个获取颜色方案的好地方是Windows终端主题网站。你可以预览每个可用的主题,当你找到一个你喜欢的,点击获取主题按钮,将其JSON对象复制到你的剪贴板上。

Windows Terminal Themes website

将JSON对象放入schemes 数组中,然后将colorScheme 属性设置为主题名称(或使用设置UI来设置主题)。一旦你保存该文件,新的主题就会生效。

设置.json

{
    "schemes": [
        {
            "name": "AdventureTime",
            "black": "#050404",
            "red": "#bd0013",
            "green": "#4ab118",
            "yellow": "#e7741e",
            "blue": "#0f4ac6",
            "purple": "#665993",
            "cyan": "#70a598",
            "white": "#f8dcc0",
            "brightBlack": "#4e7cbf",
            "brightRed": "#fc5f5a",
            "brightGreen": "#9eff6e",
            "brightYellow": "#efc11a",
            "brightBlue": "#1997c6",
            "brightPurple": "#9b5953",
            "brightCyan": "#c8faf4",
            "brightWhite": "#f6f5fb",
            "background": "#1f1d45",
            "foreground": "#f8dcc0"
        }
    ]
}

Windows Terminal showing AdventureTime theme

AdventureTime的颜色方案

用Starship使你的提示符漂亮

Starship提供了一个定制的命令提示符体验,显示一些方便的信息,让你知道你正在做什么。它支持Linux、macOS和Windows上所有流行的shell,包括Bash、Fish、Zsh、Powershell等,即使你经常在不同的shell之间切换,也能得到一个一致的提示。

Windows Terminal showing starship prompt in Fish shell

这个Fish提示符是用Starship设计的

在安装Starship之前,你需要确保在你的电脑上先安装一个Nerd字体,以防止破碎的字形毁掉你的提示符。一个好的选择是Cascadia Code(默认的Windows终端字体),可以从其GitHub发布页面下载。下载后,解压缩,并安装ttf/static 文件夹中的所有字体文件。

Windows explorer showing Cascadia Code PL font installation

接下来,将你的配置文件设置中的fontFace 属性改为Cascadia Code PL

设置.json

{
    "fontFace": "Cascadia Code PL"
}

Windows terminal profile font setting

之后,按照你喜欢的shell的说明,继续安装Starship。一旦你完成了,在~/.config 目录中创建一个配置文件。

$ mkdir -p ~/.config && touch ~/.config/starship.toml

打开starship.toml 文件,并粘贴以下内容。

starship.toml

add_newline = false

[character]
success_symbol = "[⚡](bold green) "
error_symbol = "[❌](bold red) "

[aws]
disabled = true

[time]
disabled = true

[cmd_duration]
disabled = true

[directory]
truncation_length = 8

[hostname]
disabled = true

[nodejs]
symbol = "🤢"

[battery]
full_symbol = "🔋 "
charging_symbol = "⚡️ "
discharging_symbol = "💀 "
disabled = false

[git_status]
conflicted = "🚩"
ahead = "💨"
behind = "😰"
diverged = "😵"
untracked = "🤷"
stashed = "📦"
modified = "📝"
staged = '[++\($count\)](green)'
renamed = "👅"
deleted = "💥"

[shell]
fish_indicator = "🦈"
bash_indicator = "🌞"
disabled = false

以上代表了我目前的配置,它应该给你一个类似于前面截图的提示。

同时为多个shell分割窗格

Windows Terminal showing split panes

PowerShell在上,Ubuntu在下

Windows终端支持将一个标签分割成多个窗格。这使得它很容易进行多任务处理,而不必切换标签。我在WSL中使用tmux来达到这个目的,所以它不是我经常依赖的东西,但它很方便,特别是当你需要在Windows和WSL之外工作时。

横向和纵向分割窗格的默认快捷键分别是Alt + Shift + -和Alt + Shift + =。你也可以使用命令调色板来分割窗格,可以用Ctrl + Shift + p进入。

Windows terminal showing command palette

如果你按住Alt键,在终端下拉菜单中的一个配置文件上按下新标签按钮,它也会自动分割活动窗口或窗格。要在窗格之间切换焦点,按住Alt键并使用方向键或点击所需的窗格。通过按住Alt + Shift和其中一个方向键来调整焦点窗格的大小。关闭一个窗格可以用Ctrl + Shift + W来完成。

定制热键

settings.json 所有Windows终端命令的热键都可以通过actions (以前是keybindings )文件中的属性进行自定义。如果你检查你的终端的defaults.json 文件(通过按住Alt键同时点击设置菜单),你会看到所有的默认键绑定被组织在根级别的actions 阵列的几个类别中。

Visual Studio Code showing defaults.json file with the actions property highlighted

你可以为一个动作添加一个新的热键,方法是将相关的绑定对象从defaults.json 文件复制到settings.json 文件,并改变该对象中的keys 属性。如果你直接修改defaults.json 文件,当程序更新时,你的修改就会丢失。例如,分割窗格的绑定可以按照下面的方式进行定制。

settings.json

{
    "actions": [
        { "command": { "action": "splitPane", "split": "vertical" }, "keys": "alt+v" },
        { "command": { "action": "splitPane", "split": "horizontal" }, "keys": "alt+h" }
    ]
}

以上几行为splitPane 动作添加了新的绑定,但原来的绑定将保持有效。要删除一个默认的键绑定,请将该键分配给unbound 命令,如下所示。

settings.json

{
    "actions": [
        { "command": { "action": "splitPane", "split": "vertical" }, "keys": "alt+v" },
        { "command": { "action": "splitPane", "split": "horizontal" }, "keys": "alt+h" },
        { "command": "unbound", "keys": "alt+shift+-" },
        { "command": "unbound", "keys": "alt+shift+=" }
    ]
}

Windows终端还为你提供了通过击键向你的外壳发送输入命令的能力。这对常用的命令来说是很方便的。下面是一个例子,它将Alt + G绑定到发送命令,以导航到git repo中工作树的根部。

settings.json

{
    "actions": [
        { "command": {"action": "sendInput", "input": "cd (git rev-parse --show-toplevel)"}, "keys": "alt+g" }
    ]
}

设置自定义的SSH配置文件

通过Windows终端自动进入远程机器的SSH可能很方便。这可以通过为每台机器设置一个新的自定义配置文件来实现。

设置.json

{
    "guid":  "{4b8d0cfe-e8be-4ae6-a4ad-88efd65b0880}",
    "hidden":  false,
    "name":  "Failed Experiments",
    "commandline":  "wsl ssh user@localhost",
    "icon": "🤡"
}

guid 字段在配置文件中必须是唯一的。你可以对现有的配置文件进行修改或者在线生成。关于icon ,你可以使用一个emoji字符(v1.5或更高版本)或输入一个合适的图像文件的路径。一旦你保存了设置文件,你应该看到你的新条目与下面的屏幕截图相似。

Windows Terminal Showing Custom Profile

一旦你点击该条目,它将自动连接到你喜欢的Linux发行版中的远程服务器。

自定义启动布局

Windows终端使用你的默认配置文件以单一标签和单一窗格启动,但你可以通过命令行参数定制这一行为。下面是一个例子,它以一个单一标签中的三个分割窗格的自定义布局来启动终端。这些窗格分别运行一个WSL配置文件、一个PowerShell配置文件和一个命令提示符配置文件。

wt; split-pane -p "Windows PowerShell"

Windows terminal showing split panes

下面是对上述命令的分解。

  • wt on its own 启动一个新的窗口,有一个单一的标签和一个带有默认配置文件的窗格。 后的每个命令必须用分号隔开。wt
  • split-pane 将当前窗格分成两个,如果你没有指定方向( 或 ),则默认为 。 标志允许你通过名称或 来指定你要打开的资料类型。-H -V auto -p guid

在你定义了你喜欢的启动布局后,你可以使用AutoHotkey将其与热键绑定,或者创建一个新的Windows快捷方式并将其固定在你的桌面或任务栏。

总结

在这篇文章中,我们讨论了自定义Windows终端的几种方法。我希望它能帮助你改善你在命令行上的工作流程和生产力。如果你有更多的技巧,请在下面的评论区分享。

谢谢你的阅读,并祝你编码愉快