终端基础

Visual Studio Code 包含一个功能齐全的集成终端,从你的工作区根节点开始。它与编辑器集成,支持链接错误检测等功能。集成终端可以像独立终端一样运行 mkdir 和 git 等命令。

您可以按以下方式开启终端:

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

VS Code 的终端还有额外功能,称为 shell 集成,可以追踪命令执行位置,命令左侧和滚动条中标有装饰:

集成终端可以像独立终端一样运行 mkdir 和 git 等命令。VS Code 的终端还有一个叫做 shell 集成的功能,可以追踪命令运行的位置,命令左侧和滚动条里会显示装饰。

注释

如果你更喜欢在VS Code之外工作,可以用⇧⌘C(Windows,Linux Ctrl+Shift+C快捷键打开外部终端

终端壳体

集成终端可以使用你机器上安装的各种外壳,默认接口是从系统默认状态中提取的。壳体会被检测并在终端配置文件下拉菜单中显示。

在新终端按钮旁的下拉菜单中可以选择检测到的配置文件。Windows上的一些例子包括PowerShell、命令提示符、Git Bash和WSL

你可以在终端配置文件文章中了解更多关于配置终端壳的信息。

终端管理

终端标签页的界面在终端视图的右侧。每个终端都有一条条目,包含其名称、图标、颜色和组别装饰(如有)。

激活启动配置文件按钮后,会显示所有检测到并手动配置的配置文件

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

通过将鼠标悬停标签并选择“垃圾桶”按钮,选择标签项并按删除,使用“终端:关闭活跃终端实例”命令,或通过右键菜单删除终端实例。

在终端组间切换时,使用焦点 ⇧⌘(Windows,Linux Ctrl+PageDown和焦点前段 ⇧⌘[(Windows,Linux Ctrl+PageUp

当终端状态发生变化时,标签标签上可能出现图标。例如,macOS上会显示铃铛,任务中没有错误时显示勾选,否则显示X。将图标悬停以查看状态信息,这些信息可能包含作。

分组(分割面板)

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

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

新终端的工作目录依赖于

terminal.integrated.splitCwd
  • 在VS代码中打开
  • 在VS Code Insiders中开放
环境

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

在列表中拖拽标签可以重新排列它们。将标签拖入主终端区域可以将终端从一个组移动到另一个组。

将终端移动到独立组可以通过命令面板中的“终端:解除分离终端”命令,或在右键菜单中完成。

编辑器区的终端

你可以在编辑器区域(终端编辑器编辑器)中打开终端,使用“终端:在编辑器区域创建新终端”命令,或者在侧边命令中“终端:在编辑器区域创建新终端”,或者将终端从终端视图拖入编辑器区域。终端编辑器的呈现方式类似于普通编辑器标签页:

终端编辑器呈现为普通的文本文件标签页

你可以在两侧放置终端编辑器,或者通过编辑器组布局系统(例如PowerShell和WSL终端堆叠在文件编辑器右侧):

终端编辑器可以通过编辑器组布局系统进行布局,例如两个终端可以位于文本编辑器的右侧

terminal.integrated.defaultLocation
  • 在VS代码中打开
  • 在VS Code Insiders中开放
设置可以更改默认值视图编辑区域终端位置。

新窗口中的终端

在新的 VS Code 窗口中打开终端有几种不同的方式:

  • 使用 ⌃⇧⌥'(Windows,Linux Ctrl+Shift+Alt+'
  • 如果你有多个终端,右键点击终端标签页;如果只有一个终端,则左键点击标签页。然后选择“移动终端到新窗口”。
  • 选择多个菜单中可用的新终端窗口条目

缓冲区导航

终端中的内容称为缓冲区,底部视口上方的部分称为“scrollback”。保留的滚动量由

terminal.integrated.scrollback
  • 在VS代码中打开
  • 在VS Code Insiders中开放
设置和默认值为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
  • 滚动到最底部 - ⌘结束(Windows Ctrl+结束,Linux Shift+结束

命令导航也可用(参见shell集成):

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

滚动会瞬时发生,但可以通过以下功能配置为短时间内动画

terminal.integrated.smoothScrolling
  • 在VS代码中打开
  • 在VS Code Insiders中开放
环境。

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

这些内置链路处理程序按以下优先级顺序使用:

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

    打开URI链接会在系统浏览器中打开

  • 文件链接:指向系统中已验证存在的文件链接。这些工具会在新的编辑器标签页中打开文件,并支持许多常见的行列格式,例如文件:1:2,文件:第1行,第2列.

    激活文件链接会在编辑器中打开

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

    激活文件夹链接会在新窗口中打开

  • Word 链接:使用以下

    terminal.integrated.wordSeparators
    • 在VS代码中打开
    • 在VS Code Insiders中开放
    环境。该设定定义了单词边界,并将几乎所有文本都转化为单词。激活单词链接会在工作区中搜索该单词。如果只有一个结果,它会打开,否则会显示搜索结果。Word 链接被视为“低信度”,除非你按住 Ctrl/Cmd 键,否则不会显示下划线或提示。它们对行和列后缀的支持也有限。

    激活单词链接“terminal:15”会打开快速选择,搜索工作区中包含“terminal”的所有文件,选择选项后会打开第15行的文件

可以使用“已检测到的链接”命令(⇧⌘O(Windows,Linux Ctrl+Shift+O)通过键盘访问链接:

打开检测到的链接会打开一个快速选择,所有链接都放在视口中,按类别分类

提示

如果链路验证导致性能问题,比如在高延迟的远程环境中,可以通过

terminal.integrated.enableFileLinks
  • 在VS代码中打开
  • 在VS Code Insiders中开放
环境

扩展可以贡献链接提供者,允许扩展定义点击时发生的事情。一个例子是GitLens扩展检测Git分支链接。

安装 GitLens 后,将鼠标悬停在分支名称中即可在 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
  • 在VS代码中打开
  • 在VS Code Insiders中开放
已启用。

默认情况下,粘贴多行时会有警告,可以通过以下方式关闭

terminal.integrated.enable多行粘贴警告
  • 在VS代码中打开
  • 在VS Code Insiders中开放
环境。只有当外壳不支持“包围带粘贴模式”时才会这样做。当该模式启用时,shell表示它可以处理多行粘贴。

使用鼠标

右键点击行为

右键点击的行为因平台而异:

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

这可以通过以下方式进行配置

terminal.integrated.rightClickBehavior
  • 在VS代码中打开
  • 在VS Code Insiders中开放
环境。选项包括:

  • 默认- 显示上下文菜单。
  • 复制粘贴- 有选择时复制,否则粘贴。
  • 粘贴- 右键粘贴。
  • selectWord- 选择光标下方的单词,并显示上下文菜单。
  • 没什么- 什么都不做,把事件传到终端。

列选

Alt并左键拖曳,可以在终端内选择一个矩形文本,而不是普通的行选。

用Alt重新定位光标

Alt 和左键点击会把光标重新定位到鼠标下方。这通过模拟箭头按键来实现,但对于某些shell或程序来说,这种方法可能并不可靠。此功能可以通过以下方式关闭

terminal.integrated.altClickMovesCursor
  • 在VS代码中打开
  • 在VS Code Insiders中开放
环境。

鼠标事件模式

当在终端中运行的应用程序开启鼠标事件模式(如 Vim 鼠标模式)时,鼠标作会发送到应用程序而非终端。这意味着点击和拖拽将不再生成选择。在Windows和Linux上,可以通过按住Alt键强制选择终端,macOS上也可以用Option键来实现,但需要启用

terminal.integrated.macOptionClickForcesSelection
  • 在VS代码中打开
  • 在VS Code Insiders中开放
先定格。

查找

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

在终端中查找 将高亮所有与查询匹配的文本

提示

Ctrl+F 可以通过移除workbench.action.terminal.focusFind命令中跳过 shell

运行选定文本

使用runSelectedText命令,在编辑器中选择文本,并通过命令面板Windows,Linux Ctrl+Shift+P在活动终端运行命令:在活动终端运行所选文本,终端将尝试运行所选文本。如果活跃编辑器中未选择任何文本,光标所在的整行将在终端中运行。

提示

同时使用命令运行当前文件workbench.action.terminal.runActiveFile.

最大化终端

通过点击带有向上倒V形图标的最大化面板尺寸按钮,可以最大化终端视图。这样可以暂时隐藏编辑器,最大化面板。这有助于暂时专注于大量输出。有些开发者通过打开新窗口、最大化面板并隐藏侧边栏,将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指挥部。

工作目录

默认情况下,终端会在资源管理器中打开的文件夹。该

终端.整合.cwd
  • 在VS代码中打开
  • 在VS Code Insiders中开放
设置允许指定自定义路径以打开:

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

Windows 上的分断终端会从父终端起始的目录开始。在macOS和Linux上,分割终端会继承父终端当前的工作目录。这种行为可以通过以下方式进行改变

terminal.integrated.splitCwd
  • 在VS代码中打开
  • 在VS Code Insiders中开放
地点:

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

还有一些扩展功能提供更多选项,比如Terminal Here

固定尺寸端子

终端:设置固定尺寸命令允许更改终端及其支持伪终端使用的列和行数。这会在必要时添加滚动条,可能导致用户体验不佳且通常不推荐,但在Windows上,当没有分页工具时,阅读日志或长行时,这是常见的要求。

你也可以右键点击终端标签页,选择切换大小为内容宽度⌥Z(Windows,Linux Alt+Z),将终端列数调整到终端中最大的反行。

终端中的GitHub Copilot

如果你能访问GitHub Copilot,可以用它获得AI驱动的终端命令和shell脚本帮助。在终端上使用Copilot有几种方式:

终端内联聊天

直接在终端内开启内联聊天,获取关于shell命令的帮助:

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

终端内联聊天帮助你快速获取并运行 shell 命令

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

关于在终端中使用GitHub Copilot的更多信息,请参见“使用终端内联聊天”。

终端聊天参与者

使用专用的@terminal聊天界面中的询问模式中聊天参与者:

  1. 打开聊天视图(⌃⌘I(Windows,Linux Ctrl+Alt+I)
  2. 你的问题开场白@terminal将它引导到终端参与者
  3. 询问终端命令、shell脚本,或者解释终端输出

示例:

  • @terminal列出该工作区中最大的5个文件
  • @terminal /explain top shell 命令
  • @terminal如何递归地对模式进行grep处理

聊天中的参考终端上下文

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

  • 用途#terminalSelection将终端中选定的文本添加到你的聊天提示中
  • 用途#terminalLastCommand包含你在终端中执行的最后命令

下一步

终端的基本内容已在本文档中介绍。继续阅读,了解更多:

  • 终端内联聊天——AI驱动的建议直接出现在你的终端中。
  • 任务——任务允许你与外部工具集成,并大量利用终端。
  • 掌握 VS Code 的终端——一个外部博客,包含大量高级用户终端技巧。
  • 通过在 VS Code 中浏览键盘快捷方式来探索终端命令(偏好设置:打开键盘快捷方式后搜索“terminal”)。

常见问题

我启动终端时遇到了问题

这类问题有专门的排查指南

我如何创建管理员终端?

集成终端壳是在VS Code权限下运行的。如果你需要运行带有提升权限(管理员)或其他权限的shell命令,可以使用平台工具,比如runas.exe在终端内。

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

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

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

在资源管理器中选择的文件夹,显示右键菜单,使用“在集成终端打开”命令

默认情况下,打开集成终端没有快捷键,但你可以通过键盘快捷指令编辑器(⌘K ⌘S(Windows,Linux Ctrl+K Ctrl+S)添加自己的快捷方式,为你的快捷键添加快捷方式keybindings.json.

keybindings.json下面的示例增加了键盘快捷键 Ctrl+T 用于openIn终端.

{
  "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通过另一个实例 进行了全局安装节点这就在你路径上的某个位置(比如/usr/local/bin/npm).
  • 要让开发工具在$PATHVS Code 启动时会启动 bash 登录 shell。这意味着你的~/.bash_profile已经运行了,当集成终端启动时,它会运行另一个登录壳,重新排序$PATH可能以意想不到的方式出现。

要解决这个问题,你需要追溯到旧的NPM安装并移除它及其过时的node_modules。找到NVM初始化脚本和运行哪个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请求开启“括号粘贴模式”,但某些设备不支持。为了解决这个问题,你可以选择跑步printf “\e[?2004L”在该会话中禁用它或在你的~/.inputrc文件:

set enable-bracketed-paste off

或者,通过关闭括号粘贴模式,可以通过以下设置强制忽略壳的请求:

{
  "terminal.integrated.ignoreBracketedPasteMode": true
}

Ctrl+A,Ctrl+R 输出 ^A,^R 在 zsh 上

如果 zsh 设置为 Vim 模式而非 Emacs 模式,这种情况可能因设置问题而发生$EDITOR$VISUAL/Vim在你的初始脚本里。

为了解决这个问题,你有两个选择:

  • 确保你不会被设置$EDITORvi(m).不过,如果你想让Git编辑器正常工作,这不是选项。
  • 添加Bindkey -e对你的初始脚本进行显式设置Emacs。

我该如何配置 Cmd+。像macOS内置终端那样映射到Ctrl+C?

macOS默认终端使用Cmd+.执行与Ctrl+C相同的作。要在 VS Code 中实现这种行为,请添加这个自定义键盘快捷键

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

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

我们默认启用的一个无障碍功能是确保前景文本的对比度至少达到4.5。此功能确保无论使用何种外壳和主题,文本都能清晰可读,否则是无法实现的。要禁用此功能,您可以设置:

"terminal.integrated.minimumContrastRatio": 1

更多信息请参见最小对比度部分。