终端外观
Visual Studio Code 终端的外观可以进行广泛的自定义。
使用 Hack 字体和 Nerd Font 符号的 Sapphire 主题,并带有自定义 Starship 提示符
文本样式
终端中的文本可以通过以下设置进行自定义
- 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 字体
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'"
终端光标
终端光标样式及其是否闪烁可通过以下设置进行自定义
- terminal.integrated.cursorStyle: 定义光标的形状,可以是块状(block)、线条状(line)或下划线状(underline)。
- terminal.integrated.cursorWidth: 当光标样式设置为
line
时,光标的宽度(以像素为单位)。 - terminal.integrated.cursorBlinking: 终端聚焦时,光标是否闪烁。
- terminal.integrated.cursorStyleInactive: 定义光标的形状,可以是轮廓状(outline)、块状(block)、线条状(line)、下划线状(underline)或无(none)。
自定义选项卡
默认情况下,当有两个或更多终端时,终端选项卡会出现在终端视图的右侧;当只有一个终端时,活动终端会显示在视图标题中。
可见性
默认可见性旨在节省水平空间,但可能不尽如人意。选项卡的显示方式可以通过以下设置进行配置
- 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}
: 由 OSC9;4
序列报告的进度状态。${separator}
: 一个条件分隔符 (-) ,仅当其被有值的变量或静态文本包围时才显示。${sequence}
: 进程提供给终端的名称。${task}
: 表示此终端与任务关联。${shellType}
: 检测到的 shell 类型。${shellCommand}
: 根据 shell 集成正在执行的命令。这也需要对检测到的命令行有高度信心,这在某些提示符框架中可能无法工作。${shellPromptInput}
: 根据 shell 集成,shell 的完整提示符输入。
图标
每个终端都有一个关联的图标,由其终端配置文件决定。默认图标及其颜色(如果未在配置文件中定义则使用)可以通过 terminal.integrated.tabs.defaultIcon 和 terminal.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)支持连字。
字体特性设置
当启用连字时,还可以以 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
)。这意味着配置的字体无需支持这些字符,同时这些字符也能完美地逐像素绘制并拉伸到整个单元格的大小。
下面是一些配置了自定义行高和字间距的字符示例。请注意,由于自定义字形,单元格之间没有间隙。
通过将 terminal.integrated.customGlyphs 设置为 false
可以禁用此功能。
缩放模糊宽度字形
某些 Unicode 字符具有模糊宽度,终端的后端和前端可能对其大小不一致。当启用GPU 加速并且出现这种模糊性时,字形将被水平缩放以适应单个单元格并防止重叠。
例如,下图显示了被压缩到一个单元格中的罗马数字字符
通过将 terminal.integrated.rescaleOverlappingGlyphs 设置为 false
可以禁用此功能,这会导致以下重叠渲染
自定义提示符
大多数 Shell 都允许广泛自定义终端提示符。这通过在 VS Code 之外配置您的 Shell 来完成,通常是修改 $PS1
变量、设置 $PROMPT_COMMAND
或安装插件。
像 Starship 和 oh-my-posh 这样的提示符会显示 Git 状态等信息,并且适用于大多数 Shell,因此它们是初次使用时的不错选择。
常见问题
为什么我的终端显示多色三角形或黑色矩形?
在某些环境下,终端的 GPU 加速渲染可能会出现问题。例如,您可能会看到一个大的多色三角形而不是文本。这通常是由驱动程序/虚拟机图形问题引起的,在 Chromium 中也会发生同样的情况。通过使用 --disable-gpu
标志启动 code
或将 terminal.integrated.gpuAcceleration 设置为 off
来避免在终端中使用画布,从而解决这些问题。有关更多信息,请参阅GPU 加速部分。
为什么终端中的颜色不正确?
最小对比度功能可能导致颜色显示不正常。可以通过以下方式禁用它
"terminal.integrated.minimumContrastRatio": 1
默认设置为此的原因在vscode#146406中有解释。