VSCode 插件开发实战(八):创建和管理任务 Task
前言
VSCode 的扩展能力使得开发者能够根据个人需求定制工作环境,自定义插件和任务管理是 VSCode 强大功能的一部分,通过这些功能,开发者可以自动化常见工作流,简化日常开发任务,提高整体开发效率。本文将详细介绍如何在 VSCode 中创建和管理自定义任务,帮助你更高效地完成开发工作。
什么是 VSCode 任务?
VSCode 任务是一种自动化操作,它可以通过配置文件来定义常见的工作流,比如编译代码、运行测试、启动服务器等。当我们重复执行某些操作时,通过任务可以大大节省时间。
创建自定义任务
1. 创建任务配置文件
在你的项目根目录下,创建一个 .vscode 文件夹,并在其中创建一个名为 tasks.json 的文件。这个文件将用于定义你的自定义任务。
{"version": "2.0.0","tasks": [{"label": "Hello World","type": "shell","command": "echo Hello World","problemMatcher": []}]
}
上述代码定义了一个简单的 “Hello World” 任务。我们来逐个解释这些字段:
- version: 任务配置文件的版本号,目前我们使用的是 2.0.0。
- tasks: 包含多个任务的数组。
- label: 任务的名称,可以随意命名。
- type: 任务的类型,这里使用的是 shell 类型,表示执行 shell 命令。
- command: 要执行的具体命令。
- problemMatcher: 用于匹配和解析命令输出的错误信息,这里我们暂时忽略。
2. 运行任务
保存 tasks.json 文件后,按下 Ctrl + Shift + P (Windows) 或 Cmd + Shift + P (Mac),打开命令面板,输入 Run Task 并选择 Tasks: Run Task。你会看到 “Hello World” 任务,选择它并运行。你应该会在终端中看到 Hello World 的输出。
插件开发中的操作任务 Task
除了简单的任务配置,你还可以使用 VSCode API 来开发插件,并在插件中创建和管理任务。下面,我们将介绍如何通过编写插件来实现更复杂的任务管理。
1. 设置插件开发环境
首先,你需要安装 Node.js 和 npm(Node.js 包管理器)。然后,使用以下命令安装 Yeoman 和 VS Code Extensions Generator:
npm install -g yo generator-code
接下来,使用生成器创建一个新的插件模板:
yo code
按照提示完成插件的初始化设置。
2. 创建一个简单的插件
打开生成的插件项目,在 src/extension.ts 文件中,我们可以开始编写插件的核心逻辑。下面是一个简单的示例,展示如何在插件中创建和运行任务:
import * as vscode from 'vscode';export function activate(context: vscode.ExtensionContext) {const disposable = vscode.commands.registerCommand('extension.runCustomTask', () => {// 定义一个自定义任务const task = new vscode.Task({ type: 'shell' },vscode.TaskScope.Workspace,'Custom Task','extension',new vscode.ShellExecution('echo Hello from custom task'));// 运行任务vscode.tasks.executeTask(task).then(() => {vscode.window.showInformationMessage('Custom Task executed successfully!');}, (error) => {vscode.window.showErrorMessage(`Failed to execute custom task: ${error}`);});});context.subscriptions.push(disposable);
}export function deactivate() {}
在这个示例中,我们首先注册了一个命令 extension.runCustomTask,然后定义了一个自定义任务并运行它。
3. 调试插件
在 VSCode 中按下 F5,启动一个新的 VSCode 窗口用于调试插件。打开命令面板(Ctrl + Shift + P 或 Cmd + Shift + P),输入并执行 Run Custom Task。你应该会看到任务运行的结果,并在消息框中显示 “Custom Task executed successfully!”。
优化与进阶
1. 使用任务终端
有时候,我们需要在插件中创建一个专门的终端来执行任务。VSCode 提供了 Terminal API 可以很方便地实现这个功能。
export function activate(context: vscode.ExtensionContext) {const disposable = vscode.commands.registerCommand('extension.runTaskInTerminal', () => {const terminal = vscode.window.createTerminal('Custom Terminal');terminal.sendText('echo Running task in terminal');terminal.show();});context.subscriptions.push(disposable);
}export function deactivate() {}
在此示例中,命令 extension.runTaskInTerminal 将会创建并显示一个名为 “Custom Terminal” 的终端,并在其中执行指定命令。
2. 处理任务输出
有时候,我们需要对任务的输出进行处理或解析。例如,编译任务的输出可能包含错误或警告信息,我们希望在任务完成后进行相应的处理。
export function activate(context: vscode.ExtensionContext) {const disposable = vscode.commands.registerCommand('extension.runAndParseTask', () => {const task = new vscode.Task({ type: 'shell' },vscode.TaskScope.Workspace,'Parse Task','extension',new vscode.ShellExecution('echo "Error: Something went wrong"'));const problemMatcher = {owner: 'custom',applyTo: 'closedDocuments',fileLocation: ['relative', '${workspaceFolder}'],pattern: {regexp: '^(Error):\\s+(.*)$',severity: 1,message: 2}};task.problemMatchers.push(problemMatcher);vscode.tasks.executeTask(task).then(() => {vscode.window.showInformationMessage('Parse Task executed successfully!');}, (error) => {vscode.window.showErrorMessage(`Failed to execute parse task: ${error}`);});});context.subscriptions.push(disposable);
}export function deactivate() {}
在这个示例中,我们定义了一个 problemMatcher,用于解析任务输出中的错误信息。
总结
通过本文的介绍,我们深入了解了如何在 VSCode 中创建和管理自定义任务,从基础的任务配置到插件开发中的高级任务管理。VSCode 的任务系统为开发者提供了极大的灵活性和强大的工具支持,使得自动化工作流变得更加简单和高效。
无论是通过简单的 tasks.json 配置文件,还是通过利用 VSCode API 开发复杂的插件,开发者都能根据需求定制专属的开发环境。
相关文章:
VSCode 插件开发实战(八):创建和管理任务 Task
前言 VSCode 的扩展能力使得开发者能够根据个人需求定制工作环境,自定义插件和任务管理是 VSCode 强大功能的一部分,通过这些功能,开发者可以自动化常见工作流,简化日常开发任务,提高整体开发效率。本文将详细介绍如何…...
在 Node.js 中正确处理 `async/await` 及数组迭代
在使用 Node.js 开发应用程序时,我们常常需要处理异步操作。例如,当我们从数据库获取数据、调用外部API或执行文件读取时,这些操作都可能需要一些时间才能完成。在这种情况下,我们通常会使用 async/await 语法来简化异步编程的复杂…...
本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——13使用Resnet-Bin
本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——13使用Resnet-Bin 根据前面的内容,目前已经可以获取到resnet的bin模型 1 .Resnet的bin测试 这里给大家一个测试视频里面黑线的demo,大家可以用来测试自己的黑线识别精度 …...
FFmpeg第三话:FFmpeg 视频解码详解
FFmpeg 探索之旅 一、FFmpeg 简介与环境搭建 二、FFmpeg 主要结构体剖析 三、FFmpeg 视频解码详解 FFmpeg第三话:FFmpeg 视频解码详解 FFmpeg 探索之旅前言一、视频解码基础二、FFmpeg 关键 API 深度剖析(一)avformat_open_input()ÿ…...
解决 vue3 中 echarts图表在el-dialog中显示问题
原因: 第一次点开不显示图表,第二次点开虽然显示图表,但是图表挤在一起,页面检查发现宽高只有100px,但是明明已经设置样式宽高100% 这可能是由于 el-dialog 还没有完全渲染完成,而你的 echarts 组件已经开始尝试渲染图…...
C++ OpenGL学习笔记(4、绘制贴图纹理)
相关链接: C OpenGL学习笔记(1、Hello World空窗口程序) C OpenGL学习笔记(2、绘制橙色三角形绘制、绿色随时间变化的三角形绘制) C OpenGL学习笔记(3、绘制彩色三角形、绘制彩色矩形) 通过前面…...
关于我的Java考试被老师挂掉的这件事......
目录 1.事情起源 2.问题出现 3.最后的考试结果 4.问题如何解决的 5.此件事情引发我的思考 1.事情起源 现在是2024-12-25中午的13:08分,我于今天上虞结束了这个学期的Java课程的学习,上午的课程内容就是开始,使用MVC实现对于题目要求的这…...
Websocket客户端从Openai Realtime api Sever只收到部分数据问题分析
目录 背景 分析 解决方案 背景 正常情况下,会从Openai Realtime api Sever收到正常的json数据,但是当返回音频数据时,总会返回非json数据。这是什么问题呢? 分析 期望的完整响应数据如下: {"session": {"inp…...
Unity 6 中的新增功能
Unity 6 是 Unity 的最新版本。 一、编辑器和工作流程 Unity 6 中引入的更改 在 Linux 上实现了将文件和资源从 Unity 拖放到外部应用程序的功能。将 Asset Manager for Unity 包添加到 Package Manager > Services > Content Management 部分中。此包允许用户轻松浏览…...
[ComfyUI]颜色提取插件,Flux专属,让出图更加可控
一、介绍 今天介绍这个好玩的插件 ComfyUI APQNodes,默认的Flux模型是无法理解准确的颜色代码。 而这个插件可以帮我忙将输入的十六进制颜色代码转换为 FLUX.1 Dev 已知的最相似的颜色名称(来自预先测试的 155 个颜色名称)。 所以就…...
【magic-dash】01:magic-dash创建单页面应用及二次开发
文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…...
ChatGPT等大语言模型与水文水资源、水环境领域的深度融合
聚焦GPT等大语言模型与水文水资源领域的深度融合,通过系统化内容与实践案例,讲解如何高效完成时间序列分析、空间数据处理、水文模型优化以及智能科学写作等任务。同时,展示AI在高级机器学习模型开发、资源优化算法编程与模型微调中的最新应用…...
机器学习连载
1 机器学习基础知识 机器学习(Machine learning)是人工智能的子集,是实现人工智能的一种途径,但并不是唯一的途径。它是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已…...
linux查看天气预报
wttr.in 是一个简单且功能强大的命令行天气查询工具,实现了命令行下查看天气的炫酷效果。 开源地址:GitHub - chubin/wttr.in: :partly_sunny: The right way to check the weather 一. 什么是 wttr.in? wttr.in 是一个基于 Web 的命令行天…...
minikube start --driver=docker --force
minikube start --driver=docker --force 😄 minikube v1.34.0 on Debian 11.7 (amd64) ❗ minikube skips various validations when --force is supplied; this may lead to unexpected behavior ✨ Using the docker driver based on user configuration 🛑 The…...
游戏引擎学习第58天
发现一个vscode Log 断点的用法 回顾 我们正在继续推进工作,之前做了一些测试和清理工作,但还有一件事没有完成,因此我们还没有完全回到功能平衡的状态。昨天我们已经为实体做了空间划分,所以接下来的目标是继续完成这部分工作&a…...
我用火语言RPA生成EXE可执行文件,并使用激活码对EXE进行管理
火语言RPA,不仅可以生成EXE独立可执行文件,还可以使用激活码的功能对EXE进行管理,限制激活类型:在线、离线,EXE有效天数等进行管理,有限制的自由才是真正的自由! 生成EXE的时候选择App注册码验证类型 当分享…...
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)11
文章目录 一、算法概念11二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实…...
32位MCU主控智能电表方案
智能电表作为电网数据采集的核心设备,承担着至关重要的角色。它主要用于采集、计量和传输原始的电能数据,确保电力系统的高效运行。该设备配备了多种通讯接口,如RS485和以太网,使得用户能够轻松进行用电检测、集中抄表以及电力管理…...
ConstraintLayout是完美的布局吗?
非也! <TextViewandroid:id"id/tv_tittle_msg"android:layout_width"wrap_content"android:layout_height"wrap_content"android:layout_marginLeft"16dp"android:layout_marginRight"16dp"android:layout_ma…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
