20分钟入门学会vscode插件开发

141 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情


插件能力

  • 定制vscode主题
  • 编程语言特性(如代码高亮、括号匹配、智能提示、错误分析、跳转定义)
  • 使用Webview展示自定义web页面
  • 扩展工作台
  • 自定义菜单(如右键菜单)
  • 拓展调试功能

VS Code UI有两种类型的元素:容器和普通项

  • 容器 - 活动栏、侧边栏、编辑框、面板、状态栏
  • 普通项 - 放置在容器里面的项。

view视图包括树视图和自定义视图

{
  "contributes": {
    "viewsContainers": {
      "activitybar": [
        {
          "id": "package-explorer",
          "title": "Package Explorer",
          "icon": "resources/package-explorer.svg"
        }
      ]
    },
    "views": {
      "package-explorer": [
        {
          "id": "package-dependencies",
          "name": "Dependencies"
        },
        {
          "id": "package-outline",
          "name": "Outline"
        }
      ]
    }
  }
}

效果如下:

Hello World

  1. 使用脚手架创建项目
npm install -g yo generator-code
yo code
  1. package.json详解
# 激活插件的事件
"activationEvents": [
		"onLanguage:vue",
		"onCommand:doc-enhance-helper.showDocEnhanceHelper"
	],
	"main": "./dist/extension.js",
 # 注册的命令,激活插件的命令必须是在这里声明过的
	"contributes": {
    "snippets": [
      {
        "language": "vue",
        "path": "./snippets/vue.json"
      }
    ],
		"commands": [
			{
				"command": "doc-enhance-helper.showDocEnhanceHelper",
				"title": "doc-enhance.showHelper"
			}
		],
   # 插件配置属性
		"configuration": {
			"type": "object",
			"title": "enhance doc Helper Configuration",
			"properties": {
				"doc-enhance-helper.view.version": {
					"type": "string",
					"default": "1.0.1",
					"description": "Document version",
					"enum": [
						"1.0.1",
					]
				}
			}
		}
	},

activationEvents事件详情可看官方文档

  1. extension.js -- 插件工程的主入口
    主函数:function activate() { ... }
    每次激活插件时会触发此方法的运行
  2. 大部分功能都是使用发布-订阅模式,开发者通过提供的api订阅某个事件,并提供该事件触发时对应发布的内容。
    例如下面例子:
// 下面实现了代码补齐的功能,首先注册一个事件,当输入对应的字符时,触发此事件,
// 事件监听器此时则会根据部分内容自动补齐其余内容
vscode.languages.registerCompletionItemProvider([{
		language: 'pug', scheme: 'file'
	}, {
			language: 'jade', scheme: 'file'
	}, {
			language: 'vue', scheme: 'file'
	}, {
		language: 'html', scheme: 'file'
	}], completionItemProvider, '', ' ', ':', '<', '"', "'", '/', '@', '(')

关键API

  • vscode.commands.registerCommand: 注册命令面板的命令
  • vscode.window.visibleTextEditors 获取目前激活中的编辑器,通过该编辑器可以获取鼠标选中的文本或者行数

参考示例

插件示例仓库地址