Visual Studio Code 终端高级功能使用说明
Visual Studio Code 终端视图
Visual Studio Code 终端视图是一种辅助性视图,该视图默认位于 Visual Studio Code 的上方区域,其内容来自于命令行应用的缓冲区。终端视图提供了更加便利的文本操作,可以轻松的选中并复制命令或命令的输出结果。
如何在执行命令时显示 Visual Studio Code 终端视图并使其获得焦点?
如果 Visual Studio Code 设置项terminal.integrated.accessibleViewFocusOnCommandExecution
为true
(默认值为false
),那么在命令行应用中执行命令,将显示 Visual Studio Code 终端视图并使其获得焦点。
{
// 执行命令时显示终端视图并使其获得焦点
"terminal.integrated.accessibleViewFocusOnCommandExecution": true,
}
如何保留光标在 Visual Studio Code 终端视图中的位置?
如果 Visual Studio Code 设置项terminal.integrated.accessibleViewPreserveCursorPosition
为true
(默认值为false
),那么在终端视图重新显示后,将恢复光标之前的位置,而不是显示在终端视图的底部。
{
// 保留光标在终端视图中的位置
"terminal.integrated.accessibleViewPreserveCursorPosition": true,
}
自动响应 Visual Studio Code 终端发送的消息
在命令执行的过程中,命令行应用可能会与用户产生交互,输出一些消息并要求用户输入某些内容,比如,输入Y
来确认对文件的删除。
通过 Visual Studio Code 的设置项terminal.integrated.autoReplies
,可以自动响应命令行应用输出的消息,该设置项是一个对象,对象的属性名称用于匹配命令行输出的消息(输出消息需要包含属性名称,不需要完全匹配),对象的属性的值是自动响应的内容,他可以是null
(表示无任何响应)或一个支持进行转义的字符串,可使用\r
来表示Enter键。
如果修改设置项terminal.integrated.autoReplies
之后未达到预期效果,可以尝试重启 Visual Studio Code。
在下面的示例中,我们通过设置项terminal.integrated.autoReplies
来自动响应命令npm init
的一些输出消息,这包括填写包名称,版本,以及输入no
以阻止文件package.json
的生成。
{
// 自动响应
"terminal.integrated.autoReplies": {
"package name:": "auto\r",
"version:": "0.0.0\r",
"(yes)": "no\r",
},
}
npm init
package name: (…) auto
version: (1.0.0) 0.0.0
…
Is this OK? (yes) no
Aborted.
在每一秒内 Visual Studio Code 终端只能自动响应一次
对于 Visual Studio Code 设置项terminal.integrated.autoReplies
的同一个属性,只能在一秒内进行一次自动响应,即便该属性的名称与命令行中的不同输出消息匹配。
在批处理文件auto.bat
中,我们要求输入姓名和年龄,如果用户快速多次按下Enter键,那么 Visual Studio Code 终端可能无法自动响应所有来自于命令提示符的消息。
@echo off
for /l %%i in (1, 1, 10) do (
set /p name=Enter Name:
set /p age=Enter Age:
)
{
// 自动响应
"terminal.integrated.autoReplies": {
// …
"Enter Name": "someone\r",
"Enter Age": "10\r",
},
}
Visual Studio Code 终端可能无法自动响应具有样式的输出消息
设置项terminal.integrated.autoReplies
可能无法让 Visual Studio Code 自动响应具有样式的输出消息。
将绑定的按键发送至 Visual Studio Code 而非终端
在默认情况下,一些命令所绑定的按键将被发送至 Visual Studio Code,而不是 Visual Studio Code 终端所启动的命令行应用,比如,与命令workbench.action.quickOpen
绑定的按键Ctrl+P,按下Ctrl+P将由 Visual Studio Code 显示一组文件以便快速打开他们。通过设置项terminal.integrated.commandsToSkipShell
,你可以添加某个命令,使其具有上述效果,或使用-
前缀添加某个命令,使其失去上述效果。
在下面的示例中,我们使用-
将命令workbench.action.quickOpen
和workbench.action.terminal.focusFind
所绑定的按键发送至命令行应用。
{
// 与命令相关的按键将被发送至 VSCode 而非命令行,除非使用 -
"terminal.integrated.commandsToSkipShell": [
// 以下命令的相关按键将被发送至命令行
"-workbench.action.quickOpen",
"-workbench.action.terminal.focusFind",
],
}
通过将 Visual Studio Code 设置项terminal.integrated.sendKeybindingsToShell
设置为true
(默认值为false
),多数命令所绑定的按键将被发送至命令行应用而不是 Visual Studio Code,这意味着设置项terminal.integrated.commandsToSkipShell
将被覆盖。
{
// 将多数命令的相关按键发送至 VSCode
"terminal.integrated.sendKeybindingsToShell": true,
}
如何将命令所绑定的组合按键发送至 Visual Studio Code 终端?
Visual Studio Code 设置项terminal.integrated.allowChords
可用于设置将命令绑定的组合按键(需要依次按下多个键的组合)发送至 Visual Studio Code 还是 Visual Studio Code 终端所启动的命令行应用,如果该设置项被设置为false
(默认为true
),那么组合按键(比如,Ctrl+K)将被发送至命令行,而不是由 Visual Studio Code 等待用户按下下一个按键。
{
// 组合按键将被发送至命令行
"terminal.integrated.allowChords": false,
}
如何在 Visual Studio Code 终端中使用菜单栏的助记键?
默认情况下,在 Visual Studio Code 终端所启动的命令行应用中,无法通过菜单栏的助记键(比如,Alt+F)打开菜单栏,你可以将 Visual Studio Code 设置项terminal.integrated.allowMnemonics
设置为true
(默认为false
),让菜单栏的助记键在命令行应用中生效,这可能导致所有Alt键被发送至 Visual Studio Code。
需要指出的是,Visual Studio Code 设置项terminal.integrated.allowMnemonics
不适用于 macOS。
{
// 允许使用助记键打开菜单栏
"terminal.integrated.allowMnemonics": true,
}
在 Visual Studio Code 终端中显示图像
如果 Visual Studio Code 设置项terminal.integrated.gpuAcceleration
不为off
,WebGL 加速可用,设置项terminal.integrated.enableImages
被设置为true
(默认值为false
),那么 Visual Studio Code 终端所启动的命令行应用将支持显示图像。
需要指出,由于 Visual Studio Code 命令行中的图像无法被序列化,因此,重新打开的命令行应用无法显示之前的图像。
Visual Studio Code 终端不支持 gif 动画
在正确设置之后,Visual Studio Code 终端所启动的命令行应用可以显示png
,jpg
等类型的图像文件,但对于gif
类型的图像文件,无法展示其动画效果。
复制 Visual Studio Code 终端输出内容所得到的 HTML 代码不会包含图像
如果你将 Visual Studio Code 命令行应用的输出复制为 HTML 代码,那么这些代码不会包含图像的相关信息。
外观和样式
关于 Visual Studio Code 终端的 GPU 加速功能,你可以查看设置 Visual Studio Code 终端的 GPU 加速功能一段。
在修改设置项terminal.integrated.enableImages
之后,可以尝试安装并使用 Python 包imgcat
在命令行中显示图片。
{
// 在命令行中显示图像
"terminal.integrated.enableImages": true,
}
在 Visual Studio Code 终端中使用粘滞滚动覆盖层
在默认情况下,Visual Studio Code 终端所启动的命令行应用没有粘滞滚动覆盖区,可以将设置项terminal.integrated.stickyScroll.enabled
设置为true
(默认值为false
)来启用粘滞滚动覆盖区,该覆盖区通常会显示被执行的命令。
设置 Visual Studio Code 终端粘滞滚动覆盖区的最大行数
通过 Visual Studio Code 设置项terminal.integrated.stickyScroll.maxLineCount
,可以设置命令行应用的粘滞滚动覆盖区的最大行数,该行数不能超过10
。
{
// 启用命令行的粘滞滚动覆盖区
"terminal.integrated.stickyScroll.enabled": true,
// 粘滞滚动覆盖区的最大行数为 10
"terminal.integrated.stickyScroll.maxLineCount": 10,
}
在远程工作区的 Visual Studio Code 终端中使用本地回显
如果 Visual Studio Code 打开了远程工作区,那么用户在本地的输入(比如某一个字符)会被传递至远程服务器的命令行应用,其处理结果将返回并显示在 Visual Studio Code 终端中。当本地与远程服务器存在较大网络延迟时,这会带来不好的用户体验,而通过设置项terminal.integrated.localEchoEnabled
启用本地回显功能,可使用户的输入快速显示在 Visual Studio Code 终端中,无需等待远程服务器的处理,该设置项拥有以下取值。
- auto
auto
表示为 Visual Studio Code 远程工作区终端启用本地回显。- on
on
表示始终启用 Visual Studio Code 终端本地回显,无论是否为远程工作区。- off
off
表示始终禁用 Visual Studio Code 终端本地回显,无论是否为远程工作区。
{
// 始终开启本地回显
"terminal.integrated.localEchoEnabled": "on",
}
设置 Visual Studio Code 远程工作区终端的本地回显延迟阈值
通过 Visual Studio Code 设置项terminal.integrated.localEchoLatencyThreshold
,可以设置远程工作区终端的本地回显延迟阈值(以毫秒为单位),如果等待时间超过该阈值,那么用户在本地的输入将直接显示在 Visual Studio Code 终端中。如果该设置项被设置为0
,则始终进行本地回显,如果设置为-1
(不应该小于-1
),则不会进行本地回显。
{
// 立即进行本地回显
"terminal.integrated.localEchoLatencyThreshold": 0,
}
设置 Visual Studio Code 远程工作区终端的本地回显文本的样式
通过 Visual Studio Code 设置项terminal.integrated.localEchoStyle
,可以设置远程工作区命令行中本地回显文本的样式,样式可以是颜色(比如,#FF0000
),bold
(粗体),dim
(默认值,暗淡),italic
(斜体),underlined
(下划线),inverted
(反转背景颜色和前景颜色)。
{
// 本地回显文本的颜色为红色
"terminal.integrated.localEchoStyle": "#ff0000",
}
设置禁用本地回显的 Visual Studio Code 终端
如果你希望对特定的命令行应用禁用本地回显,那么可以使用 Visual Studio Code 的设置项terminal.integrated.localEchoExcludePrograms
,该设置项是一个包含字符串的数组,当命令行的相关信息包含数组中的某个字符串时,命令行的本地回显功能将被禁用。
{
// 命令行的相关信息包含以下某个关键字,则本地回显将被禁用
"terminal.integrated.localEchoExcludePrograms": [
"powershell",
"cmd",
],
}
设置是否需要在关闭 Visual Studio Code 窗口时确认
如果你希望设置是否需要在关闭(退出) Visual Studio Code 且拥有尚未终止的命令行应用时确认关闭,那么可以使用设置项terminal.integrated.confirmOnExit
,该设置项拥有以下有效取值。
- always
always
表示始终需要在关闭 Visual Studio Code 时确认,如果拥有尚未终止的命令行应用。- hasChildProcesses
hasChildProcesses
表示需要在关闭 Visual Studio Code 时确认,如果任意命令行应用拥有子进程,比如,启动了 Python 交互模式的 PowerShell。- never
never
(默认值)表示直接关闭 Visual Studio Code,即便拥有尚未终止的命令行应用。
关闭 Visual Studio Code 终端面板不等于终止终端
关闭 Visual Studio Code 终端面板不等于终止其所包含的命令行应用,因此,如果设置项terminal.integrated.confirmOnExit
不为默认值never
,那么在关闭 Visual Studio Code 时依然可能需要确认,即便终端面板未显示。
{
// 如果任意命令行拥有子进程,则需要在关闭 VSCode 时确认
"terminal.integrated.confirmOnExit": "hasChildProcesses",
}
设置是否需要在终止 Visual Studio Code 终端时确认
如果你希望设置是否需要在终止拥有子进程的 Visual Studio Code 命令行应用时确认终止,那么可以使用设置项terminal.integrated.confirmOnKill
,该设置项拥有以下有效取值。
- always
always
表示始终需要在终止拥有子进程的 Visual Studio Code 命令行应用时确认,无论该命令行位于终端面板还是编辑器区域。- editor
editor
(默认值)表示需要在终止拥有子进程的 Visual Studio Code 命令行应用时确认,如果该命令行位于编辑器区域。- panel
panel
表示需要在终止拥有子进程的 Visual Studio Code 命令行应用时确认,如果该命令行位于终端面板。- never
never
表示直接关闭 Visual Studio Code 命令行应用,即便该命令行拥有子进程。
{
// 如果命令行拥有子进程,则需要在终止时确认
"terminal.integrated.confirmOnKill": "always",
}
设置是否为 Visual Studio Code 终端的非零退出代码显示警报
如果 Visual Studio Code 终端所启动的命令行应用在终止时返回的退出代码不为0
,那么 Visual Studio Code 将显示警报“终端进程 … 已终止,退出代码:…”,将设置项terminal.integrated.showExitAlert
设置为false
,可禁用该功能。
在下面的示例中,我们通过设置项terminal.integrated.showExitAlert
禁用了警告,因此,在 Windows 命令提示符输入exit 100
不会出现警报,如果你在 Visual Studio Code 中打开了命令提示符。
{
// 不显示警报,即便命令行的退出代码不为 0
"terminal.integrated.showExitAlert": false,
}
# 命令提示符
exit 100
设置是否为 Visual Studio Code 终端启用命令修饰
在 Visual Studio Code 终端所启动的命令行应用中,命令修饰可以为已执行的命令提供上下文菜单,通过 Visual Studio Code 设置项terminal.integrated.shellIntegration.decorationsEnabled
可以设置是否为命令行应用启用命令修饰,他拥有以下有效取值。
- both
both
(默认值)表示在 Visual Studio Code 命令行应用的装订线中显示命令修饰,并将在概述标尺中标记命令修饰的位置。- gutter
gutter
表示在 Visual Studio Code 命令行应用的装订线中显示命令修饰。- overviewRuler
overviewRuler
表示仅在 Visual Studio Code 命令行应用的概述标尺中标记命令修饰的位置,但不会在装订线中显示命令修饰。- never
never
表示不显示命令修饰,也不标记其位置。
{
// 将命令修饰显示在装订线中
"terminal.integrated.shellIntegration.decorationsEnabled": "gutter",
}
设置是否显示 Visual Studio Code 终端的命令指南
在 Visual Studio Code 终端所启动的命令行应用中,命令指南默认显示在已执行命令和输出结果的左边装订线中,当鼠标悬停时。如果将 Visual Studio Code 设置项terminal.integrated.shellIntegration.showCommandGuide
设置为false
(默认为true
),那么命令行中的命令指南将不再显示。
{
// 不再显示命令指南
"terminal.integrated.shellIntegration.showCommandGuide": false,
}
设置是否为 Visual Studio Code 终端注入脚本
一些特定的功能,比如粘滞滚动覆盖区,需要 Visual Studio Code 在命令行应用启动时向其注入脚本,如果 Visual Studio Code 的设置项terminal.integrated.shellIntegration.enabled
为false
(默认为true
),那么相关脚本不会被注入,这表示某些功能将消失。
Visual Studio Code 无法向所有的命令行应用注入脚本
并非所有的命令行应用均支持脚本注入,因此即便 Visual Studio Code 的设置项terminal.integrated.shellIntegration.enabled
不为false
,一些功能也无法在不支持脚本注入的命令行中实现。
{
// 允许脚本注入
"terminal.integrated.shellIntegration.enabled": true,
}