写点什么

DIY VSCode 插件,让你的开发效率突飞猛进

  • 2021-01-29
  • 本文字数:3633 字

    阅读完需:约 12 分钟

DIY VSCode 插件,让你的开发效率突飞猛进

前言


Visual Studio Code(简称 VSCode)凭借其占用内存小、文件加载快、稳定性好、插件丰富等等特点,从众多 IDE 中脱颖而出,受到了广大开发人员的青睐。工欲善其事,必先利其器。选择适合自己的 VSCode 插件,能够让你的开发效率突飞猛进。VSCode 插件市场 上面插件百花齐放,但实际开发过程中问题复杂且多变,有时候并不能找到完全满足你实际开发需求的插件,那就自己动手 DIY 一个吧。VSCode 提供以下扩展能力:代码自动补全、自定义命令/菜单/快捷键、悬浮提示、自定义跳转、主题定制、自定义 WebView 等等。你可以根据自己的需要随意组合使用。


快速上手


接下来,将以一个简单的代码片段自动补全插件为例,让大家 10 分钟快速上手。代码片段自动补全也是大家编写代码时使用频率最高、最能帮助提高编码速度的功能。Demo 源码(https://github.com/Angela-Chen/vscode-test-extension



开发环境准备


  • Visual Studio Code

  • Nodejs,建议使用 LTS 版本

  • Npm

  • 官方推荐使用的脚手架工具 Yeoman 和 Generator-code

    npm install -g yo generator-code

  • 插件打包和发布工具 vsce

    npm install -g vsce


脚手架使用


  1. 执行以下命令:


yo code
复制代码


  1. 选择 New Extension 类型,然后依次填写插件名称、描述、包管理工具等基础信息。



PS:脚手架工具支持创建插件(New Extension)、主题(New Color Theme)、新语言支持(New Language Support)、代码片段(New Code Snippets)、键盘映射(New Keymap)、插件包(New Extension Pack)。以上不同类型的脚手架模板只是侧重的预设功能不同,其本质还是 VSCode 插件。


Snippets 代码片段自动补全


  1. 添加 Snippets 配置项


// package.json..."contributes": {	"snippets": [     	{            "language": "javascript",            "path": "./snippets/javascript.json"	  	},		{            "language": "typescript",            "path": "./snippets/javascript.json"		},        ...		]	},...
复制代码


在 package.json 的 contributes 下添加自定义的 Snippets。language 表示在某种特定语言下,对应的代码片段才会被加载生效。path 表示代码片段文件的存放路径。上面配置即表示 javascript 或 typescript 语言环境下,将加载 ./snippets/javascript.json 文件中的代码片段。


  1. 编写 Snippets 代码片段


// ./snippets/javascript.json{  "forEach": {    "prefix": "fe",    "body": [      "${1:array}.forEach(function(item) {",      "\t${2:// body}",      "});"    ],    "description": "Code snippet for 'forEach'"  },  "setTimeout": {    "prefix": "st",    "body": [      "setTimeout(function() {",      "\t${0:// body}",      "}, ${1:1000});"    ],    "description": "Code snippet for 'setTimeout'"  }  ...}
复制代码


上述例子中:


  • forEachsetTimeout 是代码片段的名称。

  • prefix 中定义一个或多个(设置数组时可以指定多个)触发词(trigger words),当用户输入内容是触发词时编辑器会弹出自动补全提示。

  • body 中定义的就是填充的代码段内容。body 中可以使用占位符(placeholders),如上面的 ${1:array}、 {2:// body},使用占位符方便在引用代码段的时候可以通过 tab 键快速切换跳转到对应位置编辑。冒号前面的序号表示切换的顺序,冒号后面的内容则是占位显示的默认文本。

  • description 顾名思义就是代码段的描述说明,编辑器弹出补全提示的时候会展示该描述,如果没有设置 description 字段,那么会直接展示代码段名称。


至此,插件的编码工作已经完成,是不是很简单~ 接下去,我们运行插件看下效果。


运行调试


选择 VSCode 的调试菜单(command+shift+D),点击运行按钮,弹出一个名为扩展开发主机的窗口,这个窗口就是包含这个插件的临时调试窗口。




打包和发布

打包

打包命令:vsce package,打包完成后会生成 .vsix 后缀的安装包。如果插件仅为个人或者团队内部共享,那么手动安装即可使用,无需发布到 VSCode 插件市场。

发布

发布命令:vsce publish。发布需要发布者账号,前往 Azure DevOps 注册,注册后需申请 Personal Access Tokens ,详细申请细节见 说明文档。


插件详解

目录结构


.├── .vscode	├── launch.json  # 插件加载和调试的配置├── CHANGELOG.md  # 变更记录├── extension.js  # 插件执行入口文件├── jsconfig.json  # JavaScript 类型检查配置├── node_modules├── package-lock.json├── package.json  # 声明当前插件相关信息├── README.md  # 插件使用说明└── vsc-extension-quickstart.md
复制代码

核心文件


1. package.json:插件的声明文件,包含 2 个重要配置项 activationEvents、contributes。


  • activationEvents 用于定义插件何时被加载/激活。例子中用到的是 onCommand,在 Hello World 命令被调用时,插件才会被激活。目前支持 9 种激活事件:

  • onLanguage:${language} 打开特定语言文件时

  • onCommand:${command} 调用某个 VSCode 命令时

  • onDebug Debug 时

  • workspaceContains:${toplevelfilename} 当打开包含某个命名规则的文件夹时

  • onFileSystem:${scheme} 以某个协议(ftp/sftp/ssh 等)打开文件或文件夹时

  • onView:${viewId} 指定 id 的视图展开时

  • onUri 插件的系统级 URI 打开时

  • onWebviewPanel webview 触发时

  • * VSCode 启动时。不建议使用,性能上会受到一定影响。


PS:出于性能考虑,插件都是懒加载的,只有特定场景下才会加载/激活,才会消耗内存等资源。


  • contributes 用于定义扩展项的具体配置。常用扩展项有代码片段(snippets)、命令(commands)、菜单(menus)、快捷键(keybindings)、主题(themes)。通常完成命令的开发后,会将其与菜单/快捷键进行关联,以便调用。


// package.json{  // 插件名称  "name": "vscode-test-extension",  // 显示名称  "displayName": "vscode-test-extension",  // 描述信息  "description": "An awesome vscode extension",  // 版本号 semver格式  "version": "0.0.1",  // 在插件市场展示的图标  "icon": "icon.png",  // 发布者名字  "publisher": "chenmenglan",  // 插件最低支持的vscode版本号  "engines": {    "vscode": "^1.12.0"  },  // 所属分类,可选 Languages/Snippets/Linters/Themes/Other 等等  "categories": ["Snippets", "Other"],  // 加载/激活方式  "activationEvents": ["onCommand:extension.helloWorld"],  // 入口文件路径  "main": "./extension.js",  // 注册扩展项配置  "contributes": {		"commands": [			{				"command": "extension.helloWorld",				"title": "Hello World"			}		],      	"snippets": [     		{                "language": "javascript",                "path": "./snippets/javascript.json"	  		},        ...		]	}}
复制代码


2. extension.js:插件的执行入口文件,通常包括激活(activate)和禁用(deactivate)2 个方法。命令必须先使用 vscode.commands.registerCommand 进行注册,然后将返回的实例添加至 context.subscriptions 中。当命令被激活时,会执行相应的回调方法。



const vscode = require('vscode');
/** * @param {vscode.ExtensionContext} context */function activate(context) {
console.log('Congratulations, your extension "vscode-test-extension" is now active!');
let disposable = vscode.commands.registerCommand('extension.helloWorld', function () { // 右下角消息提示 vscode.window.showInformationMessage('Hello World!'); });
context.subscriptions.push(disposable);}exports.activate = activate;
function deactivate() {}
exports.deactivate = deactivate;
复制代码

结语


如果你重复处理同一类问题超过 3 次,那么是时候该停下来思考下如何来化繁为简了。不妨花上些时间,梳理下使用频率最高或者最佳实践的代码片段,DIY 一个自己的插件,将重心放到更核心更复杂代码逻辑上。丰富的 扩展 API 让一切都比想象中来的简单,Just do what you want~


插件推荐


Auto Close Tag,自动补全关闭标签。

Auto Rename Tag,自动重命名标签。

Bracket Pair Colorizer,括号配对着色,方便查看多层嵌套的代码。

Beautify,快速格式化代码。

ESLint,语法规则和代码风格的检查工具。

Path Autocomplete,文件路径自动补全。

Document This,快速生成注释。

Todo Highlighter,高亮标记 TODO 注释,以便更容易追踪任何未完成的业务。

GitLens,增强了 VSCode 中内置的 Git 功能,包括查看代码作者、查看历史提交记录等等。


还有其他好用的插件,欢迎补充~~



头图:Unsplash

作者:沫沫

原文:https://mp.weixin.qq.com/s/XhU2BLncy1yKGPi-yPxfqw

原文:DIY VSCode 插件,让你的开发效率突飞猛进

来源:政采云前端团队 - 微信公众号 [ID:Zoo-Team]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2021-01-29 22:315067

评论

发布
暂无评论
发现更多内容

压缩微指令长度方法

若尘

计算机组成原理 6月日更

2021-06-25 从简书迁移来到InfoQ首文

林建

领导说PHP已经过时了,让我滚!!

网络安全学海

php 网络安全 信息安全 渗透测试 安全漏洞

[译] R8 优化: 枚举的 Ordinals 和 Names

Antway

6月日更

敏捷项目管理是不是可以缩短项目周期,或者说“敏捷就是快”?

万事ONES

项目管理 敏捷开发 ONES 项目管理工具

5G时代,视频会议的未来

anyRTC开发者

音视频 WebRTC 视频会议

Github自爆:阿里内部SpringBoot学习笔记,学完直接进大厂

Java架构师迁哥

老夫整理的1000行MySQL学习笔记,等待有缘人

Java架构师迁哥

一矢多穿:多目标排序在爱奇艺短视频推荐中的应用

爱奇艺技术产品团队

推荐 模型 多目标

阿里巴巴出品:完美杜绝备战一个月面试10分钟,让Java面试从此不再难

Java架构师迁哥

阿里实录:一个优秀的分布式系统该如何去设计?

Java架构师迁哥

B 站游戏技术平台微服务通用网关实践

bilibili游戏技术

微服务 openresty APISIX 通用网关

带老弟做项目,凉了

程序员鱼皮

Java c++ Python JavaScript 技术

解析 Nebula Graph 子图设计及实践

NebulaGraph

数据库 图数据库 子图

CHM源码阅读(jdk1.7)

周周

百度智能云以端边云全面智能化的天工AIoT平台2.0打造智能物联网解决方案

百度大脑

人工智能 物联网

做好项目管理,项目经理应当掌握哪些技能?

万事ONES

项目管理 ONES 项目经理

敏捷项目管理实践,如何正确使用故事点预估工作量?

万事ONES

项目管理 敏捷开发 ONES

前端 JavaScript 获取字符串中重复次数最多的字符

编程三昧

JavaScript 大前端 数组 指针思想

内卷把我逼成了“扫地僧”把Github上所有面试题都整理了一遍,足足24W字!

Java架构师迁哥

6月GitHub上star涨得最多的repo盘点

北游学Java

GitHub

Redis主从复制、Sentinel、集群总结

Hex

redis 后端 Redis 核心技术与实战

程序员的职业规划怎么做?7年老程序员的一份人生总结

学神来啦

程序员 日常 架构师

百度智能云在AI云服务市场四度夺魁!

百度大脑

人工智能 云服务

高性能计算在人工智能(AI)智药中的应用

北鲲云

有没有字节工牌,Java并发安全的根本原因都得懂

慕枫技术笔记

Java 高并发

B站收藏 12.5w+!GitHub 标星 6.6k+!这份文档拯救了我薄弱的计算机基础

Java架构师迁哥

《Spring Framework 系列》- IOC

公众号:程序猿成神之路

ioc Spring Framework

【得物技术】得物社区实践

得物技术

dubbo dubbo-go 社区 Go 语言 融合

北鲲云:浅谈云计算与高性能计算的区别与联系

北鲲云

公安局情指勤合成作战平台解决方案,合成指挥调度系统

DIY VSCode 插件,让你的开发效率突飞猛进_语言 & 开发_政采云前端团队_InfoQ精选文章