Visual Studio Code tasks.json中控制任务执行问题面板显示内容的PresentationOptions介绍

news2024/11/28 7:39:00
☞ ░ 前往老猿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就不显示,根据测试具体情况分为以下几种:

  1. 对于C++编译任务来说,该参数的设置没有影响,都会显示编译指令,下图蓝色框标记的就是编译指令,无论echo为true还是false都会显示:
    在这里插入图片描述

  2. 对于老猿在CSDN博文《vscode中tasks.json文件使用的预定义变量及国产统信操作系统UOS下配置一个任务显示相关预定义变量的案例》配置的echovariable任务,当打开项目时echo设置为true时显示如下:
    在这里插入图片描述
    可以看到在终端页签的蓝色框标记的范围部分输出了执行的指令,下面则输出了任务的执行结果。

  3. 针对上一测试的案例,当将echo改为false后,蓝色框输出部分就没有再显示,只有下部分的任务执行结果,从这2步的测试情况来看,确实符合echo取值的介绍

  4. 在上一测试后,当将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的其他文章。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《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初学者疑难问题集专栏目录 》
  4. 付费专栏《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。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单机无锁线程安全队列-Disruptor

Disruptor 1、基本介绍 说到队列,除了常见的mq中间件,java中也自带线程安全的BlockingQueue,但是BlockingQueue通过在入队和出队时加锁的方式避免并发操作,性能上会大打折扣。 而Disruptor是一个线程安全、低延迟、吞吐量高的队…

代替APP?微信小程序到底好在哪?

2019年是微信小程序宣布登场的一年,它实现了应用程序能被“垂手可得”的愿望。用户只需简单扫一扫或搜索,就能轻松打开应用。与需要在应用市场下载的APP相比,微信小程序可以在微信中被轻易地获取和传播,同时也带来了非凡的使用体验…

102.套接字-Socket网络编程4(TCP通信流程)

目录 TCP编程流程 套接字函数 1.创建套接字 2.绑定地址 3.监听连接请求 4.接受连接 5. 连接到服务器 6. 发送数据 7. 接收数据 8.关闭套接字 服务器端通信流程 示例代码 客户端通信流程 代码示例 TCP编程流程 TCP是一个面向连接的,安全的,流…

单调栈与单调队列算法总结

单调栈 知识概览 单调栈最常见的应用是找到每一个数离它最近的且比它小的数。单调栈考虑的方式和双指针类似,都是先想一下暴力做法是什么,然后再挖掘一些性质如单调性,最终可以把目光集中在比较少的状态中,从而达到降低时间复杂…

【Linux】基础IO--重定向理解Linux下一切皆文件缓冲区

文章目录 一、重定向1.什么是重定向2.dup2 系统调用3.理解输入重定向、输出重定向和追加重定向4.简易shell完整实现 二、理解linux下一切皆文件三、缓冲区1.为什么要有缓冲区2.缓冲区的刷新策略3.缓冲区的位置4.实现一个简易的C语言缓冲区5.内核缓冲区 一、重定向 1.什么是重定…

VMware虚拟机系统CentOS镜像的下载

文章目录 阿里云下载官网下载参考文档 一些小版本可能过时或者其他原因已经不能存在了,只有大版本号最新的,或者其他最新版本 阿里云下载 1-百度搜索:阿里云 2-找到开发者社区 3-找到下载,选择镜像 4-选择系统 5-点击镜像地…

【eNSP实践】eNSP实战篇(2)之简单实现交换机与主机的配置(图文详解)

目录 写在前面涉及知识1、交换机实验1.1 实验条件1.2 实验步骤A、打开eNSP软件,创建拓扑B、搭建主机与交换机连线C、配置交换机和主机D、验证不同网段设备可通性 1.3 通过交换机查看MAC地址 写在最后 写在前面 其实前面文章我有介绍关于路由器的使用,但…

OCP Java17 SE Developers 复习题08

答案 答案 答案 A. This code is correct. Line 8 creates a lambda expression that checks whether the age is less than 5, making option A correct. Since there is only one parameter and it does not specify a type, the parentheses around the parameter are …

TrustZone​之在安全状态之间切换

如果处理器处于NS.EL1,而软件想要转移到S.EL1,应该如何实现呢? 要改变安全状态,无论是向上还是向下,执行都必须经过EL3,如下图所示: 前面的图表显示了在不同安全状态之间移动涉及的步骤的示例序列。逐步进行解释: 进入较高的异常级别需要一个异常。通常,此异常…

网络程序设计

互相连接,发送信息 tcp和udp协议 tcp会有准备,udp不会准备。 8080端口:tomcat端口,java和web相连接 80端口:http 21端口:ftp 套接字 socket:提供给程序可以对外进行连接的接口 ip地址 特…

利用github copilot完成代码,利用正则化完成字符串中信息查找

利用正则化完成字符串中的字符拆解。 下面的代码是实现在“计算机组成原理-计科2101-123456-小明同学.docx”中提取出班级(grade),学号(id),姓名(name)。以下的代码都是github copi…

java中Random随机数使用和生成随机数的多个示例

在 Java 中,我们可以使用 java.util.Random 类生成伪随机数。伪随机数的特性是,虽然它们看起来是随机的,但实际上它们是由一个固定的算法生成的。只要我们提供相同的种子,这个算法就会生成相同的数字序列。 首先,我们…

Java链接数据库

本文介绍的是Java链接数据库中的JDBC操作,JDBC虽然现在用的不多,但面试的时候会问道。需要有相应的了解。下面以链接MySQL为例子。 JDBC 什么jdbc Java DataBase Connectivity是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和…

pod容器内无法访问集群外部主机ipv6地址

一、背景 同事反馈他这边有一环境出现pod容器内无法请求集群外部主机ipv6地址,但是在pod所在集群所主机上是可以请求到外部主机ipv6地址。 二、问题处理过程 首先主机和主机之间ipv6地址能通讯,说明主机之间网络是没啥问题,哪问题就出在容器…

Python语言基础学习大纲(由某大模型生成)

自从上次经丙察察游了一次滇藏线,已有3个没写一篇了。今天利用由某大模型生成的上面这张思维导图,配合这个大模型生成的6000多字拼凑出一篇博文聊以交差。 Python语言概述 一、语言特点 1.语法简单明了 Python的语法简洁易懂,使得编写代码…

邮件群发工具的功能:实用性与高效率功能推荐

市场营销对于每个企业来讲都至关重要,他能为企业带来商机的增长,获得持续的收益。邮件营销作为一种传统但是较少为众多行业使用的营销手段,同样也存在着无限的潜力。 它可以实现: 精准点对点个性化营销。数据报表追踪营销效果。…

如果不小心修改了按钮的名字并且忘记了原名字

出现上述情况,可以右边点击转到代码,注释掉问题行,此页的设计界面就恢复了。

Taro 学习教程 - - - - - 开发环境的安装 helloworld

一、Taro脚手架安装 npm install tarojs/cli -g // or yarn add tarojs/cli -g // or cnpm install tarojs/cli -g1.1 如何判断taro安装成功 taro -v正常安装成功之后显示如图: 1.2 环境变量配置(自行判断是否需要手动配置) 如果遇到如下问题,则是需要…

顶级资源!五个免费图标素材网站

图片太花哨了,纯文本太单调了?别忘了设计师的魔法武器——图标!图标材料是UI设计师不可缺少的一部分。优秀的图标设计不仅可以提高界面美感,还可以提高用户的互动体验,帮助用户更好地了解应用程序的功能和信息。在本文…

2024年CSC国际区域问题研究及外语高层次人才培养项目介绍

国家留学基金委(CSC)公布了2024年国际区域问题研究及外语高层次人才培养项目,申报时间均为3月中下旬。为帮助关注者了解项目申报情况,知识人网小编特整理本文。 近日,国家留学基金委(CSC)公布了…