天天看點

VSCode插件開發全攻略(八)代碼片段、設定、自定義歡迎頁代碼片段設定自定義歡迎頁參考資料

更多文章請戳 VSCode插件開發全攻略系列目錄導航

代碼片段

代碼片段,也叫

snippets

,相信大家都不陌生,就是輸入一個很簡單的單詞然後一回車帶出來很多代碼。平時大家也可以直接在vscode中建立屬于自己的

snippets

VSCode插件開發全攻略(八)代碼片段、設定、自定義歡迎頁代碼片段設定自定義歡迎頁參考資料

建立代碼片段

那麼如何在擴充中建立

snippets

呢?

package.json

檔案新增如下:

"contributes": {
    "snippets": [
        {
            // 代碼片段作用于那種語言
            "language": "javascript",
            // 片段檔案路徑
            "path": "./snippets/javascript.json"
        }
    ]
}           

然後建立一個

snippets/javascript.json

檔案,我們這裡先簡單點,比如建立一個for循環:

{
    "for循環": {
        "prefix": "for",
        "body": [
          "for (const ${2:item} of ${1:array}) {",
          "\t$0",
          "}"
        ],
        "description": "for循環"
    }
}           

解釋如下:

  • for循環

    snippets

    的名字;
  • prefix

    :輸入什麼單詞觸發代碼片段;
  • body

    :一個數組,存放代碼片段的内容,每一行一個字元串;
  • description

    :片段的描述;
  • ${1:xxx}

    占位符,數字表示光标聚焦的順序,1表示預設光标落在這裡,按下回車或者tab跳到2的位置,以此類推,

    xxx

    表示此位置的預設值,可省略,比如直接寫

    $3

效果如下:

VSCode插件開發全攻略(八)代碼片段、設定、自定義歡迎頁代碼片段設定自定義歡迎頁參考資料

示例:ajax

為加深印象我們再來一個ajax的例子:

{
    "ajax": {
        "prefix": "ajax",
        "body": [
            "$.ajax({",
            "    url: '$1',",
            "    method: '${2:POST}',",
            "    datatype: 'json',",
            "    success: data => {",
            "        $3;",
            "    },",
            "    error: err => {",
            "        $4;",
            "    }",
            "})"
        ],
        "description": "ajax子產品"
    }
}           

效果(圖檔是直接偷來的,懶得自己截了):

VSCode插件開發全攻略(八)代碼片段、設定、自定義歡迎頁代碼片段設定自定義歡迎頁參考資料

使用TextMate/Sublime Snippets

利用

HelloWorld章節

中講到的

yo code

生成器可以直接将

TextMate

代碼段(

.tmSnippets

)轉換成VScode的

Snippets

,生成器有一個選項

New Code Snippets

選項,可讓您指向包含多個

.tmSnippets

檔案的檔案夾。此外,生成器還支援

Sublime

片段(

.sublime-snippets

)。

VSCode插件開發全攻略(八)代碼片段、設定、自定義歡迎頁代碼片段設定自定義歡迎頁參考資料

設定

每一個插件可以建立一個屬于自己的專屬設定項,這個配置項會出現在系統設定的擴充下面,效果如下:

VSCode插件開發全攻略(八)代碼片段、設定、自定義歡迎頁代碼片段設定自定義歡迎頁參考資料

配置configuration

配置如下:

"contributes": {
    "configuration": {
        "type": "object",
        // 顯示在配置頁左側
        "title": "Code插件demo",
        "properties": {
            // 全局唯一的配置ID
            "vscodePluginDemo.yourName": {
                "type": "string",
                "default": "guest",
                "description": "你的名字"
            },
            "vscodePluginDemo.showTip": {
                "type": "boolean",
                "default": true,
                "description": "啟動時顯示自定義歡迎頁"
            }
        }
    }
}           

比較簡單,就不細講了。

讀取和修改設定

讀取:

// 如果沒有設定,傳回undefined
const result = vscode.workspace.getConfiguration().get('vscodePluginDemo.yourName ');           

修改:

// 最後一個參數,為true時表示寫入全局配置,為false或不傳時則隻寫入工作區配置
vscode.workspace.getConfiguration().update('vscodePluginDemo.yourName', '前端藝術家', true);           

自定義歡迎頁

下面結合

設定

webview

2個章節的知識我們來做一個非常簡單的自定義歡迎頁。

最終效果如下:

VSCode插件開發全攻略(八)代碼片段、設定、自定義歡迎頁代碼片段設定自定義歡迎頁參考資料

要實作歡迎頁,肯定要保證插件在VSCode一打開就在運作,是以

activationEvents

必須設定成

*

然後建立一個新的打開歡迎頁指令:

context.subscriptions.push(vscode.commands.registerCommand('extension.demo.showWelcome', function (uri) {
    const panel = vscode.window.createWebviewPanel(
        'testWelcome', // viewType
        "自定義歡迎頁", // 視圖示題
        vscode.ViewColumn.One, // 顯示在編輯器的哪個部位
        {
            enableScripts: true, // 啟用JS,預設禁用
        }
    );
    let global = { panel};
    panel.webview.html = getWebViewContent(context, 'src/view/custom-welcome.html');
    panel.webview.onDidReceiveMessage(message => {
        if (messageHandler[message.cmd]) {
            messageHandler[message.cmd](global, message);
        } else {
            util.showError(`未找到名為 ${message.cmd} 回調方法!`);
        }
    }, undefined, context.subscriptions);
}));           

然後在全局的active方法裡面加入以下代碼:

const key = 'vscodePluginDemo.showTip';
// 如果設定裡面開啟了歡迎頁顯示,啟動歡迎頁
if (vscode.workspace.getConfiguration().get(key)) {
    vscode.commands.executeCommand('extension.demo.showWelcome');
}           

在歡迎頁我們加一個選項控制:

<div class="checkbox">
    <label>
        <input type="checkbox" v-model="show"> 啟動時顯示自定義歡迎頁
    </label>
</div>           

然後監聽show:

watch: {
    show(nv, ov) {
        callVscode({cmd: 'setConfig', key: 'vscodePluginDemo.showTip', value: nv}, null);
    }
}           

代碼很簡單,也沒啥太多可以講的。修改複選框的值後可以去設定裡面看一下值是否跟着變了。

參考資料

繼續閱讀