尝试以扩展 VS Code 中的代理模式!

终端外观

Visual Studio Code 终端的外观可以进行广泛的自定义。

An example of a custom UI, using Powerline and Nerd Font symbols in the prompt and a custom workbench theme

使用自定义 Starship 提示符的 Sapphire 主题,结合带有 Nerd Font 符号的 Hack 字体

文本样式

终端中的文本可以通过以下设置进行自定义

Powerline 符号和 Nerd 字体

Powerline 字体是经过特殊修补的字体,包含可在终端中使用的额外字符。VS Code 的终端无需配置字体即可呈现部分 Powerline 符号,但如果需要更多字形,请使用字体系列设置来配置 Powerline 字体。Powerline 字体通常以" for Powerline"结尾,以下是配置已修补的 DejaVu Sans Mono 的示例设置

"editor.fontFamily": "'DejaVu Sans Mono for Powerline'"

Nerd 字体的工作方式相同,通常带有 " NF" 后缀,以下是配置 Hack Nerd 字体变体的示例

"terminal.integrated.fontFamily": "'Hack NF'"

终端光标

终端光标样式及其是否闪烁可通过以下设置进行自定义

自定义选项卡

默认情况下,当有两个或更多终端时,终端选项卡会出现在终端视图的右侧;当只有一个终端时,活动终端会显示在视图标题中。

A blank terminal without tabs and then with tabs displayed for three terminals

可见性

默认可见性旨在节省水平空间,但可能不符合预期。选项卡的显示方式可通过以下设置进行配置

选项卡文本

每个选项卡上的文本由以下设置确定

默认情况下,标题显示 shell 检测到的进程名称。

其他终端通常将 shell 发送的转义序列显示为标题,可以通过以下方式配置

"terminal.integrated.tabs.title": "${sequence}"

以下是所有可用的变量

  • ${cwd}: 终端的当前工作目录。
  • ${cwdFolder}: 终端的当前工作目录,在多根工作区或在值与初始工作目录不同的单根工作区中显示。在 Windows 上,只有启用 shell 集成时才会显示。
  • ${workspaceFolder}: 启动终端的工作区。
  • ${workspaceFolderName}: 启动终端的工作区名称。
  • ${local}: 表示远程工作区中的本地终端。
  • ${process}: 终端进程的名称。
  • ${progress}: OSC 9;4 序列报告的进度状态。
  • ${separator}: 一个条件分隔符 (-),仅当其被有值的变量或静态文本包围时才显示。
  • ${sequence}: 进程提供给终端的名称。
  • ${task}: 表示此终端与任务关联。
  • ${shellType}: 检测到的 shell 类型。
  • ${shellCommand}: 根据 shell 集成正在执行的命令。这还需要对检测到的命令行具有高度的置信度,这在某些提示框架中可能不起作用。
  • ${shellPromptInput}: 根据 shell 集成,shell 的完整提示输入。

图标

每个终端都有一个相关的图标,由其终端配置文件决定。默认图标及其颜色(如果配置文件中未定义,将使用此图标和颜色)可以通过 terminal.integrated.tabs.defaultIconterminal.integrated.tabs.defaultColor 设置进行配置。

状态

终端的“状态”(如果有)由选项卡右侧出现的图标表示。某些状态涉及动画。如果这会分散注意力,可以通过以下方式禁用动画

"terminal.integrated.tabs.enableAnimation": false

视觉提示音

当终端的提示音被触发时,会短暂显示一个黄色提示音图标。这可以通过 terminal.integrated.enableBell 禁用,持续时间可以通过 terminal.integrated.bellDuration 配置。

终端颜色

尽管终端能够显示真彩色,但程序通常使用 8 种 ANSI 颜色(黑色、红色、绿色、黄色、蓝色、洋红色、青色和白色)以及每种颜色的亮色变体。这些 ANSI 颜色由当前活动的颜色主题决定,但也可以通过 workbench.colorCustomizations 设置独立于主题进行配置。

粗体文本是使用普通 ANSI 颜色还是亮色变体,可以通过 terminal.integrated.drawBoldTextInBrightColors 设置进行配置。

最小对比度

终端经常因与深色/浅色主题、ANSI 颜色或运行中的 shell/程序等冲突而出现对比度问题。

最小对比度功能通过增加或减少文本前景色亮度来解决此问题,直到达到 4.5:1 的对比度。

一个缺点是彩色文本有时会失去一些饱和度。可以通过以下方式配置或禁用此功能以获取原始颜色

"terminal.integrated.minimumContrastRatio": 1

连字

终端连字允许将多个字符渲染为一个。通过配置 terminal.integrated.fontLigatures.enabled 设置,可以在终端中启用连字,前提是终端字体系列 (terminal.integrated.fontFamily) 支持它们。

Enabling ligatures will combine certain sets of characters into one, for example >= into the greater than or equals sign

字体特性设置

启用连字后,还可以按照 font-feature-settings CSS 属性的格式设置详细的字体特性设置列表。这使您可以更精细地控制连字的渲染方式。例如,禁用标准 calt 连字并启用特定的字体变体看起来像 "calt" off, "ss03"。有关字体支持的变体列表,请查阅字体文档。

回退连字

当字体支持连字但 VS Code 不支持解析该字体时,您可以禁用GPU 加速,或指定要手动合并以创建连字的字符序列列表。

默认情况下,回退连字是编码中常用连字的列表。通过配置 terminal.integrated.fontLigatures.fallbackLigatures 设置来微调列表。例如

// Only use ligatures for `ff`, `fi` and `fl`
"terminal.integrated.fontLigatures.fallbackLigatures": [
    "ff",
    "fi",
    "fl"
]

GPU 加速

终端具有两种不同的渲染器,每种渲染器都有不同的权衡

  • WebGL 渲染器 - 真正的 GPU 加速。
  • DOM 渲染器 - 一种回退渲染器,速度慢得多但兼容性极佳。

终端中默认启用由 WebGL 渲染器驱动的 GPU 加速。这通过显著减少 CPU 渲染每帧所花费的时间,帮助终端更快地工作并以高帧率显示。

terminal.integrated.gpuAcceleration 的默认值 auto 会尝试 WebGL 渲染器,如果失败则回退到 DOM 渲染器。在 Linux 虚拟机、不支持 WebGL 的浏览器或驱动程序过时的机器上,WebGL 可能无法正常工作。

自定义字形

启用GPU 加速后,自定义渲染(而非字体)可以改善某些字符在终端中的显示效果。这些字符包括框线字符 (U+2500-U+257F)、块元素 (U+2580-U+259F) 以及 Powerline 符号的一个子集 (U+E0B0-U+E0BF)。这意味着配置的字体无需支持这些字符,并且这些字符将以像素完美的方式绘制并拉伸到整个单元格的大小。

以下是配置了自定义行高和字符间距的这些字符的一些示例。请注意,由于自定义字形,单元格之间没有间隙

Box drawing, block characters and some Powerline symbols fill the entire cell in the terminal

可以通过将 terminal.integrated.customGlyphs 设置为 false 来禁用此功能。

重缩放模糊宽度的字形

某些 Unicode 字符具有模糊的宽度,终端的后端和前端可能对其大小不一致。当启用GPU 加速并且出现这种模糊性时,字形将水平重缩放以适应单个单元格并防止重叠。

例如,下图显示了被压缩到单个单元格中的罗马数字字符

VIII and XII characters would be rescaled horizontally so as to not overlap with following characters. They feature a thinner stroke width when this happens due to the scaling

可以通过将 terminal.integrated.rescaleOverlappingGlyphs 设置为 false 来禁用此功能,这将导致以下重叠渲染效果

When off, the VIII and XII characters may overlap the following characters

自定义提示符

大多数 shell 允许对终端提示符进行广泛的自定义。这通常通过在 VS Code 外部配置您的 shell 来完成,例如修改 $PS1 变量、设置 $PROMPT_COMMAND 或安装插件。

某些提示符,例如 Starshipoh-my-posh,可以显示 git 状态等信息,并且与大多数 shell 兼容,因此它们是初学者不错的选择。

常见问题

为什么我的终端显示多色三角形或黑色矩形?

终端在某些环境中可能存在 GPU 加速渲染问题。例如,您可能会看到一个大的多色三角形而不是文本。这通常是由驱动程序/虚拟机图形问题引起的,Chromium 中也会发生同样的情况。通过使用 --disable-gpu 标志启动 code 或将 terminal.integrated.gpuAcceleration 设置为 off 来避免在终端中使用画布来解决这些问题。有关更多信息,请参阅GPU 加速部分。

为什么终端中的颜色不正确?

最小对比度功能可能导致颜色显示不符合预期。可以通过以下方式禁用它

"terminal.integrated.minimumContrastRatio": 1

为什么这是默认设置的背景信息已在 vscode#146406 中解释。