如何写一个vscode插件

article/2025/10/4 8:20:20

1.运行yo code创建项目

在这里插入图片描述

2.选择使用yarn或者npm

在这里插入图片描述

3.运行

官网这个例子需要我们 ctrl + shirt + p 调出输入框, 然后在里面输入hello w 就可以如图所示

activationEvents: 当什么情况下, 去激活这个插件

activationEvents.onCommand: 在某个命令下激活(之后会专门列出很多其他条件)

定义命令

contributes.commands: 你可以理解为’命令’的列表
command: 命令的id (上面就是依靠这个id 找到这个命令)
title: 命令语句(可以看下图)
在这里插入图片描述

在这里插入图片描述

所以extension.js里面的registerCommand('lulu.helloWorld' 就是指定了, 这个命令Id 被执行的时候, 该执行的操作!

在这里插入图片描述

之所以标题里说这个例子不是太好, 就是因为我们平时较少用vscode的命令去做某个操作, 并不会很生动的把我们带入进去

4.项目结构微改 + 提示的类型

一个extension.js文件已经满足不了我们的’xie.nian’了, 所以我们要把它稍微改造一下.
老朋友src出场了, 毕竟我们以后要封装很多命令与操作, 工程化一点是必要的.

  1. 最外层新建src文件夹

  2. extension.js 改名 index.js, 放入src文件夹内.

  3. package.json中设置路径 “main”: “./src/index.js”(重点入口文件)

  4. 新建“目录.md”文件, 把插件的简介完善一下, 保证任何时候最快速度理解项目。

  5. 新建message.js文件, 放置弹出信息代码.

    index文件: 只负责导出引入各种功能, 不做具体的操作

在这里插入图片描述

在这里插入图片描述

index文件: 只负责导出引入各种功能, 不做具体的操作
const message = require('./message.js');function activate(context) {context.subscriptions.push(message);
}module.exports = {activate
}
message.js 触发各种提示框
const vscode = require('vscode');
module.exports = vscode.commands.registerCommand('lulu.helloWorld', function () {vscode.window.showInformationMessage('第一个demo弹出信息!');vscode.window.showWarningMessage('第一个警告信息')vscode.window.showErrorMessage('第一个错误信息!');
});

在这里插入图片描述

5.激活的时机

出于性能的考虑, 我们的组件并不是任何时候都有效的, 也就是说不到对应的时机我们的组件处于未被激活的状态, 只有当比如说遇到js文件才会生效, 遇到scss文件才会生效, 只能某个命令才能生效等等情况.
package.jsonactivationEvents数组属性里面进行修改.
这里只是常用的类型, 具体的可以去官网文档查看.


    "activationEvents": ["onCommand:hello.cc",  // 执行hello命令时激活组件"onLanguage:javascript",  // 只有是js文件的时候激活组件(你可以做js的代码检测插件)"onLanguage:python", // 当时py文件的时候"onLanguage:json","onLanguage:markdown","onLanguage:typescript","onDebug", // 这种生命周期的也有"*","onStartupFinished"],
  1. “*” 就是进来就激活, 因为他是任何时机(不建议使用这个).
  2. onStartupFinished他就友好多了,相当于但是他是延迟执行, 不会影响启动速度, 因为他是浏览器启动结束后调用(非要用""可以用这个代替).
这里有个坑点, 比如你有a,b 两个命令, 把a命令设为触发时机, 那么如果先执行b命令会报错, 因为你的插件还未激活.

6.生命周期

与其他库一样, 生命周期是必不可少的(*摘自官网*).

  • onLanguage
  • onCommand
  • onDebug
    • onDebugInitialConfigurations
    • onDebugResolve
  • workspaceContains
  • onFileSystem
  • onView
  • onUri
  • onWebviewPanel
  • onCustomEditor
  • *
  • onStartupFinished

7.window与mac的区别

我们知道, window与mac的案件是不大一样的, mac更多是使用command键, 这里我介绍一下分别设置快捷键.
在``里面contributes属性

 {"command": "hello.cc","key": "ctrl+f10","mac": "cmd+f10","when": "editorTextFocus"}
],

8.when属性常用方式

接下来还有其他地方用到这个when属性那么这里就专门提一下吧
下面是比较常用的, 具体的要查官网, 毕竟太多了!

1. 要正确的理解when, 他不是字符串, 他是true 或 false的布尔, 写成字符串vscode会去解析的, 所以when可以直接传 true, false, 这里要注意, 是when: "true" when:"false"
2. 由第一条可知editorLangId其实就是运行时上下文的一个变量, 也就是文件类型名常量.
1. 编辑器获得焦点时
"when": "editorFocus"
2. 编辑器文本获得焦点
"when": "editorTextFocus"
3. 编辑器获取焦点并且四js文件的时候
"when": "editorFocus && resourceLangId == javascript"
4. 后缀不为.js
"when":"resourceExtname != .js"
5. 只在Linux,Windows环境下生效
"when": "isLinux || isWindows"

9.所在的位置 左侧, 右上, 菜单的上与下

这里也只介绍最常用与好用的, 很多偏门知识学了我的这篇文章你也一定可以很轻易的自学了.
①. 鼠标右键
新建navigation.js文件用来展示我们的功能是否生效.
index.js里面引入

Package.json中修改

"activationEvents": ["onCommand:demo.nav"],1: 定义一个命令, 然后下面定义快捷触发这个命令2: 定义导航内容, 并且绑定点击事件"contributes": {"commands": [{"command": "demo.nav","title": "我是一个导航栏"}],"menus": {"editor/context": [{"when": "editorFocus","command": "demo.nav","group": "navigation"}]}},
// const message = require('./message.js');
const vscode = require('vscode');
const navigation = require('./navigation.js');function activate(context) {vscode.window.showInformationMessage('插件成功激活!');// context.subscriptions.push(message);context.subscriptions.push(navigation);
}module.exports = {activate
}
const vscode = require('vscode');module.exports = vscode.commands.registerCommand('lulu.nav', function () {let day = new Date();day.setTime(day.getTime() + 24 * 60 * 60 * 1000);let date = day.getFullYear() + "-" + (day.getMonth() + 1) + "-" + day.getDate();vscode.window.showInformationMessage(`明天是: ${date}`);
});

新建的窗口中随便打开一个文档点击右键
在这里插入图片描述

运行命令
在这里插入图片描述
在这里插入图片描述

②. 右上按钮
其实挺少有插件用这里的, 反而这里的市场没被占用, 想开发插件的同学可以抢先占领一下.

    "menus": {"editor/title": [{"when": "editorFocus", // 你懂得"command": "demo.nav", // 引用命令"group": "navigation" // 放在导航最上方}]}

③. 左侧导航栏, (这个我决定下面与tree一起讲, 因为那里是重点)

10. 加载的进度条(官网例子模糊)

package.json中"activationEvents": ["onCommand:demo.progress"],
"commands": [{"command": "demo.process","title": "我是一个进度条"}],为了方便 我们把它也定义在右键菜单里面"menus": {"editor/title": [{"when": "editorFocus","command": "demo.process","group": "navigation"}]}

Index.js中

const message = require('./message.js');
const vscode = require('vscode');
const navigation = require('./navigation.js');
const progress = require('./progress.js');function activate(context) {vscode.window.showInformationMessage('插件成功激活!');context.subscriptions.push(message);context.subscriptions.push(navigation);context.subscriptions.push(progress);
}module.exports = {activate
}

新建progress.js文件

const vscode = require('vscode');module.exports = vscode.commands.registerCommand('demo.progress', function () {vscode.window.withProgress({location: vscode.ProgressLocation.Notification,title: "载入xxxx的进度...",cancellable: true}, (progress) => {// 初始化进度progress.report({ increment: 0 });setTimeout(() => {progress.report({ increment: 10, message: "在努力。。。." });}, 1000);setTimeout(() => {progress.report({ increment: 40, message: "马上了..." });}, 2000);setTimeout(() => {progress.report({ increment: 50, message: "这就结束..." });}, 3000);const p = new Promise(resolve => {setTimeout(() => {resolve();}, 5000);});return p;})
});

11. hover的效果(官网例子模糊)

hover就不用去定义命令了, 因为他的触发规则就是悬停

新建一个hover.js文件

const vscode = require('vscode');
const path = require('path');module.exports = vscode.languages.registerHoverProvider('javascript', {provideHover(document, position, token) {const fileName    = document.fileName;const workDir     = path.dirname(fileName);const word        = document.getText(document.getWordRangeAtPosition(position));console.log(1, document)console.log(2, position)console.log(3, token)console.log(4, '这个就是悬停的文字', word)// 支持markdown语法return new vscode.Hover(`### 我就是返回的信息!1. 第一项:- 第一个元素- 第二个元素2. 第二项:- 第一个元素- 第二个元素`);}}
);

Index.js

const message = require('./message.js');
const vscode = require('vscode');
const navigation = require('./navigation.js');
const progress = require('./progress.js');
const hover = require('./hover.js');function activate(context) {vscode.window.showInformationMessage('插件成功激活!');context.subscriptions.push(message);context.subscriptions.push(navigation);context.subscriptions.push(progress);context.subscriptions.push(hover);
}module.exports = {activate
}

我先运行了一下之前的命令例如 又把鼠标移上去才可以了

在这里插入图片描述

在这里插入图片描述

由此可见, 我们hover的时候可以获得被悬停的文字, 可以获得其所在的文件位置, 那么我们就可以去node_modules里面查找对应的文件了, 然后获取到他的版本号与更新时间和官网地址, 所以那些在 package.json中hover出现详情的插件的原理, 你!懂!了!吧!

我们完全可以利用这个快捷查找一些你们公司内部的词汇的具体含义, 或者某些code与id 代表的含义.

12. 模板的定义, 打造属于自己团队的快捷开发

https://segmentfault.com/a/1190000038553748


http://chatgpt.dhexx.cn/article/5JllLBvc.shtml

相关文章

Python好用的VSCode插件

1. Better Comments 这是一个让你能更好地编写注释的工具,它能根据关键词用不同的颜色高亮代码片段。支持以下类型的高亮: 感叹号 “!” 代码警告。问号“?”代表存留疑问。TODO 代码未来将要进行的操作。param 参数 2. autoDocstring 能够自动生成函…

VScode插件(自用)

一、Material Icon Theme 图标插件 它采用了 Google Material Design 风格,文件图标以及文件夹图标覆盖非常的全面。 二、 颜色主题插件Themes(代码颜色)中的 Monokai Dimmed 三、css peek 使用此插件,你可以追踪至样式表中 CSS…

2022年好用的Vscode插件

Chinese(VSCode汉化插件) 第一款推荐的插件叫Chinese 是一款VSCode汉化插件 这样,VSCode就完成了汉化 Material Theme(主题插件) 第二款插件是一个好看的主题插件Material Theme 它包含了多套不同色彩风格的主题,以及好看的图标样式。 选择不同主题可以…

VSCode 插件

文章目录 VSCode 插件 VSCode 插件 图标插件作用Auto Import在j\ts文件中,直接使用外部依赖包的变量名,此时,会自动写入导入语句Bracket Pair Colorizer2VS Code 已经内置Chinese (Simplified) (简体中文)汉化Code Spell Checker适用于代码和…

vscode常用插件总结

1、Code Spell Checker 检查单词拼写 2、Auto Rename Tag html/xml标签改变,将会成对改变~ 3、Color Highlight 颜色标记 4、vscode-icon 文件图标 5、Turbo Console Log 或者 javascript console utils 按ctrlAltL可以快速输出console.log 6、v…

vscode插件(个人正在用的)

插件目录 any-ruleAuto Close TagAuto Rename Tagbackground-coverChinese (Simplified) (简体中文) Language Pack for Visual Studio CodeDebugger for JavaError LensESLintExtension Pack for JavaImage previewIntelliCodeIntelliCode API Usage ExamplesLanguage Support…

Vue3 (Vscode插件)

前端开发的编辑器有很多种如DW,hubilder,Web Storm,sublime,vscode,等等。 Vue3 vite Ts pinia 实战 源码 全栈_哔哩哔哩_bilibili 视频教程 随着VsCode开源免费,丰富的插件,也是深受前端开发人员爱戴,在我们使…

vscode插件开发

目录 插件在 VSCode 中能做什么 1、发布应用市场 1、申请Microsoft账号 2、创建Azure DevOps组织 3、创建令牌 4、创建发布账号 5、发布应用市场 2、本地打包不发布 1、本地打包 2、导入应用商店 ​编辑 3、插件开发前的环境准备 2、项目初始化 3、运行项目 4、文件…

VSCode插件推荐

1. VSCode汉化包插件 :Chinese (Simplified) (简体中文) Language VSCode汉化包,原始默认是英文的所以我们需要下一个中文插件。 2. VSCode自动补全标签 :Auto Close Tag Auto Close Tag 对Html或Xml文件自动创建结束标签; 如在…

vscode常用插件大全

vscode常用插件大全 参考文章 https://mp.weixin.qq.com/s/1PkWPApvn5uWJl_cdzcoTA 说明 该片文章基本介绍了 vscode 常用插件 , 已经很全面 本文不做任何编辑器的比较,只是我本人日常使用 vscode 进行开发,并且比较喜欢折腾 vscode ,会到处…

最新最全 VSCODE 插件推荐(2023版)

目录 一、主题及图标 二、功能强化 三、Git 集成 四、数据库 五、编程美化 六、开发效率 七、前端开发 八、数据分析 九、修仙插件 一、主题及图标 GitHub Theme 黑白两款皮肤 Material Theme 集成了多种主题皮肤,搭配 Material Icon Theme 食用更佳…

千锋重庆web前端技术分享之前端VSCode常用插件

一、VSCode常用的插件vscode之所以被称为宇宙第一神器,其中丰富的插件功不可没,安装起来超级简单,给我们开发带来了极大的便捷。 注意,新手学习期间,不建议安装形形色色的插件,用到啥就安装啥。因为有些插件…

30个实用VSCode 插件,让你的开发效率倍增!

1. Image preview 通过此插件,当鼠标悬浮在图片的链接上时,可以实时预览该图片,除此之外,还可以看到图片的大小和分辨率。 2. Auto Rename Tag 使用该插件,可以在重命名一个 HTML 标签时,自动重命名 HTML…

VScode神仙插件,程序员必备

前言 Visual Studio Code(VS Code)是微软2015年推出的一个轻量但功能强大的源代码编辑器,基于 Electron 开发,支持 Windows、Linux 和 macOS 操作系统。它内置了对JavaScript,TypeScript和Node.js的支持并且具有丰富的其它语言和扩展的支持&a…

2023年最新最全 VSCode 插件推荐

Visual Studio Code 是由微软开发的一款免费的、针对于编写现代Web和云应用的跨平台源代码编辑器。它包含了一个丰富的插件市场,提供了很多实用的插件。下面就来分享 2023 年前端必备的 VS Code 插件! 前端框架 ES7 React/Redux/React-Native snippets …

VSCode 最全实用插件(VIP典藏版)

目录 前言 一、必备插件 🌾Chinese(中文) 🤡Settings Sync(配置同步到云端) ​🌈wakatime(编程时间及行为跟踪统计) 二、效率神器 ✨HTML Snippets(代码提示&…

SaaS行业持续升温,这里有你想了解的SaaS云服务优势

SaaS(Software as a Service)——软件即服务,是一种软件交付模式。SaaS最大的特色在于软件本身并没有被下载到用户的硬盘,而是存储在提供商的云端或者服务器。对比传统需要花钱购买软件,SaaS只需要用户租用软件&#x…

企业应要求SaaS云服务商提供的三类安全措施

2019独角兽企业重金招聘Python工程师标准>>> 在面临SaaS云服务应用中的安全性问题时,密码管理不当和不安全协议威胁都将会对您的系统保密造成破坏或数据泄露,同时可能需要由您的企业来承担法 律责任。在本文中,我们将探讨SaaS所带…

SaaS-多租户SaaS平台的数据库方案(数据库设计与建模)

2 数据库设计与建模 2.1 数据库设计的三范式 三范式: 第一范式(1NF):确保每一列的原子性(做到每列不可拆分)第二范式(2NF):在第一范式的基础上,非主字段必…

删库跑路事件发生,SaaS 云服务如何守护数据安全?

作者 | 蒋敏峰 责编 | Carol 封图 | CSDN付费下载于视觉中国 近日,某SaaS服务商/微盟遭遇员工删库跑路,服务器出现大面积故障,一时间让平台上的几百万家商户生意基本停摆。这一事件发生后,不管是厂商还是平台上的用户,…