排查 Windows 终端中的问题

本指南解决了使用 Windows 终端时可能会遇到的一些常见错误和障碍。

打开设置不会执行任何操作(或打开意外的应用程序)

如果单击下拉列表中的“设置”按钮,终端将尝试打开设置文件 settings.json。 这会使 OS 尝试并启动你配置的 .json 文件编辑器。 这可能是 Visual Studio、记事本或其他完全意外的应用程序。 如果计算机上没有已配置的 .json 编辑器,则 OS 最终会显示“你希望如何打开此文件”对话框。

提示

还可以使用设置 UI 来配置设置。 可以在操作页上了解如何打开设置 UI。

将 WSL 分发设置为在旧版本的 Windows 终端中启动时在主 ~ 目录中开始

默认情况下,配置文件的 startingDirectory%USERPROFILE% (C:\Users\<YourUsername>)。 这是一个 Windows 路径。 对于运行新版本 Windows 终端的 WSL 发行版,文件系统可以输入 ~ 来设置此主路径。 在旧版本的 Windows 终端中,可以使用 /home/<Your Ubuntu Username> 直接引用主文件夹。 例如,以下设置会在其主文件路径中启动“Ubuntu-20.04”分发:

{
    "name": "Ubuntu-20.04",
    "commandline" : "wsl -d Ubuntu-20.04",
    "startingDirectory" : "/home/<Your Ubuntu Username>"
}

如果使用非常早期版本的 Windows 终端,在引用分发的 startingDirectory 设置的主路径时,WSL 可能需要使用 \\wsl$\ 前缀。 例如,以下设置会在其主文件路径中启动“Ubuntu-18.04”分发:

{
    "name": "Ubuntu-18.04",
    "commandline" : "wsl -d Ubuntu-18.04",
    "startingDirectory" : "//wsl$/Ubuntu-18.04/home/<Your Ubuntu Username>"
}

重要

在较新版本的 Windows 中,startingDirectory 可以接受 Linux 样式的路径。

设置选项卡标题

若要使 shell 自动设置选项卡标题,请访问设置选项卡标题教程。 如果要设置自己的选项卡标题,请打开 settings.json 文件,然后执行以下步骤:

  1. 在所选命令行的配置文件中,添加 "suppressApplicationTitle": true 以禁止 shell 发出的任何标题更改事件。 仅将此设置添加到配置文件会将选项卡标题设置为配置文件的名称。

  2. 如果需要不是配置文件名称的自定义选项卡标题,请添加 "tabTitle": "TITLE"。 用首选选项卡标题替换“TITLE”。

PowerShell 中的命令行参数

请访问命令行参数页,了解命令行参数在 PowerShell 中的运作方式。

WSL 中的命令行参数

请访问命令行参数页,了解命令行参数在 WSL 中的运作方式。

设置 startingDirectory 时出现的问题

如果配置文件中忽略 startingDirectory,请先进行检查以确保 settings.json 文件中的语法是正确的。 为了帮助检查此语法,"$schema": "https://aka.ms/terminal-profiles-schema" 会自动注入。 某些应用程序(如 Visual Studio Code)在你进行编辑时,可以使用这个注入的架构来验证 json 文件。

如果设置正确,则可能正在运行一个启动脚本,该脚本单独设置终端的起始目录。 例如,PowerShell 具有自己单独的配置文件概念。 如果在此处更改起始目录,它将优先于在 Windows 终端中定义的设置。

或者,如果正在使用 commandline 配置文件设置运行脚本,则可能是在此处设置位置。 类似于 PowerShell 配置文件,此处命令的优先级高于 startingDirectory 配置文件设置。

startingDirectory 的目的是在给定目录中启动新的 Windows 终端实例。 如果终端运行更改其目录的任何代码,那么这里可能是进行查看的不错位置。

Ctrl+= 不会增加字体大小

如果使用德语键盘布局,则可能会遇到此问题。 如果将主键盘布局设置为德语,则 Ctrl+= 将反序列化为 Ctrl+Shift+0。 这是德语键盘的正确映射。

更重要的是,应用永远不会收到 Ctrl+Shift+0 击键。 这是因为如果有多个活动的键盘布局,则 Windows 将保留 Ctrl+Shift+0

若要禁用此功能以便 Ctrl+= 正常运行,请按照此博客文章中的“更改 Windows 10 中切换键盘布局的热键”说明进行操作。

将“切换键盘布局”选项更改为“未分配”(或关闭 Ctrl+Shift),然后依次选择“确定”、“应用”Ctrl+Shift+0 现在应作为键绑定工作,并传递给终端。

另一方面,如果对多种输入语言使用此热键功能,则可以在 settings.json 文件配置自己的自定义键绑定

文本模糊

如果不对上一帧中的数据进行模糊处理,某些显示驱动程序和硬件组合就无法正常处理滚动和/或脏区域。 若要缓解此问题,可以添加这些全局呈现设置的组合,以降低由于终端文本呈现器导致的硬件显示拉伸。

颜色看起来很奇怪! 屏幕上有黑条!

重要

这仅适用于版本 1.2+ 的 Windows 终端。 如果在 Windows 终端 1.0 或 1.1 中看到颜色问题,或者此处未捕获的问题,请提交 bug。

Windows 终端 1.2 及更高版本提供了对某些应用程序颜色设置的更好理解。 由于这种更好的理解,我们成功删除了大量导致用户体验不佳的兼容性块。 遗憾的是,有少量应用程序可能遇到问题。

我们会通过已知问题及其解决方法的列表使此故障排除项目保持最新。

PowerShell 中的黑线(5.1、6.x、7.0)

终端与 PowerShell 的行编辑库 PSReadline 组合时,可能会在屏幕上绘制黑色线条。 这些颜色错误的区域将在屏幕上扩展到提示之外,有命令参数、字符串或运算符之处。

PSReadline 版本 2.0.3 已发布,其中包含此问题的修补程序。 如果使用 PSReadline 的预发行版本,请注意修补程序尚不可用。

若要更新到最新版本的 PSReadline,请运行以下命令:

Update-Module PSReadline

为什么我的表情符号在跳转列表中不显示为图标?

只有从文件位置链接的图像才能呈现为跳转列表中的配置文件图标。 跳转列表图标不支持表情符号。

技术说明

使用 GetConsoleScreenBufferInfo 系列 API检索 Win32 格式的活动控制台颜色,然后尝试将其转换为跨平台 VT 序列(例如通过将 BACKGROUND_RED 转换为 \x1b[41m)的应用程序,可能会影响终端检测应用程序尝试使用的背景色的能力。

鼓励应用程序开发人员选择 Windows API 函数或 VT 序列来调整颜色,而不是尝试混合颜色。

键盘服务警告

从 Windows 终端 1.5 开始,如果禁用“触摸键盘和手写面板服务”,终端将显示警告。 操作系统需要使用此服务将输入事件正确路由到终端应用程序(以及 Windows 上的许多其他应用程序)。 如果看到此警告,可以按照以下步骤重新启用该服务:

  1. 在“运行”对话框中,运行 services.msc

    services.msc in the run dialog

  2. 找到“触摸键盘和手写面板服务”

    Touch Keyboard and Handwriting Panel Service in Services.msc

  3. 打开该服务的“属性”

    service properties

  4. 将“启动类型”更改为“自动”

    service startup type

  5. 单击“确定”,然后重启电脑。

重启计算机后,应会自动启动服务,且不会再出现对话框。

使用 git bash 命令行时,为什么会看到闪烁?

在 Windows 终端中使用 git bash 命令行时,你可能会注意到闪烁。 此行为实际上就是这样设计的。 终端遵守 git bash 对其的命令(将铃铛形状设置为可见,导致闪烁与铃铛响应相关),但我们知道这可能会造成干扰。 若要解决此问题,请使用文本编辑器打开 Git bash 的 .inputrc 文件。 此文件很可能位于路径 C:\Program Files\Git\etc 中。 若要用 Nano 文本编辑器打开,请执行以下操作:nano ~/.inputrc

更改默认值:

# none, visible or audible
set bell-style visible

将铃铛形状设置为 noneaudible 以消除可见的闪烁:

set bell-style none

按 Ctrl+O 再按 Ctrl + X 以保存并退出。

如何将 Windows 终端中的设置重置回默认设置?

若要将设置重置回原始默认设置,请删除 settings.json 文件。 这将导致 Windows 终端生成具有原始默认设置的 settings.json 文件。

重要

在 Windows 终端版本 1.10 或更高版本中,还需要从 settings.json 文件所在目录中删除 state.json 文件,才能将设置完全重置为默认值。

为什么 Acrylic 不透明度不能将我的 Windows 终端背景设为透明?

可以使用 useAcrylic 属性 设置终端窗口的透明度。 不透明度设置可能不适用于 Acrylic 有几个原因,包括:

  • 作为系统范围的策略,acrylic 仅对前景窗口启用。 因此,如果激活终端以外的任何其他窗口,终端的 acrylic 将关闭。
  • 如果 GPU 硬件不支持,acrylic 将不起作用。 如果在虚拟机 (VM) 或远程桌面上运行应用,则 acrylic 可能无法工作。
  • 操作系统可能会出于多种原因禁用 acrylic,例如处于节电(低电量)模式或使用远程桌面访问计算机时。

为什么将鼠标指针悬停在窗口上并键入时指针会消失?

此光标自动隐藏行为是设计使然,但可以通过在 Windows 设置中搜索“鼠标设置”>“其他鼠标设置”>“鼠标属性”>“指针选项”>取消选中“在打字时隐藏指针”来禁用此行为。 可能需要重新启动 Windows 终端才能使此更改生效。