终端基础
Visual Studio Code 包含一个功能齐全的集成终端,该终端从工作区的根目录启动。它提供了与编辑器的集成,支持诸如链接和错误检测等功能。集成终端可以运行 mkdir 和 git 等命令,就像独立终端一样。
您可以通过以下方式打开终端
- 从菜单中,使用 终端 > 新建终端 或 视图 > 终端 菜单命令。
- 从 命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)),使用 视图: 切换终端 命令。
- 在资源管理器中,可以使用 在集成终端中打开 上下文菜单命令从文件夹打开新终端。
- 要切换终端面板,请使用 ⌃` (Windows、Linux Ctrl+`) 键盘快捷方式。
- 要创建新终端,请使用 ⌃⇧` (Windows、Linux Ctrl+Shift+`) 键盘快捷方式。
VS Code 的终端具有一个称为 shell 集成的附加功能,它可以通过在命令左侧和滚动条中的装饰来跟踪命令的运行位置。
注意: 如果您更喜欢在 VS Code 外部工作,请使用 ⇧⌘C (Windows、Linux Ctrl+Shift+C) 键盘快捷方式打开外部终端
终端 Shell
集成终端可以使用您机器上安装的各种 Shell,默认 Shell 从系统默认设置中提取。Shell 会被检测到并显示在终端配置文件下拉菜单中。
您可以在终端配置文件文章中了解有关配置终端 Shell 的更多信息。
管理终端
终端选项卡 UI 位于终端视图的右侧。每个终端都有一个条目,其中包含其名称、图标、颜色和组装饰(如果有)。
通过选择 终端 面板右上角的 + 图标、从终端下拉菜单中选择配置文件或触发 ⌃⇧` (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),在组内的终端之间导航。
在列表中拖放选项卡可以重新排列它们。将选项卡拖到主终端区域可以将在一个组中的终端移动到另一个组。
可以通过命令面板或右键上下文菜单中的 终端: 取消拆分终端 命令将终端移动到自己的组中。
编辑器区域中的终端
您可以使用 终端: 在编辑器区域创建新终端 命令、终端: 在编辑器区域创建新的旁边终端 命令,或者将终端从终端视图拖动到编辑器区域来在编辑器区域中打开终端(终端编辑器)。终端编辑器会像常规编辑器选项卡一样显示。
您可以将终端编辑器放置在两侧,或使用编辑器组布局系统进行多维排列,例如将 PowerShell 和 WSL 终端堆叠在文件编辑器的右侧。
terminal.integrated.defaultLocation 设置可以更改默认的 view
或 editor
区域终端位置。
导航缓冲区
终端中的内容称为缓冲区,底部视口正上方的一段称为“回滚”。保留的回滚量由 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 键并单击。
这些内置链接处理器按以下优先级顺序使用
-
URIs/URLs:看起来像 URI 的链接,例如
https://vscode.js.cn
、vscode://path/to/file
或file://path/to/file
将使用协议的标准处理器打开。例如,https
链接将打开浏览器。 -
文件链接:链接到已验证存在于系统上的文件。这些链接将在新的编辑器选项卡中打开文件,并支持许多常见的行/列格式,例如
file:1:2
、file:line 1, column 2
。 -
文件夹链接:链接到文件夹与文件链接类似,但会在该文件夹处打开一个新的 VS Code 窗口。
-
单词链接:使用 terminal.integrated.wordSeparators 设置的回退链接类型。该设置定义了单词边界,并使几乎所有文本都成为单词。激活单词链接将在工作区中搜索该单词。如果只有一个结果,它将打开;否则,它将显示搜索结果。单词链接被视为“低置信度”,除非您按住 Ctrl/Cmd 键,否则不会显示下划线或工具提示。它们对行和列后缀的支持也有限。
打开检测到的链接 命令 (⇧⌘G (Windows、Linux Ctrl+Shift+G)) 可用于通过键盘访问链接
提示: 如果链接验证导致性能问题,例如在高延迟远程环境中,可以通过 terminal.integrated.enableFileLinks 设置禁用它。
处理链接的扩展
扩展可以贡献 链接提供程序,允许扩展定义单击时发生的情况。一个示例是 GitLens 扩展检测 Git 分支链接。
键盘可访问性
链接可通过基于链接类型打开链接的多个命令进行键盘访问。
- 终端: 打开最后一个本地文件链接 - 打开最新的本地文件链接。没有默认键盘快捷方式。
- 终端: 打开最后一个 URL 链接 - 打开最新的 URI/URL 链接。没有默认键盘快捷方式。
- 终端: 打开检测到的链接... - 打开一个可搜索的 Quick Pick,其中包含所有检测到的链接,包括单词链接。默认键盘快捷方式是 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 并左键单击将把光标重新定位到鼠标下方。这是通过模拟方向键击来实现的,可能并非对所有 Shell 或程序都可靠。可以使用 terminal.integrated.altClickMovesCursor 设置禁用此功能。
鼠标事件模式
当在终端中运行的应用程序开启鼠标事件模式时(例如 Vim 鼠标模式),鼠标交互会发送到应用程序而不是终端。这意味着单击和拖动将不再创建选区。在 Windows 和 Linux 上,可以通过按住 Alt 键强制进行终端选择;在 macOS 上也可以使用 Option 键进行此操作,但这需要先启用 terminal.integrated.macOptionClickForcesSelection 设置。
查找
集成终端具有查找功能,可以使用 ⌘F (Windows、Linux Ctrl+F) 触发。
提示: 可以通过从跳过 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"
}
还有提供更多选项的扩展,例如 Terminal Here。
固定尺寸终端
终端: 设置固定尺寸 命令允许更改终端及其后备伪终端使用的列数和行数。这会在必要时添加滚动条,这可能会导致不愉快的用户体验,通常不建议使用,但在 Windows 上尤其常见,以便在没有分页工具时读取日志或长行。
您还可以右键单击终端选项卡并选择 切换尺寸以适应内容宽度 (⌥Z (Windows、Linux Alt+Z)),以将终端列数调整为终端中最长的换行行。
下一步
本文档介绍了终端的基础知识。请继续阅读以了解更多信息
- 终端内嵌聊天 - 直接在终端中提供 AI 驱动的建议。
- 任务 - 任务允许您与外部工具集成并大量利用终端。
- 精通 VS Code 终端 - 一个外部博客,提供了许多终端高级用户技巧。
- 通过浏览 VS Code 中的键盘快捷方式(首选项: 打开键盘快捷方式,然后搜索“终端”)来探索终端命令。
常见问题
启动终端时遇到问题
有一个专门的故障排除指南来解决这类问题。
如何创建管理员终端?
集成终端 Shell 以 VS Code 的权限运行。如果您需要以提升(管理员)或不同权限运行 Shell 命令,请在终端中使用平台实用程序,例如 runas.exe
。
您可以在配置配置文件中了解有关通过终端配置文件自定义终端的更多信息。
我可以为资源管理器的“在集成终端中打开”命令添加键盘快捷方式吗?
您可以通过 在集成终端中打开 上下文菜单命令,从资源管理器为特定文件夹打开新终端。
默认情况下,没有与 在集成终端中打开 相关联的键盘快捷方式,但您可以通过键盘快捷方式编辑器 (⌘K ⌘S (Windows、Linux Ctrl+K Ctrl+S)) 添加自己的快捷方式,以将键盘快捷方式添加到您的 keybindings.json
中。
以下 keybindings.json
示例为 openInTerminal
添加了键盘快捷方式 Ctrl+T。
{
"key": "ctrl+t",
"command": "openInTerminal",
"when": "filesExplorerFocus"
}
为什么在启动集成终端时,nvm 会抱怨 prefix 选项?
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 请求开启“带括号的粘贴模式”,但某些东西未能正确支持它。要解决此问题,您可以运行 printf "\e[?2004l"
在该会话中禁用它,或将以下内容添加到您的 ~/.inputrc
文件中
set enable-bracketed-paste off
另外,可以通过此设置强制忽略 Shell 的请求来关闭带括号的粘贴模式
{
"terminal.integrated.ignoreBracketedPasteMode": true
}
在 zsh 中,Ctrl+A, Ctrl+R 输出 ^A, ^R
如果您的初始化脚本中将 $EDITOR
或 $VISUAL
设置为 vi
/vim
,导致 zsh 处于 Vim 模式而非 Emacs 模式,则可能发生此问题。
要解决此问题,您有两个选项
- 确保不要将
$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
有关更多信息,请参阅最小对比度部分。