更多文章請戳 VSCode插件開發全攻略系列目錄導航 。
代碼片段
代碼片段,也叫
snippets
,相信大家都不陌生,就是輸入一個很簡單的單詞然後一回車帶出來很多代碼。平時大家也可以直接在vscode中建立屬于自己的
snippets
:

建立代碼片段
那麼如何在擴充中建立
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表示預設光标落在這裡,按下回車或者tab跳到2的位置,以此類推,${1:xxx}
表示此位置的預設值,可省略,比如直接寫xxx
;$3
效果如下:
示例:ajax
為加深印象我們再來一個ajax的例子:
{
"ajax": {
"prefix": "ajax",
"body": [
"$.ajax({",
" url: '$1',",
" method: '${2:POST}',",
" datatype: 'json',",
" success: data => {",
" $3;",
" },",
" error: err => {",
" $4;",
" }",
"})"
],
"description": "ajax子產品"
}
}
效果(圖檔是直接偷來的,懶得自己截了):
使用TextMate/Sublime Snippets
利用
HelloWorld章節中講到的
yo code
生成器可以直接将
TextMate
代碼段(
.tmSnippets
)轉換成VScode的
Snippets
,生成器有一個選項
New Code Snippets
選項,可讓您指向包含多個
.tmSnippets
檔案的檔案夾。此外,生成器還支援
Sublime
片段(
.sublime-snippets
)。
設定
每一個插件可以建立一個屬于自己的專屬設定項,這個配置項會出現在系統設定的擴充下面,效果如下:
配置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一打開就在運作,是以
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);
}
}
代碼很簡單,也沒啥太多可以講的。修改複選框的值後可以去設定裡面看一下值是否跟着變了。