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…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
