🚀 在 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 提示符和 Hack 字体以及 Nerd Font 符号的 Sapphire 主题

文本样式

可以使用以下设置自定义终端中的文本

  • terminal.integrated.fontFamily:要使用的字体系列,这需要采用 CSS 中 fontFamily 所采用格式的字符串。例如,"'Fira Code', monospace"Fira Code 配置为主字体,并在其缺少字形时将 monospace 配置为后备字体。
  • terminal.integrated.fontSize:更改终端中文本的字体大小。
  • terminal.integrated.letterSpacing:配置字符之间额外的水平间距(以像素为单位)。
  • terminal.integrated.lineHeight:配置字符之间额外的垂直间距,作为常规行高的倍数。例如,1.1 将添加 10% 的额外垂直空间。
  • terminal.integrated.fontWeight:配置“正常”文本的字体粗细。
  • terminal.integrated.fontWeightBold:配置“粗体”文本的字体粗细。
  • terminal.integrated.fontLigatures.*配置连字

Powerline 符号和 Nerd Fonts

Powerline 字体是特殊的修补字体,其中包含可在终端中使用的其他字符。VS Code 的终端 渲染一些 Powerline 符号,而无需配置字体,但如果需要更多字形,请使用字体系列设置配置 Powerline 字体。Powerline 字体通常以 " for Powerline" 结尾,以下设置是如何配置已修补的 DejaVu Sans Mono 的示例

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

Nerd Fonts 的工作方式相同,并且通常具有 " NF" 后缀,以下是如何配置 Hack 的 nerd fonts 变体的示例

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

终端光标

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

  • terminal.integrated.cursorStyle:定义光标的形状,可以是 block、line 或 underline。
  • terminal.integrated.cursorWidth:当光标样式设置为 line 时,光标应为多少像素宽。
  • terminal.integrated.cursorBlinking:终端处于焦点时,光标是否应闪烁。
  • terminal.integrated.cursorStyleInactive:定义光标的形状,可以是 outline、block、line、underline 或 none。

自定义选项卡

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

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

可见性

默认可见性旨在节省水平空间,但可能并不理想。选项卡的呈现方式可以使用以下设置进行配置

  • terminal.integrated.tabs.hideCondition:何时隐藏右侧的选项卡,设置为 "never" 以始终显示它们。
  • terminal.integrated.tabs.showActiveTerminal:何时在终端视图标头中显示活动终端。
  • terminal.integrated.tabs.showActions:何时在视图标头中显示活动终端的操作。
  • terminal.integrated.tabs.location:选项卡应显示在终端的左侧还是右侧。
  • terminal.integrated.tabs.enabled:是否使用选项卡,禁用将显示原始下拉视图。

选项卡文本

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

  • terminal.integrated.tabs.title:选项卡标题。
  • terminal.integrated.tabs.description:显示在标题右侧的文本。
  • terminal.integrated.tabs.separator:标题和描述之间的分隔符。

默认情况下,标题显示 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 加速。这有助于终端更快地工作并以高 FPS 显示,从而显着减少 CPU 花费在渲染每个帧上的时间。

默认 terminal.integrated.gpuAcceleration"auto" 会尝试 WebGL 渲染器,如果失败,则会回退到 DOM 渲染器。在 Linux VM、不支持 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 禁用此功能。

自定义提示符

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

诸如 Starshipoh-my-posh 之类的某些提示符会显示诸如 git 状态之类的信息,并且适用于大多数 shell,因此它们是入门时的不错选择。

常见问题

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

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

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

最小对比度功能可能会导致颜色未按预期显示。可以使用以下方式禁用它

"terminal.integrated.minimumContrastRatio": 1

有关为什么这是默认设置的背景信息,请参见 vscode#146406