2021 年 5 月(版本 1.57)
更新 1.57.1:此更新解決了這些問題。
“工作區信任”功能解決了 CVE-2021-34529。
下載:Windows:x64 Arm64 | Mac:通用 Intel Apple 晶片 | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2021 年 5 月版。此版本中有許多更新,希望您會喜歡,其中一些主要亮點包括:
- 工作區信任 - 在瀏覽不熟悉原始碼時提供額外的程式碼執行安全性。
- 全新“入門”體驗 - 幫助您快速設定和了解 VS Code。
- 遠端儲存庫 - 無需本地克隆儲存庫即可瀏覽和編輯程式碼。
- 終端選項卡 - 選項卡可讓您輕鬆建立、管理和分組多個開啟的終端。
- Edge 瀏覽器除錯 - 將 Microsoft Edge Developer Tools 直接整合到 VS Code 中。
- JSDoc @link 支援 - 在註釋中新增 @link 標籤以實現快速符號導航。
- 非 JS/TS 檔案的“轉到定義” - 快速跳轉到影像和樣式表。
- Notebook API 定稿 - 用於在 VS Code 中進行原生 notebook 支援的 Notebook API。
- Build 2021 上的 VS Code 部落格文章 - 觀看包含 VS Code 的按需會話。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
觀看 VS Code 團隊釋出派對中此版本新功能的亮點錄製。您可以在我們的 YouTube 頻道上找到活動錄製。
內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。
工作臺
工作區信任
Visual Studio Code 非常重視安全性,並希望幫助您安全地瀏覽和編輯程式碼,無論來源或作者如何。“工作區信任”功能讓您可以決定專案資料夾是否允許或限制自動程式碼執行。

注意:如有疑問,請將資料夾保留在“受限模式”下。您可以隨時在以後啟用信任。
安全程式碼瀏覽
公共儲存庫和檔案共享上提供瞭如此多的原始碼,這非常棒。無論編碼任務或問題是什麼,很可能已經有了一個好的解決方案。然而,使用開原始碼和工具確實存在風險,您可能會面臨惡意程式碼執行和漏洞利用。
當工作區在受限模式下開啟時,“工作區信任”透過阻止自動程式碼執行,在處理不熟悉程式碼時提供了額外的安全層。
注意:如果您想停用“工作區信任”功能,可以將
security.workspace.trust.enabled設定為false。只有當您確信您知道正在使用的檔案的來源和完整性時,才停用“工作區信任”。
受限模式
當“工作區信任”對話方塊提示時,如果您選擇“不,我不信任作者”,VS Code 將進入“受限模式”以防止程式碼執行。工作臺頂部將顯示一個橫幅,其中包含透過“工作區信任”編輯器管理資料夾的連結和瞭解更多連結,後者會將您帶到工作區信任使用者指南。

您還將在狀態列中看到一個“受限模式”徽章。

受限模式試圖透過停用或限制某些 VS Code 功能(如任務、除錯、工作區設定和擴充套件)的操作來防止自動程式碼執行。
要檢視在“受限模式”下停用的完整功能列表,您可以透過橫幅中的“管理”連結或單擊狀態列中的“受限模式”徽章開啟“工作區信任”編輯器。

信任工作區
如果您信任專案的作者和維護者,您可以在本地計算機上信任專案的資料夾。例如,信任來自 github.com/microsoft 或 github.com/docker 等知名 GitHub 組織的儲存庫通常是安全的。當您開啟一個新資料夾時,最初的“工作區信任”提示允許您信任該資料夾及其子資料夾。
您也可以調出“工作區編輯器”並快速切換資料夾的信任狀態。有幾種方法可以調出“工作區編輯器”對話方塊。
在“受限模式”下
- “受限模式”橫幅“管理”連結
- “受限模式”狀態列項
您也可以隨時使用
- 來自命令面板的“工作區:管理工作區信任”命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P))
- 來自活動欄“管理”齒輪的“管理工作區信任”

選擇資料夾
當您信任某個資料夾時,它會被新增到“工作區信任”編輯器中顯示的“受信任的資料夾和工作區”列表中。

您可以手動新增、編輯和刪除此列表中的資料夾,並且當前活動的已啟用信任的資料夾會以粗體突出顯示。
您還可以選擇信任父資料夾。這將對父資料夾和所有子資料夾應用信任。如果您有許多具有受信任內容的資料夾位於一個資料夾下,這會很有幫助。
啟用擴充套件
如果您想使用“受限模式”,但您最喜歡的擴充套件不支援“工作區信任”怎麼辦?如果某個擴充套件有用且功能正常,但沒有積極維護且未宣告其“工作區信任”支援,則可能會發生這種情況。為了處理這種情況,您可以使用 extensions.supportUntrustedWorkspaces 設定覆蓋擴充套件的信任狀態。
注意:謹慎覆蓋擴充套件的“工作區信任”支援。擴充套件作者可能出於充分理由在“受限模式”下停用其擴充套件。
下面是 Prettier 擴充套件的使用者 settings.json 條目。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
您可以使用 supported 屬性啟用或停用“工作區信任”支援。version 屬性指定適用的確切擴充套件版本,如果您想為所有版本設定狀態,則可以刪除版本欄位。
如果您想了解有關擴充套件作者如何評估和確定在“受限模式”下限制哪些功能的更多資訊,您可以閱讀工作區信任擴充套件指南。
設定
下面是可用的“工作區信任”設定
security.workspace.trust.enabled- 啟用“工作區信任”功能。預設值為 true。security.workspace.trust.startupPrompt- 是否在啟動時顯示“工作區信任”對話方塊。預設值是每個不同的資料夾或工作區只顯示一次。security.workspace.trust.emptyWindow- 是否始終信任空視窗(未開啟資料夾)。預設值為 true。security.workspace.trust.untrustedFiles- 控制如何處理工作區中的鬆散檔案。預設值為 prompt。extensions.supportUntrustedWorkspaces- 覆蓋擴充套件“工作區信任”宣告。要麼是 true,要麼是 false。
要了解有關“工作區信任”的更多資訊,您可以閱讀工作區信任使用者指南。
全新“入門”體驗
在過去幾次迭代中,我們一直致力於重新整理 VS Code 的歡迎頁面,我們很高興地宣佈,從這次迭代開始,我們的新歡迎頁面(入門)預設對所有使用者啟用。在這種新體驗中,VS Code 核心和已安裝的擴充套件都可以為歡迎頁面貢獻“演練”,這些演練旨在幫助您開始使用 VS Code 本身或新的擴充套件。例如,Luna Paint 擴充套件貢獻了一個包含指南的演練,以幫助瞭解影像編輯器的每個元件。

此外,一旦您完成(或關閉)所有演練,VS Code 會重新排列內容,將一鍵訪問的最近工作區數量增加一倍。

設定
workbench.startupEditor- 控制啟動時顯示的預設編輯器。新值gettingStarted取代了舊預設值welcome。其他一些可用選項包括readme、gettingStartedInEmptyWorkbench、newUntitledFile或none。workbench.welcomePage.walkthroughs.openOnInstall- 是否在安裝時自動開啟擴充套件貢獻的演練。
在新舊歡迎頁面完全過渡之前,新頁面將被稱為“入門”。
遠端倉庫
“遠端儲存庫”擴充套件作為預覽功能在 1.56 版中內建,現已公開發布,但它不再內置於 VS Code 中,因此您需要從 VS Code Marketplace 安裝它。
快速回顧一下,遠端儲存庫擴充套件允許您直接從 VS Code 中即時瀏覽、搜尋、編輯和提交到任何 GitHub 儲存庫,而無需在本地克隆或擁有儲存庫。
在此迭代中,雖然我們主要專注於錯誤修復和完善擴充套件以供釋出,但我們確實添加了一些新功能。您現在可以在“遠端資源管理器”中檢視您的遠端儲存庫,以便快速開啟或比較您可能有的任何未提交的更改。此外,您可以將來自同一儲存庫的更改應用到當前遠端儲存庫,從而使您可以快速輕鬆地將未提交的更改從一個分支移動到另一個分支。

要了解有關“遠端儲存庫”的更多資訊,您可以檢視遠端儲存庫部落格文章和 YouTube 影片。
改進了跨視窗的編輯器拖放
此版本改進了將編輯器拖到其他視窗的支援。您現在可以將差異編輯器、自定義編輯器和整個編輯器組拖到另一個視窗中以在那裡開啟編輯器。

注意:如果您經常使用此功能,請確保啟用“自動儲存”(files.autoSave),以便在一個視窗中的更改自動反映在另一個視窗中。
刪除了在未開啟編輯器時關閉視窗的 Cmd+W / Ctrl+W 鍵盤繫結
我們收到了反饋,使用者在使用快速 Cmd+W / Ctrl+W 關閉最後一個編輯器後,VS Code 視窗(例項)突然關閉感到沮喪。團隊內部的快速民意調查也顯示,許多人取消了此鍵盤繫結以關閉視窗,因此我們繼續刪除了 Cmd+W / Ctrl+W 作為在未開啟編輯器時關閉視窗的鍵盤繫結。
您可以透過在使用者 keybindings.json 檔案中按如下方式配置來輕鬆恢復鍵盤繫結
macOS
{
"key": "cmd+w",
"command": "workbench.action.closeWindow",
"when": "!editorIsOpen && !multipleEditorGroups"
}
Windows/Linux
{
"key": "ctrl+w",
"command": "workbench.action.closeWindow",
"when": "!editorIsOpen && !multipleEditorGroups"
}
注意:在所有平臺上,都有一個專用的鍵盤繫結用於關閉視窗
- macOS:
Cmd+Shift+W - Linux:
Alt+F4 - Windows:
Alt+F4
Notebook 佈局自定義
本月我們添加了幾個 notebook 佈局設定,允許使用者根據自己的工作流程自定義 notebook 編輯器。預設開啟的自定義項包括
Notebook 工具欄
我們在編輯器中添加了一個 notebook 工具欄,您可以在其中輕鬆訪問插入單元格、執行所有單元格或切換核心等操作。可以透過將 notebook.globalToolbar 設定為 false 來停用工具欄。

輸出工具欄
“清除單元格輸出”操作和用於選擇不同輸出渲染器或 mimetype 的按鈕現在合併到一個位於單元格輸出旁邊的單個“...”省略號選單中。可以透過將 notebook.consolidatedOutputButton 設定為 false 來停用此功能

聚焦單元格邊欄突出顯示
VS Code 現在支援在單元格的邊欄區域渲染聚焦單元格突出顯示,這有助於在 notebook 包含許多單元格時識別哪個單元格被聚焦。設定 notebook.cellFocusIndicator 可以是 gutter(新預設值)或 border 以突出顯示整個單元格邊框。

滑鼠懸停時顯示摺疊圖示
Markdown 單元格上的摺疊圖示現在在滑鼠懸停時可見,而不是始終可見。您可以透過將 notebook.showFoldingControls 設定為 mouseover(預設值)或 always 來自定義此行為。
![]()
本月實現的完整 notebook 佈局設定列表如下
notebook.cellFocusIndicator:添加了選項,允許單元格透過單元格側面的彩色條(gutter)指示其聚焦狀態,類似於 Jupyter。notebook.cellToolbarVisibility:確定單元格工具欄是應該在單元格聚焦時還是懸停時出現。預設值是僅在單元格聚焦時出現。notebook.compactView:啟用後,單元格以更緊湊的樣式渲染,減少空白空間。預設情況下啟用。notebook.consolidatedOutputButton:“清除單元格輸出”操作和用於選擇不同輸出渲染器或 mimetype 的按鈕已合併到一個位於單元格輸出旁邊的單個“...”省略號選單中。可以使用此設定停用新選單。notebook.consolidatedRunButton:有兩個新操作,“執行上方單元格”和“執行單元格和下方”。它們預設會出現在單元格工具欄中,但啟用此設定會將它們移動到執行按鈕旁邊的新上下文選單中。notebook.dragAndDropEnabled:停用單元格的拖放。您仍然可以使用命令(預設情況下為 Alt+Up/Alt+Down)重新排列單元格。notebook.globalToolbar:向 notebook 編輯器頂部新增一個工具欄。notebook.insertToolbarLocation:控制插入新單元格的按鈕是出現在單元格之間、工具欄中、兩者都有還是隱藏。notebook.showCellStatusBar:此設定有一個新選項visibleAfterExecute,它將隱藏單元格狀態列以節省空間,直到單元格執行。一旦執行,它將變為可見,以便使用者可以檢視執行詳細資訊。notebook.showFoldingControls:控制出現在 Markdown 標題上的摺疊箭頭是始終可見還是僅在滑鼠懸停時可見。notebook.editorOptionsCustomizations:允許使用者自定義 notebook 中的單元格編輯器設定。
下圖顯示了其中幾個設定的效果(頂部的工具欄、邊欄突出顯示、輸出 ... 按鈕)

更新了快速選擇和建議小部件顏色
我們更新了“快速選擇”和建議小部件中的焦點狀態,以更好地與我們的樹小部件樣式保持一致。這引入了一些新的顏色標記來控制焦點前景色
list.focusHighlightForegroundquickInputList.focusForegroundeditorSuggestWidget.selectedForeground


圖示主題:Fluent Icons
更新了 macOS 的觸控欄圖示
我們更新了 macOS 觸控欄圖示,使其與我們更新後的圖示樣式保持一致。
預設檢視
除錯時
Webview 的上下文選單
VS Code 現在支援在 webview(例如 Markdown 預覽、釋出說明和擴充套件詳細資訊頁面)中顯示簡單的上下文選單

此上下文選單目前包含用於複製和貼上文字的操作。我們將來可能會向選單新增更多操作。
如果此上下文菜單幹擾了您擴充套件中的 webview,您可以透過對 contextmenu 事件呼叫 preventDefault 來防止它顯示
document.body.addEventListener('contextmenu', e => {
e.preventDefault(); // cancel the built-in context menu
});
編輯器
建議預覽
啟用新設定 editor.suggest.preview 後,所選建議或程式碼片段的預覽將顯示在游標位置。

主題:Dark+(預設深色)
隱藏已棄用的建議
有一個新設定 editor.suggest.showDeprecated,預設值為 on,但當設定為 off 時,建議將不會顯示標記為已棄用的項。
整合終端
終端選項卡
終端選項卡作為預覽功能在 1.56 版中引入,現已預設啟用。新選項卡檢視僅在至少有兩個終端時預設顯示。對於單個終端,選項卡會“內聯”到面板標題中。這還引入了終端狀態的概念,例如任務是否正在執行、成功或失敗

以下是此版本中的一些亮點
- 可以更改選項卡的顏色,以便在它們之間實現快速導航和區分。
- 選項卡可以拖放以進行重新排列。

- 將終端組中的選項卡拖到空白區域將把它從組中刪除(取消拆分終端,也可透過上下文選單獲得)。

- 將選項卡拖到主終端區域允許加入組(也可透過上下文選單獲得)。

- 單擊選項卡、+ 按鈕或單個選項卡時,Alt 鍵現在會拆分終端。同樣適用於中鍵單擊以殺死終端。

- 除非選項卡列表足夠大,否則不會顯示內聯操作,以避免意外拆分/殺死終端。
- 當殺死一個終端只剩下一個時,選項卡列表不會隱藏,直到滑鼠離開檢視。
如果您不喜歡新的 UX,您可以透過設定 "terminal.integrated.tabs.enabled": false 返回到下拉選單,計劃是繼續支援此選項。
終端配置檔案改進
此版本中的終端配置檔案系統有許多改進,以下是一些亮點
- 如果終端在啟動 VS Code 時恢復,則會遵守
defaultProfile,並將用於任務和除錯。 - Intellisense 現在在
settings.json中適用於icon和defaultProfile。 overrideName現在適用於預設配置檔案。defaultProfile現在可以在工作區設定中設定。這也受到新的“工作區信任”功能控制。- 如果使用了
defaultProfile和shell或shellArgs設定,您現在將被要求將已棄用的設定遷移到配置檔案系統。 - 現在可以在配置檔案上設定
color。
標題序列支援
設定 terminal.integrated.experimentalUseTitleEvent 已升級為穩定版,名為 terminal.integrated.titleMode。預設情況下,此設定將為 executable,它根據檢測到的前臺程序命名終端

當此設定設定為 sequence 時,標題將基於 shell 設定的標題。這需要 shell 支援才能工作,oh-my-zsh 的預設提示就是其中的一個示例,它顯示了有關會話的其他資訊

改進了使用乾淨環境啟動
設定 terminal.integrated.inheritEnv 自 v1.36 起可用,但實現存在一些缺陷,例如在 Linux 上可能由於許可權問題而失敗,並且在 macOS 上可能無法按預期工作。
由於 VS Code 設定其底層環境的方式有所改進,現在可以訪問它啟動時的初始環境,這是大多數終端的工作方式。當 inheritEnv 設定為 true 時,VS Code 現在將使用初始環境,而當 false 時,將使用源自的“shell 環境”。此設定可以幫助終端更像常規終端。但是,如果您的 profile/rc 配置設定不正確,您可能會遇到問題。
Windows 上的原生換行支援
終端中的換行會驅動任務問題匹配器和連結檢測。在歷史上,Windows 終端使用啟發式方法來標記換行,因為模擬 Unix pty 的模擬技術不支援換行。這在最近的 Windows 版本上發生了變化,當更新到 Windows 10 21376+(目前僅限 Insiders)時,此啟發式方法將被停用,換行應該可以像在 Windows 終端中一樣正常工作。
任務
終端選項卡上的任務狀態
任務的狀態現在顯示在其終端選項卡中。對於後臺任務,僅當存在關聯的問題匹配器時才顯示狀態。

自動關閉任務終端
任務 presentation 屬性有一個新的 close 屬性。將 close 設定為 true 將導致終端在任務退出時關閉。
{
"type": "shell",
"command": "node build/lib/preLaunch.js",
"label": "Ensure Prelaunch Dependencies",
"presentation": {
"reveal": "silent",
"close": true
}
}
除錯
JavaScript 除錯
像往常一樣,完整的更改列表可以在 vscode-js-debug changelog 中找到。
Edge Developer Tools 整合
JavaScript 偵錯程式集成了 Microsoft Edge Developer Tools,為瀏覽器除錯提供 DOM、樣式和網路檢查器,可透過除錯工具欄中的新“檢查”圖示訪問。

下面的短影片演示了選擇“檢查”按鈕並在 Edge DevTools 中導航元素。
主題:Codesong
如果您還沒有使用 Microsoft Edge 進行瀏覽器除錯,您可以透過在 launch.json 中將 "type": "chrome" 或 "type": "pwa-chrome" 替換為 "type": "pwa-msedge" 來切換到它。這在 Blazor 應用程式中也受支援,方法是在其啟動配置中設定 "browser": "edge"。
支援 sourcemap 中重新命名的識別符號
JavaScript 偵錯程式現在支援 sourcemap 中重新命名的識別符號,這是一個期待已久的功能。這在除錯縮小程式碼時特別有用
主題:Codesong
“變數”檢視、“監視”檢視和“除錯控制檯”REPL 中都支援重新命名的變數。您可以透過檢視它生成的 sourcemap 檔案中是否存在非空的“names”陣列來檢查您的工具是否發出了重新命名。
在“斷點”檢視中顯示命中的斷點
當命中斷點時,VS Code 現在會在“斷點”檢視中選擇並顯示它。這應該使您更容易理解哪個確切的斷點導致程式中斷。
目前只有 JS-debug 擴充套件支援此功能,但我們希望其他除錯擴充套件很快也會跟進。

語言
TypeScript 4.3.2
VS Code 現在附帶 TypeScript 4.3.2。此重大更新包括許多 TypeScript 語言改進,以及許多 JavaScript 和 TypeScript 工具的改進和錯誤修復。
您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.3 的更多資訊。
JSDoc @link 支援
VS Code 現在支援 JavaScript 和 TypeScript 註釋中的 JSDoc @link 標籤。這些標籤允許您在文件中建立指向符號的可點選連結

JSDoc @link 標籤的寫法為:{@link symbolName}。您還可以選擇指定要渲染以代替符號名稱的文字:{@link class.property Alt text}。
hover、建議和簽名幫助中都支援 @link。我們還更新了 VS Code 可擴充套件性型別宣告檔案 vscode.d.ts 以使用 @link。
匯入語句中的完成
JavaScript 和 TypeScript 中的自動匯入會在您接受建議時自動新增匯入。在 VS Code 1.57 中,它們現在在編寫匯入語句本身時也起作用

如果您需要手動新增匯入,這可以節省時間。
非 JS/TS 檔案的“轉到定義”
許多現代 JavaScript 打包器和框架使用 import 語句來匯入影像和樣式表等資產。我們現在支援透過“轉到定義”導航這些匯入

當您使用 Ctrl/Cmd 單擊導航程式碼時,這可能最有用。
排序匯入源操作
JavaScript 和 TypeScript 的“排序匯入”程式碼操作會對您的匯入進行排序。但是,與“組織匯入”不同,它不會刪除任何未使用的匯入。
您還可以透過設定在儲存時啟用匯入排序
"editor.codeActionsOnSave": {
"source.sortImports": true
}
推斷函式返回型別快速修復
TypeScript 的“推斷函式返回型別”重構會向函式新增顯式返回型別註釋

如果您想新增更顯式的型別,這很有用。當您想將返回型別提取到命名型別/介面時,或者當您需要修改函式的返回型別時,此重構也可以節省時間。
提示停用 TS Server 日誌記錄
如果長時間啟用 TypeScript 伺服器日誌記錄,VS Code 現在會提示您

日誌記錄會顯著影響效能,因此最好將其停用,除非您正在積極嘗試診斷問題。
對擴充套件的貢獻
遠端開發
遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
1.57 中的功能亮點包括
- 控制轉發埠所需的協議。
- 轉發埠衝突的可選監視。
- 開發容器支援“工作區信任”安全功能。
- 更好地檢測開發容器中的環境變數。
您可以在遠端開發釋出說明中瞭解有關新擴充套件功能和錯誤修復的資訊。
擴充套件創作
Notebook API
我們已經最終確定了大部分 notebook API。該 API 分為三個獨立的部分
NotebookSerializerAPI,它與notebooks貢獻點結合使用,使 VS Code 能夠開啟、修改和儲存 notebook 文件。- Notebook 渲染器,用於顯示單元格輸出。它們是透過擴充套件
package.json檔案的notebookRenderer貢獻點新增的。 NotebookControllerAPI,用於為程式碼單元格生成輸出。
一個簡單的 notebook 序列化器和一個回顯控制器的示例。序列化器使用 JSON.parse 和 stringify,並對空檔案進行特殊處理。控制器返回單元格文字的大寫變體 - 一次作為純文字,一次作為 html。
// serialize/deserialize notebook
vscode.workspace.registerNotebookSerializer(
'echobook',
new (class implements vscode.NotebookSerializer {
// serializer is relying on JSON.parse/stringify
deserializeNotebook(content: Uint8Array) {
return JSON.parse(new TextDecoder().decode(content) || '{"cells":[]}');
}
serializeNotebook(data: vscode.NotebookData) {
return new TextEncoder().encode(JSON.stringify(data));
}
})()
);
// notebook controller
vscode.notebooks.createNotebookController(
'myId',
'echobook',
'Echo',
(cells, _notebook, controller) => {
for (let cell of cells) {
// execution means to echo in upper-case, once as plain text and once as html
const execution = controller.createNotebookCellExecution(cell);
execution.start();
const echo = cell.document.getText().toUpperCase();
const textItem = vscode.NotebookCellOutputItem.text(echo, 'text/plain');
const htmlItem = vscode.NotebookCellOutputItem.text(`<b>${echo}</b>`, 'text/html');
const output = new vscode.NotebookCellOutput([textItem, htmlItem]);
execution.replaceOutput(output);
execution.end(true);
}
}
);
該示例靜態註冊了 *.echobook 檔案的 notebook 型別。此外,每當開啟此類 notebook 時,VS Code 都會發出 onNotebook:echobook 啟用事件。
"contributes": {
"notebooks": [{
"type": "echobook",
"displayName": "Echobook",
"selector": [{
"filenamePattern": "*.echobook"
}]
}]
}
狀態列項 'id' 和 'name' 屬性
我們最終確定了 StatusBarItem 識別符號和名稱屬性的 API。識別符號可以從 createStatusBarItem 方法的新過載傳遞,而 name 屬性可以在 StatusBarItem 本身動態更改。
這些新屬性用於狀態列上的上下文選單,以便為單個條目提供名稱,並允許使用者顯示和隱藏條目。如果您不提供這些屬性,選單會將來自一個擴充套件的所有狀態條目聚合在一個條目下。

如果您的擴充套件對狀態列有貢獻,請考慮更新到新的 API。
在新終端中列印訊息
使用 window.createTerminal 建立終端時,現在可以透過 TerminalOptions.message 設定一條訊息,該訊息將列印在終端頂部。此訊息支援 ANSI 轉義序列以啟用文字樣式
vscode.window.createTerminal({
name: `My terminal`,
message: '\x1b[3;1mSome custom message\x1b[0m'
});

內聯值的新主題顏色
添加了新顏色來主題偵錯程式內聯值
editor.inlineValuesBackground:除錯內聯值前景文字的顏色editor.inlineValuesForeground:除錯內聯值背景的顏色。
提醒一下,對於註冊了內聯值提供程式的除錯擴充套件,或者如果設定 debug.inlineValues 為 true,則在除錯期間會顯示內聯值。

vscode-webview.d.ts
新發布的 @types/vscode-webview 包為 VS Code 在 webview 內部公開的 API 添加了型別定義。
您可以使用 npm install --save-dev @types/vscode-webview 安裝這些型別。如果 webview 型別未在您的專案中獲取,請嘗試將它們新增到 jsconfig / tsconfig 的 typeAcquisition 部分
"typeAcquisition": {
"include": [
"@types/vscode-webview"
]
}
或者在您的程式碼中新增三斜槓引用
///<reference types="@types/vscode-webview"/>
改進了 webview 陣列緩衝區傳輸
在 VS Code 的早期版本中,向 webview 傳送或從 webview 傳送型別化陣列有一些奇怪之處
- 型別化陣列(例如
UInt8Array)序列化效率低下。當您需要傳輸數兆位元組資料時,這可能會導致效能問題。 - 傳送的型別化陣列不會在接收端重新建立為正確的型別。如果您傳送
UInt8Array,接收方會得到一個通用物件,該物件具有UInt8Array的資料值。
雖然這兩個問題都是錯誤,但如果不破壞依賴現有行為的擴充套件,我們也無法修復它們。與此同時,新編寫的擴充套件完全沒有理由需要當前令人困惑且效率低下的行為。
因此,我們決定為現有擴充套件保留現有行為,但讓新擴展采用更正確的行為。這是透過檢視擴充套件 package.json 中的 engines 值來完成的。
"engines": {
"vscode": "^1.57.0",
}
如果擴充套件針對 VS Code 1.57+,則型別化陣列應在接收端重新建立,並且大型型別化陣列與 webview 之間的傳輸應更加高效。
除錯會話上的 parentSession
不久前,VS Code 添加了對分層除錯會話的支援,但在擴充套件 API 中沒有公開有關層次結構的資訊。為了解決這個問題,DebugSession 介面上有一個新屬性,用於引用父會話(如果有)。會話的父會話永遠不會更改。
export interface DebugSession {
/**
* The parent session of this debug session, if it was created as a child.
* @see DebugSessionOptions.parentSession
*/
readonly parentSession?: DebugSession;
// ...
改進了 VS Code Insiders 版本定位
在開發使用建議 API 的擴充套件時,可能會發布新的 Insiders 版本,其中包含重大更改。為了為使用者提供更無縫的過渡,您現在可以使用日期標籤精確定位 Insiders 版本。例如,將 engines.vscode 設定為 ^1.56.0-20210428 將定位在 2020 年 4 月 28 日 0:00 UTC 或之後建立的任何 VS Code 1.56(或更高版本)內部版本。這使您可以在即將釋出的 Insiders 版本釋出之前安全地釋出具有釋出日期後的擴充套件更新。
"engines": {
"vscode": "^1.56.0-20210428",
}
樹 hover 支援命令 URI
當 TreeItem 具有受信任的 Markdown 工具提示時,該工具提示可以包含格式為 [this is a link](command:workbench.action.quickOpenView) 的命令。這與支援 Markdown 中命令連結的所有其他位置的格式相同。
建議的擴充套件 API
每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試使用它們。一如既往,我們希望得到您的反饋。要嘗試提議的 API,您需要執行以下操作:
- 您必須使用 Insiders 版本,因為提議的 API 經常更改。
- 您的擴充套件的
package.json檔案中必須包含以下行:"enableProposedApi": true。 - 將最新版本的 vscode.proposed.d.ts 檔案複製到您專案的源位置。
您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。
測試
我們打算在此迭代中最終確定測試 API 的第一部分,但由於正在進行的其他功能數量,它被推遲了。雖然此迭代中測試 API 沒有重大更改,但我們繼續在其編輯器體驗方面取得進展。例如,“速覽”檢視增加了一個拆分檢視,允許您瀏覽當前和過去測試執行的結果。
主題:Codesong
測試獲得了一組新的以 Ctrl+; 開頭的和絃鍵盤繫結,“速覽”檢視現在對 Markdown 訊息有更好的支援,並且修復了許多錯誤。
如果您使用 Test Explorer UI 擴充套件進行測試,您可以切換設定 testExplorer.useNativeTesting 以切換到新的原生 UI。在下一次迭代中,我們計劃增加此設定的社交化,並開始與合作伙伴擴展團隊採用。
終端配置檔案貢獻
此 API 將使擴充套件能夠貢獻給終端配置檔案系統。擴充套件需要做幾件事才能使其工作。首先在 package.json 中貢獻配置檔案
"contributes": {
"terminal": {
"profiles": [
{
"title": "Profile from extension",
"id": "my-ext.terminal-profile",
"icon": "lightbulb"
}
]
},
}
然後在新 onTerminalProfile 啟用事件上啟用擴充套件
"activationEvents": [
"onTerminalProfile:my-ext.terminal-profile"
]
最後,在啟用事件中註冊提供程式
vscode.window.registerTerminalProfileProvider('my-ext.terminal-profile', {
provideProfileOptions(token) {
return {
name: 'Profile from extension',
shellPath: 'cmd.exe'
};
}
});
如果啟用了建議 API,擴充套件貢獻的配置檔案應該會出現在配置檔案列表中

terminal options 中的 iconPath 支援
標準 iconPath 型別在 TerminalOptions 和 TerminalExtensionOptions 上受支援,用於設定終端的圖示,該圖示顯示在終端的選項卡上
readonly iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon;
更改 Pseudoterminal 的標題
新事件 Pseudoterminal.onDidChangeName 啟用了對基於 Pseudoterminal 的終端的控制
const writeEmitter = new EventEmitter<string>();
const nameEmitter = new EventEmitter<string>();
const pty = {
onDidWrite: writeEmitter.event,
open: () => writeEmitter.fire('Type to change the title of the terminal'),
close: () => {
/* noop*/
},
handleInput: (data: string) => nameEmitter.fire(data)
};
const terminal = vscode.window.createTerminal({
name: `My Terminal`,
pty
});
terminal.show();
使檔案系統提供程式能夠將檔案宣告為只讀
檔案系統提供程式現在可以透過 FileStat 上的新 permissions 屬性將單個檔案標記為只讀,方法是將屬性值設定為 FilePermission.Readonly。只讀檔案不可編輯。
注意:如果所有檔案都應被視為只讀,您可以在呼叫 registerFileSystemProvider 時使用現有的 isReadonly 選項。
asExternalUri 中支援工作區 URI
現有的 vscode.env.asExternalUri API 現在支援處理工作區 URI。這允許擴充套件作者建立系統範圍的 URI,直接開啟給定的工作區。
例如
const uri = await vscode.env.asExternalUri('file:///Users/john/work/code');
作業系統可以開啟生成的 uri,VS Code 將開啟該工作區。
工程
Electron 沙盒支援的進展
在這個里程碑中,我們繼續讓 VS Code 視窗為啟用 Electron 的沙盒和上下文隔離功能做好準備。
具體來說:
- 我們從渲染器中使用的更多程式碼中刪除了 Node.js 依賴項。
- 我們繼續調查完全放棄
webview使用並切換到iframe以用於我們的自定義檢視和編輯器。
文件
Build 2021 上的 VS Code
如果您錯過了 Microsoft Build 2021 開發者活動,您仍然可以按需觀看會話。檢視Build 2021 上的 Visual Studio Code 部落格文章,我們在其中整理了一份我們認為 VS Code 使用者會感興趣的會話列表。
瀏覽器除錯
新主題VS Code 中的瀏覽器除錯描述了對 Edge 和 Chrome 瀏覽器的內建除錯支援。您可以配置 VS Code 以啟動新的瀏覽器除錯會話(透過“除錯:開啟連結”命令)或附加到正在執行的瀏覽器。
PyTorch
有一個關於如何在 VS Code 中使用 PyTorch 機器學習框架的新主題。在VS Code 中的 PyTorch 支援文章中,您將瞭解如何使用 PyTorch 和 TensorFlow 資料型別擴充套件 Jupyter Notebooks。
值得注意的修復
- 71966:經常出現完整的視窗掛起
- 85332:Windows:刪除檔案時凍結
- 95077:終端“單詞”連結提供程式不支援換行
- 108804:開啟視窗前不要等待 shell 環境解析
- 120004:VS Code 整合終端中奇怪的字母間距
- 125035:除錯控制檯過濾文字應在重新載入時保留
- iOS/iPadOS:針對 iOS/iPadOS 平臺進行了一些修復
感謝
最後但同樣重要的是,衷心感謝以下本月為 VS Code 做出貢獻的人們:
對我們問題跟蹤的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Nicholas Rayburn (@nrayburn-tech)
- Alessandro Fragnani (@alefragnani)
- ArturoDent (@ArturoDent)
對 vscode 的貢獻
- @Ashray123 (Ashray Jha):修改了 Markdown 預覽巢狀列表樣式 PR #124445
- @barbaravaldez (Barbara Valdez):拖放 api 的初始實現 PR #122239
- @CommaNet (Melvin ):更新 README.md PR #124654
- @danielgary (Daniel Gary):將 wmic 呼叫替換為 windows-process-tree PR #123895
- @DonJayamanne (Don Jayamanne):轉換 dto 時保留執行摘要 PR #124549
- @eltociear (Ikko Ashimine):修復 files.ts 中的拼寫錯誤 PR #124693
- @gjsjohnmurray (John Murray)
- 允許 FileSystemProvider 將檔案 stat 為只讀 (#_73122) PR #111237
- 修復 #123831 處理來自除錯介面卡的 ErrorResponse 訊息中的 command URL PR #123833
- @habibkarim (Habib Karim):實現 Pseudoterminal.onDidChangeName PR #115276
- @hantatsang (Sang):修復歡迎檢視連結缺少懸停顏色 PR #121835
- @huszkacs (Csaba Huszka):修復 android 螢幕鍵盤退格鍵問題。 PR #124288
- @inidaname (Hassan Sani):為 Markdown 預覽中的表格新增底部間距 PR #124385
- @jeanp413 (Jean Pierre)
- 修復 pascalCase 程式碼片段格式化程式無法處理數字 PR #122796
- 新增對終端選項卡上檔案拖放的支援 PR #123429
- 修復百分比編碼的 markdown 連結解碼不正確 PR #123584
- 修復程序資源管理器不顯示扭曲 PR #123910
- 修復程序資源管理器列表樣式不起作用 PR #123919
- 修復終端查詢小部件不應覆蓋選項卡 PR #124317
- 修復更新終端窗格操作時偵聽器洩漏 PR #124741
- 透過重新載入保留 repl 篩選器值 PR #125221
- @kabel (Kevin Abel):實現 GitHub Enterprise authn 提供程式 PR #115940
- @leilapearson (Leila Pearson):Explorer 的新排序順序詞典選項設定 PR #97272
- @mzainuddin51 (Mohammad Zainuddin):修復問題 #123772 的不正確連結 PR #124203
- @nrayburn-tech (Nicholas Rayburn)
- 為內聯除錯值新增顏色自定義 PR #123065
- 修復問題報告程式提交時不關閉並對提交進行去抖動 PR #123340
- 新增 showDeprecated 選項以建議,過濾掉已棄用的選項 PR #123351
- 如果 tsserver 日誌開啟超過 7 天,則新增通知 PR #124149
- 如果只有一個組,則隱藏終端選項卡的選項 PR #124480
- @plankp (Paul Teng):新增模式匹配 'in' PR #121941
- @rtzoeller (Ryan Zoeller):為 Make 語言註冊 .mak 擴充套件 PR #122614
- @shskwmt (Shunsuke Iwamoto):修復 #116335:將檔案路徑文字傳送到拖放的終端區域 PR #116621
- @suzmue (Suzy Mueller):修復為異常設定除錯呼叫堆疊顯示 PR #123726
- @tejasvi (Tejasvi S. Tomar):改進 TextEditor.setDecorations 的文件 PR #122785
- @ValeraS (Valeriy):修復:使用 addListener 而不是 addEventListener 來觀察媒體查詢列表 PR #121557
- @vibhavsarraf (Vibhav):規範化終端單詞連結中的路徑 PR #123246
- @wendellhu95 (Wendell):測試:新增事件 Relay 的測試 PR #119070
對 vscode-css-languageservice 的貢獻
- @jeanp413 (Jean Pierre):修復帶有包含點的字尾的檔名的連結解析 PR #241
對 vscode-eslint 的貢獻
- @edupsousa (Eduardo Pereira de Sousa):為 eslint.rules.customizations 新增 severity "off" PR #1243
- @karlhorky (Karl Horky):為 Node.js 的系統版本記錄 "node" PR #1247
對 vscode-js-debug 的貢獻
- @danielgary (Daniel Gary):990 - 支援使用啟動配置名稱作為終端標題 PR #991
- @lhchavez:功能:允許 debugServerMain.ts 的呼叫者指定主機 PR #1006
對 vscode-languageserver-node 的貢獻
- @yanmofeixi:向客戶端未就緒錯誤新增更多資訊 PR #764
對 vscode-pull-request-github 的貢獻
- @IllusionMH (Andrii Dieiev):刪除了 TSLint 建議和遺留的提及 PR #2758
對 vscode-vsce 的貢獻
- @jedwards1211 (Andy Edwards):使用 ignore npm 包而不是自定義程式碼來處理 .vscodeignore PR #418
- @oliversalzburg (Oliver Salzburg):修復:缺少錯誤響應處理 PR #564
對 language-server-protocol 的貢獻
- @DanTup (Danny Tuppeny):澄清 textDocument/selectionRange 如何處理一些缺失結果 PR #1272
- @HO-COOH:更新 specification-3-16.md PR #1259
- @narnaud (Nicolas Arnaud-Cormos)
- @NTaylorMullen (N. Taylor Mullen)
對 monaco-languages 的貢獻
- @akonatala (apoorva konatala):更新 cameligo 語言支援 PR #137
- @anark:為 liquid 語言新增別名和 mimetype PR #136
- @mattvague (Matt Vague):修復 liquid 的不正確檔名 PR #135
對 monaco-typescript 的貢獻
- @paranoidjk (paranoidjk):修復:支援 extraLib 檔案的轉到定義 PR #79

