剛好想寫個外掛方便在寫程式碼時自由切換rgba和hex,於是嘗試了一下vscode外掛編寫。
實際網上已有不少文章介紹如何編寫外掛了,不過貌似前一兩個也沒有關於我想寫的外掛的相關資訊,於是還是多搜尋了一把。
需求
首先,我的需求是外掛能在編輯器上,當我選擇文字時右鍵有轉換的操作按鍵,可以點選觸發將選中的內容進行識別,如果是rgba就換算成hex,如果是hex就換算成rgba
分解下來就是,需要利用外掛提供的能力:
- 右鍵選單
- 選中文字並替換文字
很簡單的功能
步驟
搭建外掛專案
按官方指引,是安裝全域性工具包
npm install -g yo generator-code
// 執行工具
yo code
然後工具就會進行一系列詢問,類似npm init
的操作流程
配置與編碼
因為是簡單的實現,所以基本沒有改變產出的檔案佈局
package.json : 配置
src/extension.ts : 實現入口
在配置上主要關注的是兩個屬性: main
contributes
main: 配置功能入口,主要是指向src/extension.ts最後產出的檔案
contributes: 配置command和menu (實現右鍵選單)
配置參考:見註釋
"contributes": {
"commands": [
{
"command": "xxx.exchange",
"title": "選單名~"
}
],
"menus": {
"editor/context":[
{ // 觸發時機,當編輯器有選中文字時
"when": "editorHasSelection",
// 觸發command
"command": "xxx.exchange",
// 選單位置設定: https://code.visualstudio.com/api/references/contribution-points#Sorting-of-groups
"group": "1_modification"
}
]
}
編碼實現:配置完command,就可以開始實現command,並註冊
import * as vscode from 'vscode';
function textColorHandle(word: string) {
let result = word;
// 進行顏色值轉換處理,並返回. 如果不是目標文字,原文返回
return result;
}
export function activate(context: vscode.ExtensionContext) {
// 註冊command
let disposable = vscode.commands.registerCommand('xxx.exchange', () => {
// 獲取編輯器物件
const editor = vscode.window.activeTextEditor;
if(editor) {
// 獲取選中文字
const doc = editor.document;
const selection = editor.selection;
const word = doc.getText(selection);
editor.edit(eb => {
// 文字替換
eb.replace(selection, textColorHandle(word))
})
}
});
context.subscriptions.push(disposable);
}
// this method is called when your extension is deactivated
export function deactivate() {}
雖然官方文件介紹挺全,但翻文件過程中卻很難找到自己要的相關配置案例,比如怎麼替換文字。後來是在官方的示例git裡找到相關資訊,才完成。
打包vsix
打包需要下載vsce
,遇到的問題是,當時自己的code版本是1.62.x,但是在安裝的generate-code編寫的外掛只支援到1.66.x,於是要先升級一下code版本,不然外掛用不了。
vsce package
體會:讀文件找文件太乾,外掛示例更關鍵。