☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython
一、引言
在 Visual Studio Code 中,tasks.json 文件用于配置和控制任务的执行,其中的 presentation配置项可以用来控制任务执行时在终端面板窗口中输出的内容,presentation的类型为PresentationOptions。
二、PresentationOptions vscode官方定义
vscode的官方文档对PresentationOptions的定义如下:
interface PresentationOptions {
/**
* Controls whether the task output is reveal in the user interface.
* Defaults to `always`.
*/
reveal?: 'never' | 'silent' | 'always';
/**
* Controls whether the command associated with the task is echoed
* in the user interface. Defaults to `true`.
*/
echo?: boolean;
/**
* Controls whether the panel showing the task output is taking focus.
* Defaults to `false`.
*/
focus?: boolean;
/**
* Controls if the task panel is used for this task only (dedicated),
* shared between tasks (shared) or if a new panel is created on
* every task execution (new). Defaults to `shared`.
*/
panel?: 'shared' | 'dedicated' | 'new';
/**
* Controls whether to show the `Terminal will be reused by tasks,
* press any key to close it` message.
*/
showReuseMessage?: boolean;
/**
* Controls whether the terminal is cleared before this task is run.
* Defaults to `false`.
*/
clear?: boolean;
/**
* Controls whether the task is executed in a specific terminal
* group using split panes. Tasks in the same group (specified by a string value)
* will use split terminals to present instead of a new terminal panel.
*/
group?: string;
}
三、PresentationOptions的配置项详解
3.1、reveal
reveal控制是否在用户界面中显示任务输出,reveal 是一个特定的配置项,它决定了当有新的任务问题时,Visual Studio Code 是否应该自动展开问题面板。
下面是一个任务的的输出终端面板窗口(蓝色圈出部分),终端面板窗口有4个页签,其中红色小圈部分是问题面板、黄色部分是终端面板,页签为白色前带下划线的表示当前选择页签(下图中选择页签为终端)。
reveal 的三个可能的取值是 never、silent、和 always:
-
never:在此任务执行时不要显示终端
老猿测试在这种场景下,如果才开始没有打开终端面板窗口,则无论任务执行是否报错,都不会自动打开终端面板窗口,任务执行时的输出信息无法查看,如果要查看,只有手动到终端菜单项新建一个终端窗口,此时看到的与任务执行前打开的终端面板窗口是相同情况;
如果才开始已经打开终端面板,则无论任务执行是否报错,终端面板窗口的终端页签没有任何输出信息,但问题页签会显示问题情况,上面截图就是这种情况,可见此时问题面板有3个问题,但终端部分除了显示命令行外没有任何输出信息。 -
silent:这个值表示执行任务时产生了错误或者问题匹配器发现了问题时才会显示终端
老猿测试在这种场景下,如果才开始没有打开终端面板窗口,无论执行任务有没有错误,都不会自动打开终端面板窗口,任务执行时的输出信息无法查看。这种效果与never取值效果相同;
如果才开始已经打开终端面板,且执行任务没有错误,终端面板窗口的所有页签都没有任何输出信息;
如果才开始已经打开终端面板,且执行任务存在错误,终端面板窗口的问题面板会有错误展示,但终端面板没有任何输出信息; -
always:只要任务有新的输出或者问题,无论是否在任务执行前是否打开终端面板窗口,都会展示终端面板窗口,且在终端面板中展示任务输出的信息,在问题面板窗口展示存在的问题,always是reveal的缺省值。
3.2、echo
echo为布尔型,缺省值为true,用于控制是否将执行的命令显示到面板中。
老猿在测试过程中发现不是简单的true就显示执行任务的命令,false就不显示,根据测试具体情况分为以下几种:
-
对于C++编译任务来说,该参数的设置没有影响,都会显示编译指令,下图蓝色框标记的就是编译指令,无论echo为true还是false都会显示:
-
对于老猿在CSDN博文《vscode中tasks.json文件使用的预定义变量及国产统信操作系统UOS下配置一个任务显示相关预定义变量的案例》配置的echovariable任务,当打开项目时echo设置为true时显示如下:
可以看到在终端页签的蓝色框标记的范围部分输出了执行的指令,下面则输出了任务的执行结果。 -
针对上一测试的案例,当将echo改为false后,蓝色框输出部分就没有再显示,只有下部分的任务执行结果,从这2步的测试情况来看,确实符合echo取值的介绍
-
在上一测试后,当将echo改回true后,发现蓝色框输出部分还是没有再显示,哪怕是新建终端也是如此,只有在vscode中关闭文件夹再打开后执行才会显示执行的命令。
不过echo的设置大部分应该不介意一直设置为true,因此无需过多关注。
3.3、focus
当 focus 属性设置为 true 时,任务问题在显示在问题面板时会获取焦点。这意味着问题面板中的任务问题会自动滚动到可见区域,并且会吸引用户的注意力。这对于一些重要的任务问题(例如编译错误、测试失败等)可能很有用,因为这些问题是需要用户立即关注和处理的。
当 focus 属性设置为 false 时,即使任务问题需要显示在问题面板中,也不会获取焦点。这意味着问题面板中的任务问题不会自动滚动到可见区域,用户需要手动滚动或点击才能查看。这对于一些不需要获取焦点的任务问题可能很有用,例如一些常规的构建任务或代码格式化任务。
但老猿测试时,可能是情况简单,发现这个配置项调整没有影响问题面板的展现。
3.4、panel
panel有三个取值,分别是’shared’ 、 ‘dedicated’ 、‘new’,控制任务面板是仅用于此任务(dedicated,专用)、在任务之间共享(shared,共享),还是在每次任务执行时创建新面板(new),默认为“shared”。
根据老猿测试情况,三个值只影响终端面板窗口的“终端”页签,对““问题”页签,无论是哪个值,问题面板中的问题每次运行不同的任务都会清除上次任务的问题,只显示最后执行任务的问题。
在其他配置项不影响终端页签的输出情况下(如clear配置项设置为false),对“终端”页签”的影响补充说明如下:
- shared:所有任务共用终端页签,输出的信息一直是叠加输出;
- dedicated:在问题面板窗口的终端页签中,当前任务执行多次的信息输出会在终端页签中追加显示,但其他任务的执行信息不会显示在该页签,会由新的终端窗口中显示;
- new:每次执行任务都会在新的终端页签中输出执行信息,看起来与clear为true的效果相同,但实际上是新建了一个终端,下图是老猿测试时用了两个任务builHello1和buildHello2进行测试,二者交错执行了5次,此时的终端页签对应的终端就产生了5个(下图右上角蓝色矩形标记的就是产生的终端窗口),但问题面板只显示最后一个任务的
3.5、showReuseMessage
控制任务执行后是否在终端页签显示:“终端将被任务重用,按任意键关闭 ”(中文支持版本)或“Terminal will be reused by tasks, press any key to close it”(英文版本)。
实际上,上述控制在panel选项设置为new时不生效,都不显示该消息。
3.6、clear
控制是否在执行任务前清理终端的输出,当为ture时,panel设置为’shared’ 、 ‘dedicated’ ,会清理终端页签的输出信息,panel为‘new’时没有意义。
3.7、group
字符串类型,用于控制是否使用拆分窗格在特定的终端组中执行任务。同一组中的任务(由字符串值指定)将使用拆分的终端来显示,而不是使用新的终端面板。
经老猿验证测试,如果配置两个任务的PresentationOptions,其group的值相同,则当panel配置的任务新开窗口时,如果已经有group相同的终端窗口,则不会新建终端窗口,而是将已有的相同group的终端窗口水平拆分一个子窗口来运行新的任务。
下面是老猿配置的两个构建任务:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "buildHello1",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"-Wall",
"-Wextra",
"-O0",
"${workspaceFolder}/hello.cpp",
"-o",
"${fileDirname}/$hello1"
],
"options":
{
"cwd": "${fileDirname}"
},
"problemMatcher": "$gcc",
"group": {
"kind": "build",
"isDefault": false
},
"presentation": {
"echo": false,
"focus": false,
"panel": "new",
"showReuseMessage": false,
"group": "shareGroup"
},
"detail": "编译器: /usr/bin/g++"
}
,
{
"type": "cppbuild",
"label": "buildHello2",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"-Wall",
"-Wextra",
"-O0",
"${workspaceFolder}/hello2.cpp",
"-o",
"${fileDirname}/$hello2"
],
"options":
{
"cwd": "${fileDirname}"
},
"problemMatcher": "$gcc",
"group": {
"kind": "build",
"isDefault": false
},
"presentation": {
"echo": false,
"focus": false,
"panel": "new",
"showReuseMessage": false,
"clear": false,
"group": "shareGroup"
},
"detail": "编译器: /usr/bin/g++"
}
]
}
其PresentationOptions的group都配置为一个名字为“shareGroup”,这2个任务的panel值都配置为“new”,则运行多少次就会拆分多少个子窗口。下图是任务1运行2次后、任务2运行3次、最后任务1再运行一次后,终端选项的窗口情况:
可以看到生成了并列的6个拆分窗口,对应窗口的任务名分别对应上图右上角蓝色框标记部分。
四、小结
本文介绍了Visual Studio Code tasks.json中控制任务执行问题面板显示内容的PresentationOptions中的各元素的含义和使用方法,并举例说明了配置2个任务的presentation对输出的影响。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
更多关于vscode介绍的内容请参考专栏《国产信创之光》的相关vscode的其他文章。
关于老猿的付费专栏
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。