当前位置: 首页 > news >正文

开发一个自己的VSCode插件

1、前言

对于一个前端开发者来说,开发工具,最常用的应该就是VSCode了,因为它免费,速度快,提供了丰富了插件等优点,使得越来越多的前端开发者都来使用它了,在开发的时候如果有丰富的插件提供支持,那么我们写代码的速度会快很多,体验也有很好,有时候我们有一些自己的需求,那么可以自己尝试开发一款自己的插件来提升自己的效率,以下会讲到如何开发自己的一个插件,VSCode官方也提供了很多api,大家有时间可以多去研究一下。

以下是官方文档:Your First Extension | Visual Studio Code Extension API

如果你不知道如何下手,也可以通过微软官方对应的示例代码跑起来,去研究下对应的示例代码,代码示例地址如下所示:

github地址:GitHub - microsoft/vscode-extension-samples: Sample code illustrating the VS Code extension API.

2、快速开始

首先,我们需要提前安装Node和Git的环境,安装完之后,执行以下命令来安装对应的脚手架:

npm install -g yo generator-code

完成上面的安装后,可以通过以下命令生成基本的代码文件:

yo code

运行之后,可以选择对应的扩展类型,进行创建。

在插件的开发过程中,会经常改动文件,可以运行pnpm watch命令,用来监听文件的改动,以及打包运行。

注:所以在调试插件之前,进行启动,否则在调试窗口,自定义的命令会不生效。

3、文件目录

name-transform
├─ 📁.vscode
│  ├─ 📄extensions.json
│  ├─ 📄launch.json
│  ├─ 📄settings.json
│  └─ 📄tasks.json
├─ 📁src
│  ├─ 📁test
│  │  └─ 📄extension.test.ts
│  └─ 📄extension.ts
├─ 📄.eslintrc.json
├─ 📄.gitignore
├─ 📄.vscode-test.mjs
├─ 📄.vscodeignore
├─ 📄CHANGELOG.md
├─ 📄package.json
├─ 📄README.md
├─ 📄tsconfig.json
├─ 📄vsc-extension-quickstart.md
└─ 📄webpack.config.js

4、调试插件

在VSCode工具左侧,运行和调式图标,然后再点击绿色的小三角按钮或者快捷键(F5)就可以运行了。

执行完成之后,会弹出一个新的VSCode窗口,看到扩展开发宿主字样,说明调试窗口就开启成功了。。。

通过快捷键“Ctrl+Shift+P”,然后输入“Hello world”,选中条目,窗口下方会有对应的提示!如下所示:

5、编辑插件

开发插件的文件,位于src\extension.ts,extension.ts是开发的入口文件,如果代码量就直接在这个文件中写,代码量比较大可以在其他文件中写,最后从当前文件中进行引用就行。

6、插件功能实现

在开发过程中,可能有这样的需求,在写代码的时候,需要写命名规范的代码,那么就需要对应自己命名的代码进行转换。

1、定义命令

首先,需要在pageage.json定义,所需要的命令,如下图所示:

然后需要配置,在编辑区域选中,进行转换。配置如下所示:

在这里定义完所有的自定义的命令之后,就需要在入口文件(extension.ts)写每个命令对应的逻辑代码。

2、功能代码

把所有命令名定义成一个常量对象,如下所示:

把所有命令,循环进行注册,如下所示:

然后写选中替换的功能逻辑,如下所示;

最后transformFun函数是具体的替换逻辑,根据不同的命令,返回对应的字符串。

2.1、添加右键菜单

添加右键菜单进行转换,需要在package.json中进行配置。如下所示:

2.2 添加快捷键

添加快捷键功能,也需要在package.json中进行配置,部分示例如下所示:

到这里功能基本上就开发完了哈,完成之后可以看看实际效果是什么样子的。

7、发布插件

首先,我们需要把自己开发好的插件进行打包(.vsix),需要安装vsce,这个包,vsce是“Visual Studio Code Extensions”的缩写,是一个用于打包、发布和管理VS Code扩展的命令行工具。

安装

确保你已经安装Nodejs,然后运行如下命令:

npm install -g @vscode/vsce

使用

然后就可以进行打包和发布了。

$ cd myExtension
$ vsce package
# name-transform-0.0.1 生成了
$ vsce publish
# <publisher id>.name-transform 发布到 VS Code 插件市场了

发布扩展

您可以通过两种方式发布扩展:

  1. 自动使用vsce publish命令:
    vsce publish

    这种方式需要进行登录,必须使用vsce login命令提供您的个人访问令牌

  2. 手动使用vsce package将扩展打包为可安装的VSIX格式,然后将其上传到Visual Studio Marketplace发布者管理页面:

    这种方式需要提前准备以下信息:

    1、要有一个微软的账户
    2、能够访问google的网络,如果没有,在创建发布者的时候,在点击“创建按钮”的时候,页面会没反应。

    在创建发布者页面填写必填项,如下所示:

然后点击“Create”按钮就行,如果网络不行,会提示如下信息,说验证码未定义,这块会涉及谷歌的一个图形验证码。如下图所示:

创建完毕之后,可以点击New extension按钮,弹窗以下弹窗,然后把打包好的.vsix结尾的文件,上传即可。

完成之后,就等待审核就可以了,审核完成之后,就可以在VSCode左侧插件输入框中进行搜索和查看了,如下所示:

好了,这样一个自己开发的插件就大功告成了,以上就是一个插件开发的一个大概流程,具体的一些其他细节可以参考官方或者官方示例,以下是自己代码地址,一些功能或者也可用来参考,代码地址如下所示:

github: https://github.com/hanjiangxueying/name-transform

相关文章:

开发一个自己的VSCode插件

1、前言 对于一个前端开发者来说&#xff0c;开发工具&#xff0c;最常用的应该就是VSCode了&#xff0c;因为它免费&#xff0c;速度快&#xff0c;提供了丰富了插件等优点&#xff0c;使得越来越多的前端开发者都来使用它了&#xff0c;在开发的时候如果有丰富的插件提供支持…...

Milvus 向量数据库进阶系列丨构建 RAG 多租户/多用户系统 (上)

本系列文章介绍 在和社区小伙伴们交流的过程中&#xff0c;我们发现大家最关心的问题从来不是某个具体的功能如何使用&#xff0c;而是面对一个具体的实战场景时&#xff0c;如何选择合适的向量数据库解决方案或最优的功能组合。在 “Milvus 向量数据库进阶” 这个系列文章中&…...

前缀和(更新中)

目录 1.寻找数组的中心下标 2.除自身以外数组的乘积 3.和为k的子数组 4.可被k整除的子数组 5.连续数组 1.寻找数组的中心下标 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int pivotIndex(vector<int>& nums) {int size nums.size();v…...

记录一次单例模式乱用带来的危害。

项目场景&#xff1a; 我们在接受到短信网关下发的回执之后&#xff0c;需要将回执内容也下发给我们的下游服务。为了防止下游响应超时&#xff0c;我们需要将超时的信息存放到Redis中然后进行补发操作。 问题描述 在使用Redis进行数据存储的时候&#xff0c;报NPE问题。 原因…...

外卖项目day14(day11)---数据统计

Apache ECharts 大家可以看我这篇文章&#xff1a; Apache ECharts-CSDN博客 营业额统计 产品原型 接口设计 新建admin/ReportController /*** 数据统计相关接口*/ RestController RequestMapping("/admin/report") Api(tags "数据统计相关接口") Slf…...

养猫科普!牙口不好的猫咪怎么选粮?好吃易消化主食罐推荐

我家的猫猫已经九岁了&#xff0c;已经是一位老奶奶了&#xff0c;她的牙口不太好。对于她来说&#xff0c;膨化猫粮过于硬&#xff0c;很难咀嚼&#xff0c;所以我为她准备了质地柔软的主食罐头。哪种主食罐头更适合牙口不好的猫咪呢&#xff1f;下面&#xff0c;我就来分享一…...

力扣刷题之3143.正方形中的最多点数

题干描述 给你一个二维数组 points 和一个字符串 s &#xff0c;其中 points[i] 表示第 i 个点的坐标&#xff0c;s[i] 表示第 i 个点的 标签 。 如果一个正方形的中心在 (0, 0) &#xff0c;所有边都平行于坐标轴&#xff0c;且正方形内 不 存在标签相同的两个点&#xff0c…...

【更新2022】省级经济高质量发展指标体系测度 含代码 2000-2022

重磅更新&#xff01;【章汕】制作“省级经济高质量发展指标体系测度 含代码”&#xff0c;市面上有这个版本的数据&#xff0c;但其内容非常不全面&#xff0c;个别指标有误&#xff0c;没有stata和代码&#xff0c;即使有代码小白也很容易报错&#xff1b;没有权重、宽面板等…...

缓冲流练习

练习1&#xff1a;拷贝文件 四种方式拷贝文件&#xff0c;并统计各自用时。 字节流的基本流&#xff1a;一次读写一个字节 字节流的基本流&#xff1a;一次读写一个字节数组 字节缓冲流&#xff1a;一次读写一个字节 字节缓冲流&#xff1a;一次读写一个字节数组 这里我只使用了…...

自己履行很多的话语,依旧按照这个方式进行生活

《明朝那些事儿》最后一段讲述了徐霞客的故事&#xff0c;作者当年明月通过徐霞客的生平表达了一种人生哲学。在书的结尾&#xff0c;当年明月写道&#xff1a;"成功只有一个——按照自己的方式&#xff0c;去度过人生"&#xff0c;这句话被用作《明朝那些事儿》的结…...

交通预测数据文件梳理:METR-LA

文章目录 前言一、adj_METR-LA.pkl文件读取子文件1读取子文件2读取子文件3 二、METR-LA.h5文件 前言 最近做的实验比较多&#xff0c;对于交通预测数据的各种文件和文件中的数据格式理解愈加混乱&#xff0c;因此打算重新做一遍梳理来加深实验数据集的理解&#xff0c;本文章作…...

按钮类控件

目录 1.Push Button 代码示例: 带有图标的按钮 代码示例: 带有快捷键的按钮 代码示例: 按钮的重复触发 2.Radio Buttion 代码示例: 选择性别 代码示例: click, press, release, toggled 的区别 代码示例: 单选框分组 3.3 Check Box 代码示例: 获取复选按钮的取值 1.Pu…...

opencascade AIS_ViewController源码学习 视图控制、包含鼠标事件等

opencascade AIS_ViewController 前言 用于在GUI和渲染线程之间处理视图器事件的辅助结构。 该类实现了以下功能&#xff1a; 缓存存储用户输入状态&#xff08;鼠标、触摸和键盘&#xff09;。 将鼠标/多点触控输入映射到视图相机操作&#xff08;平移、旋转、缩放&#xff0…...

拉削基础知识——拉床的类型及特点

拉床是所有机械加工工具中最简单的一种&#xff0c;由拉削工具、夹具、驱动装置和支撑架组成。拉削加工可获得较高的尺寸精度和较小的表面粗糙度&#xff0c;生产率较高&#xff0c;适用于大批量生产。拉床按其结构主要分为卧式和立式。应用领域和功能可分为液压拉床、自动拉床…...

docker-compose笔记

docker 目前docker官网已经无法登录&#xff0c;但是还可以从清华镜像站&#xff08;https://mirrors.tuna.tsinghua.edu.cn/docker-ce/&#xff09;下载。 使用方法可以参考早期文章《docker笔记》 docker-compose 可以从Github下载不同版本的二进制文件&#xff0c;例如do…...

C# 自定义控件无法加载

问题 在做winform开发时自己定义了一个控件&#xff0c;控件在工具箱中显示了&#xff0c;但是拖动到窗体设计器时会提示未能加载工具箱项xxx&#xff0c;将从工具箱中将其删除&#xff0c;如下图所示: 点击确定后&#xff0c;控件会从工具箱中移除。 解决方法 将 生成>…...

avl树自实现(带图),探讨平衡因子与旋转

引子&#xff1a; 在此之前&#xff0c;我们学过了搜索二叉树&#xff0c;这种树&#xff0c;在如果数据有序或接近有序的情况下&#xff0c;二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下&#xff0c;而且普通搜索二叉树无法有…...

Elasticsearch 的DSL查询,聚合查询与多维度数据统计

文章目录 搜索聚合高阶概念 搜索 即从一个索引下按照特定的字段或关键词搜索出符合用户预期的一个或者一堆cocument&#xff0c;然后根据文档的相关度得分&#xff0c;在返回的结果集里并根据得分对这些文档进行一定的排序。 聚合 根据业务需求&#xff0c;对文档中的某个或…...

【如何高效处理前端常见问题:策略与实践】

在快速发展的Web开发领域&#xff0c;前端作为用户与应用程序直接交互的界面&#xff0c;其重要性不言而喻。然而&#xff0c;随着技术的不断演进和项目的复杂化&#xff0c;前端开发者在日常工作中难免会遇到各种挑战和问题。本文旨在深入探讨前端开发中常见的问题类型&#x…...

聊聊前端 JavaScript 的扩展运算符 “...“ 的使用场景

前言 在 JavaScript 中&#xff0c;... 被称为 “扩展运算符” 或 “剩余参数运算符”。 扩展运算符是在 ES6&#xff08;ECMAScript 2015&#xff09;中被引入的&#xff0c;目的是为了提高语言的表达能力和代码的可读性。 根据上下文不同&#xff0c;它主要用在数组、对象…...

智能车调参手记:我用Kp=200, Ki=60, Kd=40让小车稳如老狗

智能车调参手记&#xff1a;我用Kp200, Ki60, Kd40让小车稳如老狗 凌晨三点的实验室里&#xff0c;咖啡杯已经见底&#xff0c;眼前的智能车在测试跑道上又一次冲出了弯道。这已经是本周第七次熬夜调试&#xff0c;上坡时的速度波动问题始终困扰着我们。就在准备放弃的时候&…...

深入解析Jinja2模板引擎:render与generate函数的实战应用

1. Jinja2模板引擎基础入门 第一次接触Jinja2时&#xff0c;我完全被它的简洁和强大震撼到了。这个由Armin Ronacher开发的模板引擎&#xff0c;最初是为了解决Django模板的局限性而诞生的。经过多年发展&#xff0c;它已经成为Python生态中最受欢迎的模板引擎之一。 安装Jinja…...

量子密钥分发系统的工程实践(四):基于FPGA的后处理核心模块剖析

1. FPGA在QKD后处理中的核心作用 量子密钥分发&#xff08;QKD&#xff09;系统的后处理环节就像一位严谨的会计&#xff0c;需要把原始账本&#xff08;量子信号&#xff09;整理成无可争议的最终报表&#xff08;安全密钥&#xff09;。而FPGA在这个过程中的角色&#xff0c;…...

EdisonZhou

AI训练存储选型的演进路线 第一阶段&#xff1a;单机直连时代 早期的深度学习数据集较小&#xff0c;模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低&#xff0c;吞吐量极高&#xff0c;也就是“数据离…...

抖音批量下载工具:高效获取无水印视频与图文内容的全攻略

抖音批量下载工具&#xff1a;高效获取无水印视频与图文内容的全攻略 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

AI辅助架构设计:让快马智能生成符合最佳实践的SpringBoot项目骨架

今天想和大家聊聊如何用AI工具快速搭建一个符合现代最佳实践的SpringBoot项目骨架。作为一个经常需要从零开始搭建项目的开发者&#xff0c;我发现传统的手动创建项目方式效率太低&#xff0c;而且容易遗漏一些关键配置。最近尝试了InsCode(快马)平台的AI辅助功能&#xff0c;发…...

GeoServer高效发布SHP文件全攻略:从单文件到批量处理的进阶技巧

GeoServer高效发布SHP文件全攻略&#xff1a;从单文件到批量处理的进阶技巧 在GIS数据发布领域&#xff0c;Shapefile&#xff08;SHP&#xff09;作为行业标准格式已有近30年历史&#xff0c;而GeoServer作为开源地图服务器的中流砥柱&#xff0c;二者的结合构成了空间数据服务…...

Phi-4-mini-reasoning与IDEA集成开发:提升Java代码推理与注释生成效率

Phi-4-mini-reasoning与IDEA集成开发&#xff1a;提升Java代码推理与注释生成效率 1. 引言&#xff1a;当AI遇见Java开发 作为一名Java开发者&#xff0c;你是否经常遇到这样的困扰&#xff1a;接手一个复杂项目时&#xff0c;面对层层嵌套的代码逻辑感到无从下手&#xff1b…...

电视盒子播放视频总出错?TVBoxOSC让所有格式文件流畅播放

电视盒子播放视频总出错&#xff1f;TVBoxOSC让所有格式文件流畅播放 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库&#xff0c;用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC 你是否遇到过电视盒子播放视…...

从零搭建一个游戏设置面板:用Horizontal Layout Group搞定选项排布(Unity 2022 LTS)

从零搭建游戏设置面板&#xff1a;Horizontal Layout Group实战指南 在Unity游戏开发中&#xff0c;一个直观易用的设置面板是提升玩家体验的关键组件。本文将带你从零开始&#xff0c;使用Horizontal Layout Group组件构建一个专业的游戏设置界面&#xff0c;涵盖音量控制、画…...