VSCode任务tasks.json中的问题匹配器problemMatcher的问题匹配模式ProblemPattern详解

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

一、简介

在 VS Code 中,tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题(错误、警告等)。

problemMatcher有三种配置方式,具体可参考《VSCode中的任务什么情况下需要配置多个问题匹配器problemMatcher?多个问题匹配器之间的关系是什么?》的介绍。

本文要介绍的是problemMatcher为一个ProblemMatcher的JSON对象时其下的子对象pattern,pattern用于匹配任务执行时输出的信息,如编译任务输出的告警和错误信息,对符合pattern指定匹配规则的信息则纳入problemMatcher处理。

二、测试的C++代码文件样例

为了测试vscode的问题匹配,下面是一个故意存在多处错误的hello.cpp文件的代码,注意就是一个完整的cpp文件,不存在单独的头文件和其他外部文件:

#include <stdio.h>
#include <stdlib.h>
#include "myhead.h"

int main()
{
    int loop;
    int i,j;

    printf("j=%s\n",j);
    for(loop=0;loop<5;loop++)
        printf("hello,world!%d\n",i);
    i++;
    hell("");    

}

大家看得出来几处问题代码吗?

三、问题匹配器中的模式pattern介绍

3.1、vscode中pattern的定义

pattern在vscode中 的定义如下:

pattern: string | ProblemPattern | ProblemPattern[]

关于这个定义,vscode官方文档中有如下说明:The name of a predefined problem pattern, the inline definition of a problem pattern or an array of problem patterns to match problems spread over multiple lines,结合上述定义和文字说明可知,pattern可以为字符串、ProblemPattern类型对象和ProblemPattern数组:

  1. pattern为字符串的情况,vscode官方说是预定义的匹配模式,老猿查阅了很多资料,也许是统信下的vscode版本1.81.0太低,也许是没找对方法,在vscode1.81.0中反复测试也没有测试通过;
  2. pattern 为 ProblemPattern类型的对象时,包含有多个子对象,在接下来的3.2节中详细介绍其相关信息;
  3. pattern 为 ProblemPattern类型的数组时,表明其所在的问题匹配器的匹配模式可以有多种,这些匹配模式按照配置中的先后顺序逐一与输出信息匹配,如果都匹配成功,则整个问题匹配成功,否则就是未匹配,即多个匹配模式是与的关系,这个与问题匹配器problemMatcher多个之间是或的关系是不同的。查阅了vscode的官方文档,这种模式数组是用于匹配多行。不过关于此模式老猿一直未能测试成功,3.3节再介绍测试情况。

3.2、ProblemPattern类型介绍

3.2.1、ProblemPattern类的定义

以下是vscode官方文档中关于ProblemPattern类的定义:

interface ProblemPattern {
  /** The regular expression to find a problem in the console output of an
   * executed task.*/
  regexp: string; 
  
  /*** Whether the pattern matches a problem for the whole file or for a location
   * inside a file.
   * Defaults to "location".  */
  kind?: 'file' | 'location';

  /*** The match group index of the filename.  */
  file: number;

  /*** The match group index of the problem's location. Valid location
   * patterns are: (line), (line,column) and (startLine,startColumn,endLine,endColumn).
   * If omitted the line and column proper从上面官方文档的介绍可以知道,ProblemPattern包含多个子元素,下面分每个子元素展开介绍。


从以上定义的英文注释能理解大部分定义要素的含义,但有些光理解注释的字面意思还不够,老猿结合测试情况对这些ties are used.   */
  location?: number;

  /**   * The match group index of the problem's line in the source file.

   * Can only be omitted if location is specified.   */
  line?: number;

  /**The match group index of the problem's column in the source file.   */
  column?: number;

  /**   * The match group index of the problem's end line in the source file.
   * Defaults to undefined. No end line is captured.   */
  endLine?: number;

  /**   * The match group index of the problem's end column in the source file.
   *
   * Defaults to undefined. No end column is captured.   */
  endColumn?: number;

  /**
   * The match group index of the problem's severity.
   * Defaults to undefined. In this case the problem matcher's severity
   * is used.  */
  severity?: number;

  /**
   * The match group index of the problem's code.
   * Defaults to undefined. No code is captured.
   */
  code?: number;

  /*** The match group index of the message. Defaults to 0. */
  message: number;

  /**
   * Specifies if the last pattern in a multi line problem matcher should
   * loop as long as it does match a line consequently. Only valid on the
   * last problem pattern in a multi line problem matcher.   */
  loop?: boolean;
}
3.2.2 ProblemPattern类型的介绍

从上面官方文档的介绍可以知道,ProblemPattern包含多个子元素,从以上定义的英文注释能理解大部分定义要素的含义,但有些光理解注释的字面意思还不够,老猿结合测试情况对这下面分每个子元素展开介绍。

3.2.2.1、 regexp
3.2.2.1.1、regexp概述

regexp对应为匹配输出问题信息的正则表达式,正则表达式使用的元字符与Python的re模块基本一致,如元字符包括:“.*?[]{}[]\+-^$”等,转义符为"\",同时支持转义符定义的特殊序列以及组匹配模式,支持通过组序号方式来访问匹配内容,需要注意转义符在字符串中需要使用双斜杠。关于Python正则表达式的有关介绍请参考老猿在CSDN的博文专栏《Python 支撑正则表达式处理的re模块》。

3.2.2.1.2、regexp正则表达式中常用的元字符及含义

regexp正则表达式中部分常用元字符及其含义:

  • ^:匹配字符串的开头
  • \s*:匹配零个或多个空格字符
  • (.*):匹配任意字符,零个或多个 字符
  • (\d+):匹配一个或多个数字字符
  • \s+:匹配一个或多个分隔字符 (如空格、回车、tab等)
  • (子正则表达式):用于将指定正则匹配的内容进行分组

案例:"^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*)$"
这个正则语句匹配如下类似的错误信息:hello.cpp:3:10: error: myhead.h: 没有那个文件或目录,其中文件名的匹配组号为1、行号匹配组号位2、列号的匹配组号为3,匹配的问题级别信息“error”的匹配组号为4,具体错误信息匹配组号为5

3.2.2.2、kind

指问题匹配时匹配到问题具体的行列位置还是只需要匹配到文件,有2个取值,一个是“file”,表示只需要匹配到文件,另一个是“location”,匹配到行列指定的具体位置,缺省值是“location”。

我们通过案例来看看问题面板输出的不同,以上面hello.cpp的爆粗信息:hello.cpp:3:10: fatal error: myhead.h: 没有那个文件或目录为例:

  1. 设置为“location”,问题面板中输出信息文件那栏输出了文件名、行号、列号,如图:
    在这里插入图片描述
    注意,零两个问题不是问题匹配器problem_1输出的,而是扩展组件C++智能感知输出的。
  2. 设置为“file”,问题面板中输出信息文件那栏输出了文件名、行号、列号,不过行号、列号固定为1,如图:
    在这里插入图片描述
3.2.2.3、file、line、column

在正则表达式匹配输出信息时识别出来的文件名的匹配组号,有关正则知识请参考老猿在CSDN上《Python基础教程》下的博文《第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式》的相关介绍。

按照:
案例正则表达式:"^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*)$"
对错误信息:hello.cpp:3:10: error: myhead.h: 没有那个文件或目录

进行匹配,file的匹配组号为1,即第一个括号内匹配到的内容为文件名,类似的line、column为匹配到错误位置行号、列号的匹配组号,在上面例子中分别对应组号2和3。

3.2.2.4、endLine、endColumn

endLine、endColumn与line、column类似,不过有些代码的编译构建程序会输出错误代码的起止行号和列号,line、column匹配开始行号和列号,而endLine、endColumn匹配终止行号和列号。C++的编译器没有输出相关信息,因此无需配置。

3.2.2.5、severity

问题输出信息中匹配到的问题级别的匹配组号,在上面的例子中就是(error)这个匹配信息对应的匹配组号。problemMatcher和ProblemPattern都存在“severity”的属性,ProblemPattern又是problemMatcher的子属性,二者的“severity”属性关系请见《VSCode任务tasks.json中的问题匹配器problemMatcher和ProblemPattern的severity属性关系》的分析,相关情况请参考本文后面的测试情况说明。

3.2.2.6、code

用于设置正则表达式匹配问题报错信息中给出的错误源代码的匹配组号,在C++中的报错信息中存在有源代码信息,但是在报错信息后面单独一行输出,由于涉及多行匹配,老猿一直无法验证成功

没测试成功的原因可能有3个:

  1. vscode的版本过低,因为老猿使用的是国产操作系统,安装的vscode的版本是1.81.0,而windows下已经至少是1.20.0的版本了;
  2. 多行问题匹配器不适合C++的编译错误信息,可能在别的语言构建时可以;
  3. 老猿的配置方法不对。

老猿觉得前面两个原因的可能性占多数,因为老猿做了很多测试都无法支持多行输出信息的处理,详细请见博文下面的介绍。

3.2.2.7、message

用于设置正则表达式匹配问题报错信息中给出的具体错误信息的匹配组号,如果没有配置或配置为0,默认就是包含文件名等在内的整个问题信息。

3.2.2.8、loop

loop这个属性老猿仅从字面理解了,是指定多行问题匹配器中的最后一个模式是否应循环,只要它与一行匹配即可,仅对多行问题匹配器中的最后一个问题模式有效。老猿理解为多行问题信息匹配需要多个匹配器来匹配多行的信息,如果loop为true,则只要这个问题匹配器匹配到任意一行的输出信息即可。

因为涉及多行匹配,与code属性一样,用C++程序测试时没有测试通过,因此也不知道理解是否正确。

四、问题匹配器的一些测试案例及结果介绍

4.1、编译hello.cpp的tasks.json的基本配置

下面是老猿使用的编译hello.cpp的tasks.json的基本配置:

{
  "version": "2.0.0",
   "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++ 生成活动文件",
      "command": "/usr/bin/g++",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "-Wall",
        "-Wextra",
        "-O0",
        "${workspaceFolder}/hello.cpp",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "options": 
      {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": 
      [              
      "$gcc"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "编译器: /usr/bin/g++"
    }
  ]
}

这是初始配置,问题匹配器用的是预定义的$gcc。用该配置编译上述hello.cpp时,在终端窗口输出的错误信息如下:
在这里插入图片描述
目前看到仅一个报错:“/home/administrator/E_DRIVER/vcwork/test/hello.cpp:3:10: fatal error: myhead.h: 没有那个文件或目录”,这是因为遇到了致命错误,所以没有继续往下执行编译。下面是此时在问题控制面板的输出信息:
在这里插入图片描述
可以看到输出了三个error级别的错误信息,其中前2个是VSCODE的C++插件IntelliSense输出的,第三个是cpptools输出的,实际上就是上面配置的问题匹配器$gcc输出的。

4.2、测试新增一个问题匹配器以及problemMatcher和ProblemPattern的severity属性关系

修改问题匹配器配置如下:

 "problemMatcher": 
      [   
        {"owner": "problem_1",
          "severity": "warning",
          "fileLocation": "absolute",
           "pattern":            
            {
              "regexp": "^(.*):(\\d+):(\\d+):\\s+(fatal).*:\\s+(.*)$",
              "file": 1,
              "line": 2,
              "column": 3,
              "severity": 4,
              "message": 5
            }
        },           
      "$gcc"
      ]

注意该问题匹配器的配置有如下要点:

  1. problemMatcher."severity"的值为 “warning”;
  2. pattern."severity"的值为4,对应regexp的第4个匹配组号,对应匹配内容为(fatal)
  3. 配置了2个问题匹配器,分别是自定义的problem_1和预定义的$gcc

这样配置后,执行生成构建任务后,问题面板的输出信息如下:
在这里插入图片描述
可以看到:

  1. 原来基本配置显示的最左边的严重级别图标为error,修改问题匹配器后显示为warning对应的图标;
  2. 问题来源显示为新配置的problem_1;
  3. 错误信息由原来的“myhead.h: 没有那个文件或目录”变成了“没有那个文件或目录”。
    结合上述问题匹配器大家去理解一下为什么会有这些变化,有疑问在评论区提问。

通过这个配置可以说明如下情况:

  1. problemMatcher的severity属性优先ProblemPattern的severity属性;
  2. 多个问题匹配器是按顺序匹配的,匹配到一个后面的不再匹配。

4.3、去除problemMatcher的severity配置场景

将自定义的问题匹配器的problemMatcher的severity属性配置注释掉,同时将message的匹配组号调整为4,与pattern."severity"的值相同,配置如下:

     "problemMatcher": 
      [   
        {"owner": "problem_1",
         // "severity": "warning",
          "fileLocation": "absolute",
           "pattern":            
            {
              "regexp": "^(.*):(\\d+):(\\d+):\\s+(fatal).*:\\s+(.*)$",
              "file": 1,
              "line": 2,
              "column": 3,
              "severity": 4,
              "message": 4
            }
        },           
      "$gcc"
      ],

可以看到执行构建任务时,问题面板输出内容如下:
在这里插入图片描述
可以看到输出的消息变为:fatal,问题严重级别图标变为error,相关结论大家可以参考《VSCode任务tasks.json中的问题匹配器problemMatcher和ProblemPattern的severity属性关系》的介绍。

4.3、新增两个定制化的problemMatcher配置场景

4.3.1、测试背景说明

由于测试代码中的#include "myhead.h"存在致命错误,导致编译程序无法往下执行,为了测试本场景,要求本次测试的代码是注释或去除了该行代码,此时编译报错信息为:

hello.cpp:10:12: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat=]
     printf("j=%s\n",j);
            ^~~~~~~~ ~
hello.cpp:14:5: error: ‘hell’ was not declared in this scope
     hell("");
     ^~~~
hello.cpp:14:5: note: suggested alternative: ‘ftell’
     hell("");
     ^~~~
     ftell

生成已完成,但出现错误。

 *  终端进程启动失败(退出代码: -1)
4.3.2、测试的问题匹配器配置

配置了三个问题匹配器,分别是problem_error、problem_warning和预定义的gcc,三个问题匹配器本身都没有配置severity属性。具体配置如下:

"problemMatcher": 
      [   
        {"owner": "problem_error",
          "fileLocation": "absolute",
           "pattern":            
            {
              "regexp": "^(.*):(\\d+):(\\d+):\\s+(.*error).*:\\s+(.*)$",
              "file": 1,
              "line": 2,
              "column": 3,
              "severity": 4,
              "message": 5
            }
        },   
        {"owner": "problem_warning",
          "fileLocation": "absolute",
           "pattern":            
            {
              "regexp": "^(.*):(\\d+):(\\d+):\\s+(.*warning|note).*:\\s+(.*)$",
              "file": 1,
              "line": 2,
              "column": 3,
              "severity": 4,
              "message": 5
            }
        },               
      "$gcc"
      ]

进行编译构建后,输出问题面板内容如下:
在这里插入图片描述

可以看到输出了4个问题,其中一个是C++ InelliSense输出的,其他三个是自定义问题匹配器输出的,大家应该可以理解输出信息为什么是这样吧?特别是最后一个显示的信息为什么是‘ftell’?不理解的在评论区提问吧。

4.4、测试捕获输出了源代码的问题

将问题匹配器换成如下:

"problemMatcher": 
      [   
        {"owner": "problem_code",
          "fileLocation": "absolute",
           "pattern":            
            {
              "regexp": "^.*(printf).*$",
              "file":1,
              "message": 1             
            }
        },            
      "$gcc"
      ]

该问题匹配器试图匹配输出信息存在printf的语句,但经测试该问题匹配器无法捕获到问题,具体原因未知,如果有哪位大佬可以解惑,欢迎在评论区留言,老猿感激不尽。

4.5、测试捕获多行问题信息

将问题匹配器改成如下:

"problemMatcher": 
      [   
         {"owner": "problem_multiline",
          "fileLocation": "absolute",
           "pattern": 
           [           
            {
              "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|note|error):\\s+(.*)$",
              "file": 1,
              "line": 2,
              "column": 3,
              "severity": 4,
              "message": 5
            },
            {
              "regexp": "(.*)",
              "file":1,
              "message": 1,
              "loop":true
            }
          ]
        },              
      "$gcc"
      ]

上面的问题匹配器数组包含了两个问题匹配器,一个自定义的problem_multiline,一个gcc,其中problem_multiline配置了两个ProblemPattern问题模式。运行编译任务后,可以看到问题面板输出信息如下:
在这里插入图片描述
这个输出结果可以看到,针对note的告警信息,匹配了problem_multiline这个问题匹配器,其他的问题输出信息都没有匹配到problem_multiline,匹配到的问题匹配器的输出信息感觉是两个ProblemPattern对note所在的首行输出信息进行匹配之后叠加一起作为message输出,为什么这样老猿也没搞懂,欢迎各位大佬指教。

五、小结

本文介绍了VSCode任务tasks.json中的问题匹配器problemMatcher的配置项问题匹配模式ProblemPattern,包括官方定义以及老猿对每个ProblemPattern子对象的解读,有些内容是老猿测试验证后独家公布,同时对相关知识老猿也存在多处没有理解的地方,在正文中都以加粗字体显示,期待各位大佬指导。

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多关于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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: VSCode配置tasks.json文件的步骤如下: 1. 打开VSCode,点击左侧菜单栏的“查看”按钮,选择“命令面板”或者使用快捷键“Ctrl+Shift+P”打开命令面板。 2. 在命令面板输入“tasks.json”,选择“配置任务”选项,点击回车。 3. 在弹出的任务配置窗口,选择“创建任务文件”选项,点击回车。 4. 在弹出的文件选择窗口,选择“tasks.json”文件,点击回车。 5. 在打开的“tasks.json”文件,可以配置各种任务,例如编译、运行、测试等。 6. 配置完成后,保存文件并关闭。 7. 在VSCode的左侧菜单栏,选择“运行”按钮,选择需要运行的任务即可。 以上就是VSCode配置tasks.json文件的步骤。 ### 回答2: Task 是 VS Code 一个非常重要的功能,可以帮助开发者在工程项目自动化执行一些任务,比如编译、运行、测试等,提高开发效率。而 tasks.json 文件是 VS Code Task 的配置文件,包含任务的具体配置信息。 一、如何配置 tasks.json 文件 打开 VS Code,使用快捷键 Ctrl + Shift + P 或者 Command + Shift + P,输入 “Tasks: Configure Task” 进入 Tasks 配置界面,选择 “Create tasks.json file from templates” 并按下 Enter 键,选择相应的模板创建 tasks.json 文件。 二、tasks.json 文件的基本语法 示例如下: { // task 1 - 编译 TypeScript "version": "2.0.0", "tasks": [ { "label": "TypeScript Build", "type": "typescript", "tsconfig": "./tsconfig.json", "problemMatcher": [ "$tsc" ] }, // task 2 - 运行 Node.js { "label": "Run Node.js", "type": "shell", "command": "node ./src/app.js", "problemMatcher": [] } ] } - version:tasks.json 文件的版本号,目前只支持 2.0.0 版本。 - tasks:tasks 数组,每个元素都表示一个任务条目。 三、tasks.json 文件的常用配置项 - label:任务名称。 - command:要执行的命令。 - args:传递给命令的参数。 - type:Task 的类型,有 shell 和 process 两种。 - options:执行命令时的选项。 - cwd:设置运行命令时的工作目录。 - problemMatcher:设置错误和警告的匹配规则。 - dependsOn:设置当前任务依赖的任务。 - group:设置当前任务所属的任务组别。 四、常用任务示例 1. 编译 TypeScript: { "label": "build", "command": "tsc", "args": [ "-p", "." ], "type": "shell", "group": "build", "presentation": { "reveal": "always" }, "problemMatcher": "$tsc" } 2. 运行 Python: { "label": "run", "command": "python", "args": [ "${file}" ], "type": "shell", "problemMatcher": [] } 3. 调试 TypeScript: { "label": "debug", "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/dist/app.js", "args": [], "outFiles": [ "${workspaceFolder}/dist/**/*.js" ], "preLaunchTask": "build", "sourceMaps": true, "smartStep": true, "problemMatcher": "$tsc" } 综上所述,tasks.json 文件是 VS Code 非常重要的一个配置文件,通过对该文件进行配置,可以使你的开发工作变得更加高效和自动化。开发者们找到适合自己的 task 配置方法,将可以更好地进行项目开发。 ### 回答3: VS Code是一款流行的开源代码编辑,它提供了全面的功能,包括调试、语法高亮、代码提示、版本控制等。对于开发者来说,tasks.json是一项非常重要的配置文件之一,它可以让开发者自定义代码的编译和运行方式。下面我们来详细了解一下如何配置tasks.json文件。 一、tasks.json简介 tasks.json文件定义了一组任务,每个任务都是与某个可执行程序相关联的一系列操作。它可以执行自定义的编译、运行、测试、打包等操作,从而提高代码开发的效率。tasks.json文件通常存在于.vscode目录下,如果该目录下没有tasks.json文件,则可以手动创建一个空的文件进行配置。 二、tasks.json的基本结构 tasks.json文件由一个JSON对象组成。每个任务由一个对象描述,包含以下结构: { // 任务名称 "label": "Build Project", // 命令或脚本 "command": "make", // 命令参数 "args": [ "all" ], // 输入和输出目录 "cwd": "${workspaceRoot}", // 是否在任务完成后自动显示输出结果 "showOutput": "always", // Windows系统使用的命令Shell "windows": { "command": "powershell.exe", "args": [ "get-childitem" ] }, // Linux和MacOS系统使用的命令Shell "linux": { "command": "bash", "args": [ "-c", "ls" ] }, // 任务类型 "type": "shell" } 以上是一个完整的任务结构体,其,label是任务名称,command和args是要执行的命令和参数,cwd是指定执行该命令的目录,showOutput标识是否显示输出,windows和linux是不同系统下执行该命令的配置,type指定了任务类型,shell类型表示该任务是直接执行指定的命令。 三、如何编写tasks.json VS Code提供了一个简单的任务绑定功能,可以通过键盘快捷键Ctrl+Shift+B直接触发。当点击任务时,它将执行用户定义的Tasks配置。 首先,在.vscode目录下创建tasks.json文件,在其输入以下JSON结构: { "version": "2.0.0", "tasks": [ { "label": "Compile", "type": "shell", "command": "tsc", "options": { "cwd": "${workspaceFolder}", "shell": true }, "problemMatcher": [ "$tsc" ] } ] } - version:定义tasks.json的版本号,当前版本为2.0.0。 - tasks:定义所有任务的数组,每个任务使用一个JSON对象描述。 - label:为任务指定一个用户友好的名称。 - type:任务的类型,通常是“shell”类型,表示该任务使用终端执行命令。 - command:定义要执行的命令。 - options:定义命令执行时的选项。在该示例,使用cwd指定命令执行时的工作目录。shell设置为true后,将使用环境SHELL变量代替默认的cmd.exe或powershell.exe。 - problemMatcher:指定问题匹配。在该示例,使用$tsc问题匹配匹配 TypeScript 编译输出的错误信息。 四、如何使用tasks.json 配置完成后重新启动VS Code,使用Ctrl+Shift+B快捷键或菜单栏任务调用快捷键,就可以运行tasks.json文件任务。需要注意的是,调用任务之前必须保存当前文件。如果在编辑运行任务,每个任务将在输出面板上显示其运行结果。 五、任务的高级配置 除了上述基本配置,tasks.json还支持其他一些高级配置: - dependsOn:定义该任务依赖的其他任务的标签。如下代码所示: "dependsOn": ["Task1", "Task2"] - group:定义任务在侧边栏的分组,例如“build”、“test”、“deploy”等。 - presentation:定义任务的展示方式。例如以下代码所示,使用reveal表示执行任务之后将焦点放在终端输出上。 "presentation": { "reveal": "always" } - promptOnClose:处理具有未保存缓冲区的工作区文件的关闭提示。可以设置为true、false或save。如果设置为true,则任何未保存的文件都将提示保存。如果设置为false,则关闭提示将被禁用。设置为save将仅提示保存正在编辑的文件。默认值为null。 总之,tasks.json是VS Code非常重要的环节,它可以让我们定制化自己的编译、运行等环节,大大提高了我们的开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值