🚀 在 VS Code 中

常用功能

常用功能是您擴充功能的重要基礎組件。幾乎所有擴充功能都會使用其中一些功能。以下說明如何善用這些功能。

命令

命令是 VS Code 運作方式的核心。您可以開啟命令面板來執行命令、將自訂鍵盤快速鍵繫結至命令,以及在關聯選單中按一下滑鼠右鍵來叫用命令。

擴充功能可以

擴充功能指南 / 命令主題中深入瞭解命令。

設定

擴充功能可以使用 contributes.configuration 貢獻點貢獻擴充功能專用設定,並使用 workspace.getConfiguration API 讀取這些設定。

鍵盤快速鍵

擴充功能可以新增自訂鍵盤快速鍵。在contributes.keybindings鍵盤快速鍵主題中閱讀更多資訊。

關聯選單

擴充功能可以註冊自訂關聯選單項目,這些項目會在 VS Code UI 的不同部分按一下滑鼠右鍵時顯示。在 contributes.menus 貢獻點中閱讀更多資訊。

資料儲存

有五種儲存資料的選項

  • ExtensionContext.workspaceState:工作區儲存空間,您可以在其中寫入金鑰/值組。VS Code 會管理儲存空間,並在再次開啟相同工作區時還原。
  • ExtensionContext.globalState:全域儲存空間,您可以在其中寫入金鑰/值組。VS Code 會管理儲存空間,並在每次擴充功能啟動時還原。您可以透過在 globalState 上使用 setKeysForSync 方法設定同步處理的金鑰,來選擇性地同步處理全域儲存空間中的金鑰/值組。
  • ExtensionContext.storageUri:工作區專用儲存 URI,指向您的擴充功能具有讀取/寫入權限的本機目錄。如果您需要儲存只能從目前工作區存取的大型檔案,這是個不錯的選項。
  • ExtensionContext.globalStorageUri:全域儲存 URI,指向您的擴充功能具有讀取/寫入權限的本機目錄。如果您需要儲存可從所有工作區存取的大型檔案,這是個不錯的選項。
  • ExtensionContext.secrets:用於機密 (或任何敏感資訊) 的全域儲存空間,將會加密。這些不會跨機器同步處理。對於 VS Code 桌面版,這會利用 Electron 的 safeStorage API。對於 VS Code 網頁版,這會使用雙金鑰加密 (DKE) 實作。

擴充功能內容可在擴充功能進入檔案中的 activate 函式中使用。

setKeysForSync 範例

如果您的擴充功能需要在不同機器之間保留一些使用者狀態,請使用 vscode.ExtensionContext.globalState.setKeysForSync 將狀態提供給 設定同步

您可以使用下列模式

// on activate
const versionKey = 'shown.version';
context.globalState.setKeysForSync([versionKey]);

// later on show page
const currentVersion = context.extension.packageJSON.version;
const lastVersionShown = context.globalState.get(versionKey);
if (isHigher(currentVersion, lastVersionShown)) {
    context.globalState.update(versionKey, currentVersion);
}

跨機器共用狀態有助於避免使用者看到多個歡迎或更新頁面的問題,方法是共用已關閉或已檢視的旗標。

顯示通知

幾乎所有擴充功能都需要在某些時候向使用者呈現資訊。VS Code 提供三個 API,用於顯示不同嚴重程度的通知訊息

快速選取

透過 vscode.QuickPick API,您可以輕鬆收集使用者輸入,或讓使用者從多個選項中進行選取。QuickInput 範例說明了此 API。

檔案選擇器

擴充功能可以使用 window.showOpenDialog API 開啟系統檔案選擇器,並選取檔案或資料夾。

輸出通道

輸出面板會顯示 OutputChannel 的集合,非常適合用於記錄目的。您可以使用 window.createOutputChannel API 輕鬆善用它。

Progress API

您可以使用 vscode.Progress API 向使用者報告進度更新。

可以使用 ProgressLocation 選項,在不同位置顯示進度

  • 在通知區域中
  • 在原始碼控制檢視中
  • VS Code 視窗中的一般進度

Progress 範例說明了此 API。