如何开发一 VSCode 插件

如何开发一个 VSCode 插件,本文开发一个 VSCode "Hello World" 插件,通过代码了解 VSCode 插件是如何工作的。

  1. 安装脚手架

    npx --package yo --package generator-code -- yo code

根据提示选择,插件开发语言选择 TypeScript

? What type of extension do you want to create? New Extension (TypeScript)

? What's the name of your extension? Hello

? What's the identifier of your extension? hello

? What's the description of your extension? first ext

? Initialize a git repository? No

? Which bundler to use? unbundled

? Which package manager to use? yarn

  1. 打开插件开发目录

    extension.js 插件的主文件入口

    点击运行(F5),⇧⌘P 输入 Hello,点击 Hello World,屏幕右下角会出线 Hello World from Hello!

  2. 插件中重要的三个概念

  • Activation Events:激活事件决定了何时激活你的插件。你可以在 package.json 文件中的 activationEvents 字段中指定这些事件。
  • Contribution Points:贡献点可以理解为要扩展 VSCode 那个组件,例如上面的例子就是扩展 VSCode 的命令列表,在列表中添加一项。
  • VS Code API: 插件可以调用 VSCode 的 API,例如注册命令 ID。
  1. 添加菜单
    VSCode 中很多插件都会在左侧添加一个菜单按钮,下面代码用于实现添加左侧按钮
  • 添加图标

    "contributes": {
    "viewsContainers": {
    "activitybar": [
    {
    "id": "helloWorldSidebar",
    "title": "Hello World",
    "icon": "resources/milktea.png"
    }
    ]
    },
    "views": {
    "helloWorldSidebar": [
    {
    "id": "helloWorldView",
    "name": "Hello World View"
    }
    ]
    },
    "commands": [
    {
    "command": "hello.helloWorld",
    "title": "Hello World"
    }
    ]
    },

  • 点击菜单后,打开窗口的定义

    import * as vscode from 'vscode';

    export class HelloWorldViewProvider implements vscode.TreeDataProvider<HelloWorldItem> {
    private _onDidChangeTreeData: vscode.EventEmitter<HelloWorldItem | undefined | void> = new vscode.EventEmitter<HelloWorldItem | undefined | void>();
    readonly onDidChangeTreeData: vscode.Event<HelloWorldItem | undefined | void> = this._onDidChangeTreeData.event;

    复制代码
      getTreeItem(element: HelloWorldItem): vscode.TreeItem {
          return element;
      }
    
      getChildren(element?: HelloWorldItem): Thenable<HelloWorldItem[]> {
          return Promise.resolve(this.getHelloWorldItems());
      }
    
      private getHelloWorldItems(): HelloWorldItem[] {
          return [
              new HelloWorldItem('Item 1', vscode.TreeItemCollapsibleState.None),
              new HelloWorldItem('Item 2', vscode.TreeItemCollapsibleState.None)
          ];
      }
    
      refresh(): void {
          this._onDidChangeTreeData.fire();
      }

    }

    class HelloWorldItem extends vscode.TreeItem {
    constructor(
    public readonly label: string,
    public readonly collapsibleState: vscode.TreeItemCollapsibleState
    ) {
    super(label, collapsibleState);
    this.tooltip = ${this.label};
    this.description = this.label;
    }
    }

  • 入口文件注册窗口 View

    复制代码
      const helloWorldViewProvider = new HelloWorldViewProvider();
      vscode.window.registerTreeDataProvider('helloWorldView', helloWorldViewProvider);

总结

开发 VSCode 插件时,根据需要进行对应的扩展(贡献点),随后对不同的 Command 进行业务功能开发,例如命令点击、菜单点击等等。

相关推荐
先跑起来再说14 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
嵌入小生00717 小时前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口
LYOBOYI12317 小时前
vscode界面美化
ide·vscode·编辑器
浔川python社18 小时前
关于浔川代码编辑器 v5.0 网页版上线时间的通知
编辑器
mailangduoduo21 小时前
零基础教学连接远程服务器部署项目——VScode版本
服务器·pytorch·vscode·深度学习·ssh·gpu算力
浔川python社1 天前
浔川代码编辑器 v5.0 上线时间公布
编辑器
山峰哥1 天前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
Doro再努力1 天前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
Doro再努力1 天前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
骥龙1 天前
第六篇:AI平台篇 - 从Jupyter Notebook到生产级模型服务
ide·人工智能·jupyter