现已发布!阅读 10 月份的新功能和修复。

终端基础

Visual Studio Code 包含一个功能齐全的集成终端,它从工作区的根目录启动。它提供与编辑器的集成以支持链接错误检测等功能。集成终端可以运行诸如 mkdir 和 git 之类的命令,就像独立终端一样。

您可以按如下方式打开终端

  • 从菜单中,使用**终端** > **新终端**或**查看** > **终端**菜单命令。
  • 从**命令面板**(⇧⌘P(Windows、Linux Ctrl+Shift+P),使用**查看:切换终端**命令。
  • 在资源管理器中,您可以使用**在集成终端中打开**上下文菜单命令从文件夹打开新的终端。
  • 要切换终端面板,请使用⌃`(Windows、Linux Ctrl+`键盘快捷键。
  • 要创建新的终端,请使用⌃⇧`(Windows、Linux Ctrl+Shift+`键盘快捷键。

VS Code 的终端具有名为 shell 集成的附加功能,它通过命令左侧和滚动条中的装饰来跟踪命令的运行位置

The integrated terminal can run commands such as mkdir and git just like a standalone terminal. VS Code's terminal has additional functionality called shell integration that tracks where commands are run with decorations on the left of a command and in the scrollbar.

注意:如果您更喜欢在 VS Code 之外工作,请使用⇧⌘C(Windows、Linux Ctrl+Shift+C键盘快捷键打开外部终端

终端 shell

集成终端可以使用机器上安装的各种 shell,默认 shell 从系统默认值中获取。shell 会被检测并显示在终端配置文件下拉菜单中。

A detected profile can be chosen in the dropdown next to the new terminal button. Some examples on Windows include PowerShell, Command Prompt, Git Bash and WSL

您可以在终端配置文件文章中了解更多有关配置终端 shell 的信息。

管理终端

终端选项卡 UI 位于终端视图的右侧。每个终端都有一个带有其名称、图标、颜色和组装饰(如果有)的条目。

Activating the Launch Profile button will show all detected and manually configured profiles

通过选择**终端**面板右上角的**+**图标、从终端下拉菜单中选择配置文件或触发⌃⇧`(Windows、Linux Ctrl+Shift+`命令来添加终端实例。此操作会在与该终端关联的选项卡列表中创建另一个条目。

通过将鼠标悬停在选项卡上并选择**垃圾桶**按钮、选择选项卡项并按Delete键、使用**终端:杀死活动终端实例**命令或通过右键单击上下文菜单来删除终端实例。

使用下一个焦点⇧⌘](Windows、Linux Ctrl+PageDown和上一个焦点⇧⌘[(Windows、Linux Ctrl+PageUp在终端组之间导航。

当终端状态发生变化时,选项卡标签上的终端标题右侧可能会显示图标。一些示例包括铃声(macOS)以及任务,在没有错误时显示复选标记,否则显示 X。将鼠标悬停在图标上以阅读状态信息,其中可能包含操作。

组(拆分窗格)

通过拆分终端将多个终端并排放置并创建一个组

  • 将鼠标悬停在右侧终端列表中的条目上,然后选择内联拆分按钮。
  • 右键单击上下文菜单,然后选择**拆分**菜单选项。
  • Alt键并单击选项卡、**+**按钮或终端面板上的单个选项卡。
  • 触发⌘\(Windows、Linux Ctrl+Shift+5命令。

提示:新终端的工作目录取决于terminal.integrated.splitCwd设置

通过聚焦上一个窗格⌥⌘←(Windows、Linux Alt+Left或下一个窗格⌥⌘→(Windows、Linux Alt+Right在组中的终端之间导航。

在列表中拖放选项卡会重新排列它们。将选项卡拖放到主终端区域可以将终端从一个组移动到另一个组。

可以通过**终端:拆分终端**命令(通过命令面板或右键单击上下文菜单)将终端移动到自己的组中。

编辑器区域中的终端

您可以使用**终端:在编辑器区域中创建新终端**命令、**终端:在编辑器区域中向侧面创建新终端**命令或通过将终端从终端视图拖放到编辑器区域来在编辑器区域中打开终端(终端编辑器)。终端编辑器像常规编辑器选项卡一样显示

Terminal editors are presented like regular text file tabs

您可以使用编辑器组布局系统(例如,PowerShell 和 WSL 终端堆叠在文件编辑器的右侧)在任一侧或多个维度上排列终端编辑器

Terminal editors are can be laid out using the editor group layout system, for example 2 terminals could sit to the right of a text editor

terminal.integrated.defaultLocation 设置可以更改默认的 vieweditor 区域终端位置。

导航缓冲区

终端中的内容称为缓冲区,底部视窗正上方的部分称为“回滚”。 保留的回滚量由 terminal.integrated.scrollback 设置 决定,默认值为 1000 行。

有各种命令可用于在终端缓冲区中导航

  • 向上滚动一行 - ⌥⌘PageUp (Windows Ctrl+Alt+PageUp,Linux Ctrl+Shift+Up)
  • 向下滚动一行 - ⌥⌘PageDown (Windows Ctrl+Alt+PageDown,Linux Ctrl+Shift+Down)
  • 向上滚动一页 - PageUp (Windows,Linux Shift+PageUp)
  • 向下滚动一页 - PageDown (Windows,Linux Shift+PageDown)
  • 滚动到顶部 - ⌘Home (Windows Ctrl+Home,Linux Shift+Home)
  • 滚动到底部 - ⌘End (Windows Ctrl+End,Linux Shift+End)

命令 导航也可使用(见 shell 集成

  • 滚动到上一个命令 - ⌘↑ (Windows,Linux Ctrl+Up)
  • 滚动到下一个命令 - ⌘↓ (Windows,Linux Ctrl+Down)

滚动将立即发生,但可以通过 terminal.integrated.smoothScrolling 设置配置为在短时间内进行动画。

终端具有复杂的链接检测功能,并与编辑器集成,甚至支持扩展贡献的链接处理程序。 将鼠标悬停在链接上以显示下划线,然后按住 Ctrl/Cmd 键并单击。

以下内置链接处理程序按优先级顺序使用

  • URI/URL:看起来像 URI 的链接,例如 https://vscode.js.cnvscode://path/to/filefile://path/to/file 将使用协议的标准处理程序打开。 例如,https 链接将打开浏览器。

    Opening a URI link will open it in the system browser

  • 文件链接:指向系统上已验证存在的文件的链接。 这些将在新的编辑器选项卡中打开文件,并支持许多常见的行/列格式,例如 file:1:2file:line 1, column 2

    Activating a file link will open it in an editor

  • 文件夹链接:指向文件夹的链接类似于文件链接,但将在该文件夹处打开一个新的 VS Code 窗口。

    Activating a folder link will open it in a new window

  • 单词链接:使用 terminal.integrated.wordSeparators 设置的回退链接类型。 该设置定义单词边界,并将几乎所有文本都变成单词。 激活单词链接将在工作区中搜索该单词。 如果只有一个结果,它将打开,否则它将显示搜索结果。 单词链接被认为是“低置信度”,除非您按住 Ctrl/Cmd 键,否则不会显示下划线或工具提示。 它们对行和列后缀的支持也有限。

    Activating a word link 'terminal:15' will open a Quick Pick searching the workspace for all files containing 'terminal', choosing an option will open the file at line 15

打开检测到的链接 命令 (⇧⌘G (Windows,Linux Ctrl+Shift+G)) 可用于通过键盘访问链接

Open Detected Link opens a quick pick with all links in the viewport, split into categories

提示: 如果链接验证导致性能问题,例如在高延迟远程环境中,可以通过 terminal.integrated.enableFileLinks 设置 禁用它。

扩展可以贡献链接提供程序,使扩展能够定义单击时发生的事情。 一个例子是 GitLens 扩展检测 Git 分支链接。

When GitLens is installed, hovering a branch name will provide custom behavior to open the branch in the UI

键盘辅助功能

链接可以通过几个命令通过键盘访问,这些命令根据链接的类型打开链接。

  • 终端:打开最后一个本地文件链接 - 打开最新的本地文件链接。 没有默认的键绑定。
  • 终端:打开最后一个 URL 链接 - 打开最新的 URI/URL 链接。 没有默认的键绑定。
  • 终端:打开检测到的链接... - 打开一个包含所有检测到的链接的可搜索快速选择,包括单词链接。 默认键绑定为 Ctrl/Cmd+Shift+O,与在编辑器中转到符号键盘快捷键相同。

复制和粘贴

复制和粘贴的键绑定遵循平台标准

  • Linux:Ctrl+Shift+CCtrl+Shift+V; 选择粘贴可以使用 Shift+Insert
  • macOS:Cmd+CCmd+V
  • Windows:Ctrl+CCtrl+V

terminal.integrated.copyOnSelection 启用时,选择时会自动进行复制。

默认情况下,粘贴多行时会出现警告,可以通过 terminal.integrated.enableMultiLinePasteWarning 设置禁用。 只有当 shell 不支持“带括号的粘贴模式”时才会执行此操作。 当该模式启用时,shell 正在指示它可以处理多行粘贴。

使用鼠标

右键单击行为

右键单击行为因平台而异

  • Linux:显示上下文菜单。
  • macOS:选择光标下的单词并显示上下文菜单。
  • Windows:如果有选择,则复制并放下选择,否则粘贴。

这可以使用 terminal.integrated.rightClickBehavior 设置进行配置。 选项是

  • default - 显示上下文菜单。
  • copyPaste - 有选择时复制,否则粘贴。
  • paste - 右键单击时粘贴。
  • selectWord - 选择光标下的单词并显示上下文菜单。
  • nothing - 不执行任何操作并将事件传递给终端。

使用 Alt 重新定位光标

Alt 和左键单击将重新定位光标到鼠标下方。 这是通过模拟箭头键来实现的,对于某些 shell 或程序可能无法可靠地工作。 此功能可以使用 terminal.integrated.altClickMovesCursor 设置禁用。

鼠标事件模式

当在终端中运行的应用程序打开鼠标事件模式(例如 Vim 鼠标模式)时,鼠标交互将发送到应用程序而不是终端。 这意味着单击和拖动将不再创建选择。 可以通过在 Windows 和 Linux 上按住 Alt 键来强制终端选择,这也可以在 macOS 上使用 Option 键完成,但需要先启用 terminal.integrated.macOptionClickForcesSelection 设置。

查找

集成的终端具有查找功能,可以通过 ⌘F (Windows,Linux Ctrl+F) 触发。

Find in the terminal will highlight all text matching the query

提示: 通过从 跳过 shell 的命令 中删除 workbench.action.terminal.focusFind 命令,可以将 Ctrl+F 发送到 shell。

运行选定文本

要使用 runSelectedText 命令,请选择编辑器中的文本,并通过命令面板 (⇧⌘P (Windows,Linux Ctrl+Shift+P)) 运行命令终端:在活动终端中运行选定文本,终端将尝试运行选定文本。 如果在活动编辑器中未选择任何文本,则光标所在的行将完全在终端中运行。

提示: 也使用命令 workbench.action.terminal.runActiveFile 运行活动文件。

最大化终端

可以通过点击带有向上箭头图标的“最大化面板大小”按钮来最大化终端视图。这将暂时隐藏编辑器并最大化面板。这对于暂时关注大量输出很有用。一些开发者通过打开新窗口、最大化面板并隐藏侧边栏来将 VS Code 用作独立的终端。

注意,只有当面板的 对齐 选项设置为 中心 时,才能最大化面板。

全选

有一个 终端:全选 命令,它在 macOS 上绑定到 Cmd+A,但在 Windows 和 Linux 上没有默认的键绑定,因为它可能会与 shell 热键冲突。要使用 Ctrl+A 全选,请添加此自定义键绑定

{
  "key": "ctrl+a",
  "command": "workbench.action.terminal.selectAll",
  "when": "terminalFocus && !isMac"
},

拖放文件路径

将文件拖放到终端中会将路径输入到终端,并进行转义以匹配活动 shell。

使用任务自动化终端

可以使用 任务 功能来自动启动终端,例如,以下 .vscode/tasks.json 文件将在窗口启动时在一个终端组中启动一个命令提示符和 PowerShell 终端

{
  "version": "2.0.0",
  "presentation": {
    "echo": false,
    "reveal": "always",
    "focus": false,
    "panel": "dedicated",
    "showReuseMessage": true
  },
  "tasks": [
    {
      "label": "Create terminals",
      "dependsOn": [
        "First",
        "Second"
      ],
      // Mark as the default build task so cmd/ctrl+shift+b will create them
      "group": {
        "kind": "build",
        "isDefault": true
      },
      // Try start the task on folder open
      "runOptions": {
        "runOn": "folderOpen"
      }
    },
    {
      // The name that shows up in terminal tab
      "label": "First",
      // The task will launch a shell
      "type": "shell",
      "command": "",
      // Set the shell type
      "options": {
        "shell": {
          "executable": "cmd.exe",
          "args": []
        }
      },
      // Mark as a background task to avoid the spinner animation on the terminal tab
      "isBackground": true,
      "problemMatcher": [],
      // Create the tasks in a terminal group
      "presentation": {
        "group": "my-group"
      }
    },
    {
      "label": "Second",
      "type": "shell",
      "command": "",
      "options": {
        "shell": {
          "executable": "pwsh.exe",
          "args": []
        }
      },
      "isBackground": true,
      "problemMatcher": [],
      "presentation": {
        "group": "my-group"
      }
    }
  ]
}

此文件可以提交到存储库以与其他开发者共享,也可以通过 workbench.action.tasks.openUserTasks 命令创建为用户任务。

工作目录

默认情况下,终端将在资源管理器中打开的文件夹中打开。 terminal.integrated.cwd 设置允许指定要打开的自定义路径

{
  "terminal.integrated.cwd": "/home/user"
}

Windows 上的拆分终端将在父终端启动的目录中启动。在 macOS 和 Linux 上,拆分终端将继承父终端的当前工作目录。可以使用 terminal.integrated.splitCwd 设置更改此行为

{
  "terminal.integrated.splitCwd": "workspaceRoot"
}

还有一些可用的扩展提供了更多选项,例如 终端在这里

固定尺寸终端

终端:设置固定尺寸 命令允许更改终端及其支持的伪终端使用的列数和行数。这将在必要时添加滚动条,这可能会导致不愉快的用户体验,通常不建议这样做,但它是在 Windows 上的常见请求,尤其是在阅读日志或长行时,分页工具不可用。

您也可以右键单击终端选项卡并选择 切换尺寸为内容宽度 (⌥Z (Windows、Linux Alt+Z)) 将终端列数调整为终端中最大的换行行。

下一步

本文档已经介绍了终端的基础知识。继续阅读以了解更多关于

  • 终端内联聊天 - 在您的终端中直接获得 AI 驱动的建议。
  • 任务 - 任务让您与外部工具集成并充分利用终端。
  • 掌握 VS Code 的终端 - 一篇外部博客,包含大量关于终端的强大用户技巧。
  • 通过浏览 VS Code 中的键盘快捷键来探索终端命令(首选项:打开键盘快捷键 然后搜索“terminal”)。

常见问题

我无法启动终端

有一个 专门的故障排除指南 用于解决这类问题。

如何创建管理员终端?

集成终端 shell 正在使用 VS Code 的权限运行。如果您需要以提升(管理员)或不同的权限运行 shell 命令,请使用平台实用程序(例如 runas.exe)在终端中。

您可以在 配置配置文件 中了解有关通过终端配置文件自定义终端的更多信息。

我可以为资源管理器的“在集成终端中打开”命令添加键盘快捷键吗?

您可以从资源管理器通过 在集成终端中打开 上下文菜单命令为特定文件夹打开新的终端。

A folder selected in the Explorer displaying the context menu with the Open in Integrated Terminal command

默认情况下,在集成终端中打开 没有关联的键盘快捷键,但您可以通过键盘快捷键编辑器 (⌘K ⌘S (Windows、Linux Ctrl+K Ctrl+S)) 添加您自己的键绑定到 keybindings.json

以下 keybindings.json 示例添加了 Ctrl+T 作为 openInTerminal 的键盘快捷键。

{
  "key": "ctrl+t",
  "command": "openInTerminal",
  "when": "filesExplorerFocus"
}

为什么 nvm 在启动集成终端时抱怨前缀选项?

nvm(节点版本管理器)用户通常第一次在 VS Code 的集成终端中看到此错误

nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.1 --silent` to unset it

这主要是一个 macOS 问题,不会发生在外部终端中。造成这种情况的典型原因如下:

  • npm 是使用路径中的另一个 node 实例全局安装的(例如 /usr/local/bin/npm)。
  • 为了将开发工具放在 $PATH 上,VS Code 将在启动时启动一个 bash 登录 shell。这意味着您的 ~/.bash_profile 已经运行,当集成终端启动时,它将运行另一个 登录 shell,可能会以意想不到的方式重新排序 $PATH

要解决此问题,您需要找到旧 npm 的安装位置,并将其及其过时的 node_modules 移除。找到 nvm 初始化脚本,并在其运行之前运行 which npm,这应该在您启动新终端时打印路径。

找到 npm 的路径后,通过运行类似以下命令的命令来解析符号链接,找到旧的 node_modules

ls -la /usr/local/bin | grep "np[mx]"

这将在最后提供已解析的路径

... npm -> ../lib/node_modules/npm/bin/npm-cli.js
... npx -> ../lib/node_modules/npm/bin/npx-cli.js

从此处移除文件并重新启动 VS Code 应该可以解决问题

rm /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js
rm /usr/local/bin/npx /usr/local/lib/node_modules/npm/bin/npx-cli.js

为什么 macOS 在我调整终端拆分窗格大小时会发出蜂鸣声?

⌃⌘← 和 ⌃⌘→ 是调整终端中单个拆分窗格大小的默认键绑定。虽然它们有效,但由于 Chromium 中的问题,它们还会导致系统播放“无效键”声音。 推荐的解决方法 是通过在您的终端中运行以下命令来告诉 macOS 对这些键绑定执行无操作

mkdir -p ~/Library/KeyBindings
cat > ~/Library/KeyBindings/DefaultKeyBinding.dict <<EOF
{
  "^@\UF701" = "noop";
  "^@\UF702" = "noop";
  "^@\UF703" = "noop";
}
EOF

我在终端渲染方面遇到问题。我该怎么办?

默认情况下,集成终端将在大多数机器上使用 GPU 加速进行渲染。通常,当出现渲染问题时,问题是您的硬件/操作系统/驱动程序中的某些内容与 GPU 渲染器配合不佳。首先尝试禁用 GPU 加速,以牺牲渲染速度换取基于 DOM 的渲染,后者更可靠

{
  "terminal.integrated.gpuAcceleration": "off"
}

有关更多信息,请参见 GPU 加速 部分。

当我粘贴内容时,我看到 1~[201~

这通常意味着终端中运行的程序/shell 请求打开“带括号的粘贴模式”,但某些内容不支持它。要解决此问题,您可以运行 printf "\e[?2004l" 为该会话禁用它,或者将以下内容添加到您的 ~/.inputrc 文件中

set enable-bracketed-paste off

或者,可以使用此设置强制带括号的粘贴模式忽略 shell 的请求以将其关闭

{
  "terminal.integrated.ignoreBracketedPasteMode": true
}

在 zsh 中,Ctrl+A、Ctrl+R 输出 ^A、^R

如果 zsh 处于 Vim 模式而不是 Emacs 模式,则可能会发生这种情况,因为您在初始化脚本中将 $EDITOR$VISUAL 设置为 vi/vim

要解决此问题,您有两个选择

  • 确保您没有将 $EDITOR 设置为 vi(m)。但是,如果您希望您的 Git 编辑器正常工作,这将不是一种选择。
  • bindkey -e 添加到您的初始化脚本中以显式设置 Emacs。

如何配置 Cmd+. 以映射到 Ctrl+C,就像 macOS 的内置终端一样?

macOS 默认终端使用 Cmd+. 执行与 Ctrl+C 相同的操作。要获得 VS Code 中的这种行为,请添加此 自定义键绑定

{
  "key": "cmd+.",
  "command": "workbench.action.terminal.sendSequence",
  "when": "terminalFocus",
  "args": { "text": "\u0003" }
}

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

我们默认启用的辅助功能之一是确保前景色文本的最小对比度比率至少为 4.5。此功能确保无论使用哪种 shell 和主题,文本都是可读的,否则无法实现。要禁用此功能,您可以设置

"terminal.integrated.minimumContrastRatio": 1

有关更多信息,请参见 最小对比度比率 部分。