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