现已发布!阅读关于 11 月新增功能和修复的内容。

终端基础

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 会在终端配置文件下拉列表中被检测到并显示。

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

通过选择 **TERMINAL** 面板右上角的 **+** 图标,从终端下拉菜单中选择一个配置文件,或通过触发 ⌃⇧` (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 设置来更改默认的 `view` 或 `editor` 区域终端位置。

新窗口中的终端

可以通过几种不同的方式在新 VS Code 窗口中打开终端。

  • 使用 ⌃⇧⌥` (Windows, Linux Ctrl+Shift+Alt+`)
  • 如果您有多个终端,请右键单击终端选项卡;如果您只打开了一个终端,请左键单击该选项卡。然后选择 **将终端移动到新窗口**。
  • 从多个不同的菜单中选择可用的 **新建终端窗口** 条目。

导航缓冲区

终端中的内容称为缓冲区,紧靠底部视图的上方部分称为“滚动回溯”。保留的滚动回溯量由 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.cn`、`vscode://path/to/file` 或 `file://path/to/file` 将使用协议的标准处理程序打开。例如,`https` 链接将打开浏览器。

    Opening a URI link will open it in the system browser

  • 文件链接:链接到已验证存在于系统上的文件。这些将文件在新编辑器选项卡中打开,并支持许多常见的行/列格式,如 `file:1:2`、`file: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

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

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+C** 和 **Ctrl+Shift+V**;可以通过 **Shift+Insert** 进行选择粘贴。
  • macOS: **Cmd+C** 和 **Cmd+V**。
  • Windows: **Ctrl+C** 和 **Ctrl+V**。

当启用 terminal.integrated.copyOnSelection 时,复制会在选中时自动完成。

默认情况下,粘贴多行时会发出警告,可以通过 terminal.integrated.enableMultiLinePasteWarning 设置禁用。仅当 shell 不支持“带括号粘贴模式”时才会这样做。启用该模式时,shell 会表明它可以处理多行粘贴。

使用鼠标

右键单击行为

右键单击行为因平台而异。

  • Linux:显示上下文菜单。
  • macOS:选择光标下的单词并显示上下文菜单。
  • Windows:如果存在选区,则复制并删除选区;否则,粘贴。

可以使用 terminal.integrated.rightClickBehavior 设置进行配置。选项包括:

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

列选择

按住 **Alt** 并单击并拖动,即可在终端内选择文本矩形,而不是常规的逐行选择。

使用 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

提示

**Ctrl+F** 可以通过从 要跳过 shell 的命令 中删除 `workbench.action.terminal.focusFind` 命令来发送到 shell。

运行选中文本

要使用 `runSelectedText` 命令,请在编辑器中选择文本,然后通过 **命令面板**(⇧⌘P (Windows, Linux Ctrl+Shift+P))运行 **终端: 在活动终端中运行选中文本** 命令,终端将尝试运行选中文本。如果活动编辑器中没有选中文本,则将在终端中运行光标所在行的全部内容。

提示

还可以使用 `workbench.action.terminal.runActiveFile` 命令运行活动文件。

最大化终端

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

请注意,只有当面板的 对齐 选项设置为 **Center** 时,才能最大化该面板。

全选

有一个 **终端: 全选** 命令,在 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"
}

还有可用的扩展,例如 Terminal Here,它们提供了更多选项。

固定尺寸终端

**终端: 设置固定尺寸** 命令允许更改终端及其后备伪终端使用的列数和行数。这将在必要时添加滚动条,这可能会导致用户体验不佳,并且通常不推荐,但尤其是在 Windows 上,对于在没有分页工具的情况下读取日志或长行来说,这是一个常见的需求。

您还可以右键单击终端选项卡并选择 **调整大小以适应内容宽度**(⌥Z (Windows, Linux Alt+Z))来调整终端列数以适应终端中最长的换行。

终端中的 GitHub Copilot

如果您可以访问 GitHub Copilot,您可以使用它来获取关于终端命令和 shell 脚本的 AI 驱动的帮助。有几种方法可以将 Copilot 与终端结合使用:

终端内联聊天

直接在终端中启动内联聊天以获取 shell 命令帮助。

  1. 打开终端(⌃` (Windows, Linux Ctrl+`)
  2. 按 **Ctrl+I**(⌘I (Windows, Linux Ctrl+I))或从命令面板运行 **终端内联聊天** 命令。
  3. 用自然语言输入您的问题或请求,例如:
    • “如何找到此目录中最大的文件?”
    • “向我展示如何撤销上一个 git 提交。”
    • “创建一个 bash 脚本来分析日志文件。”

Terminal inline chat helps you quickly get and run shell commands

当 Copilot 提供响应时,您可以选择 **运行** 直接执行命令,或选择 **插入** 将其添加到终端以进行进一步编辑。

有关使用 GitHub Copilot 与终端的更多信息,请参阅 使用终端内联聊天

终端聊天参与者

在聊天视图的提问模式下使用专用的 `@terminal` 聊天参与者。

  1. 打开聊天视图 (⌃⌘I (Windows, Linux Ctrl+Alt+I))
  2. 用 `@terminal` 开始您的问题,以将其定向到终端参与者。
  3. 询问有关终端命令、shell 脚本或解释终端输出的问题。

示例

  • @terminal 列出此工作区中 5 个最大的文件。
  • @terminal /explain 顶部 shell 命令。
  • @terminal 如何递归地 grep 模式。

在聊天中引用终端上下文

您可以在聊天提示中包含终端信息作为上下文。

  • 使用 `#terminalSelection` 将终端中的选中文本添加到聊天提示中。
  • 使用 `#terminalLastCommand` 包含您在终端中运行的最后一个命令。

后续步骤

本文档已涵盖了终端的基础知识。请继续阅读以了解更多关于:

  • 终端内联聊天 - 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` 示例为 `openInTerminal` 添加了键盘快捷键 **Ctrl+T**。

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

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

nvm (Node Version Manager) 用户通常在 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
{
  "@^\UF700" = "noop:";
  "@^\UF701" = "noop:";
  "@^\UF702" = "noop:";
  "@^\UF703" = "noop:";
  "@~^\UF700" = "noop:";
  "@~^\UF701" = "noop:";
  "@~^\UF702" = "noop:";
  "@~^\UF703" = "noop:";
}
EOF

终端渲染出现问题,我该怎么办?

默认情况下,集成终端会在大多数计算机上使用 GPU 加速进行渲染。通常,当出现渲染问题时,是由于您的硬件/操作系统/驱动程序与 GPU 渲染器不兼容。首先要尝试的是禁用 GPU 加速,用基于 DOM 的渲染替换渲染速度,后者更可靠。

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

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

粘贴内容时看到 `1~` 或 `[201~`

这通常意味着在终端中运行的程序/shell 请求打开“带括号粘贴模式”,但某些程序/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 模式,可能会发生这种情况,这是因为在您的 init 脚本中将 `$EDITOR` 或 `$VISUAL` 设置为 `vi`/`vim`。

为了解决此问题,您有两个选择:

  • 确保不要将 `$EDITOR` 设置为 `vi(m)`。但是,如果您希望 Git 编辑器正常工作,则此选项不可行。
  • 在您的 init 脚本中添加 `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

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

© . This site is unofficial and not affiliated with Microsoft.