2021 年 4 月(版本 1.56)
更新 1.56.1:此更新解決了這些 安全問題。
更新 1.56.2:此更新解決了這些 問題。
下載:Windows:x64 Arm64 | Mac:通用 Intel Apple 晶片 | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2021 年 4 月版本。VS Code 團隊本月忙於進行一些更長時間的更新,因此請檢視 預覽功能 部分,瞭解即將推出的內容。以下是此版本中包含的一些亮點:
- 改進的懸停反饋 - 幫助您快速找到可點選的編輯器操作。
- 終端配置檔案改進 - 建立自定義預設終端配置檔案。
- 偵錯程式內聯值 - 在除錯會話期間在行內顯示變數值。
- Notebook KaTeX 支援 - Notebook Markdown 單元格中的數學支援。
- 開發容器卷檢視 - 管理 Docker 容器中掛載的卷。
- winget 安裝 - VS Code 可透過 Windows 包管理器獲取。
- 新的入門影片 - VS Code 入門以及使用 C++ 的影片。
- 終端選項卡預覽 - 初次體驗使用新選項卡檢視管理開啟的終端。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
太平洋時間 5 月 11 日星期二上午 8 點(倫敦時間下午 4 點)加入 VS Code 團隊直播,觀看此版本新功能的演示,並向我們即時提問。
內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。
工作臺
改進的操作懸停反饋
我們更改了整個工作臺的操作滑鼠懸停反饋,以提供更好的可點選操作使用者體驗。

無標題編輯器提示
我們注意到許多新使用者沒有意識到必須設定語言才能獲得完整的 VS Code 語言支援。為了解決這個問題,我們為無標題編輯器引入了一個提示,以幫助使用者設定正確的語言模式。無標題提示可能對高階使用者沒有幫助,因此您開始輸入時它會立即消失,或者您可以選擇 不再顯示 以永久隱藏提示。

預設自定義編輯器和 Notebook 解析
如果您有兩個編輯器都宣告它們應該是您的資源(例如,影像檢視器和影像編輯器)的預設編輯器,您將收到一個提示來解決衝突。
在下面的短片中,使用者打開了一個與兩個編輯器關聯的 PNG 檔案。通知允許使用者繼續使用 Luna Paint Image Editor 或配置新的預設編輯器,他們配置並開始使用二進位制 Hex Editor。

更新的自定義對話方塊
我們更新了自定義對話方塊樣式,您可以透過 "window.dialogStyle": "custom" 啟用它。VS Code 現在會使背景變暗,以便更好地關注對話方塊,並且當有多個操作時還會使用輔助按鈕樣式。

產品圖示主題:Fluent Icons
您可以使用以下顏色標記來設定輔助按鈕樣式的顏色
button.secondaryBackgroundbutton.secondaryForegroundbutton.secondaryHoverBackground
僅自動更新已啟用的擴充套件
您現在可以配置 VS Code 僅自動更新當前已啟用的擴充套件。

終端
配置檔案改進
上一個迭代中,我們引入了終端配置檔案。終端現在支援使用 terminal.integrated.defaultProfile.<platform> 設定來設定預設配置檔案。
配置檔案系統還添加了環境和圖示支援
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"overrideName": true,
"icon": "terminal-powershell",
"env": {
"TEST_VAR": "value"
}
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell",
將來,這些設定是切換預設終端配置的推薦方式,並且 terminal.integrated.shell 和 terminal.integrated.shellArgs 設定已被棄用。
新終端選擇器
配置檔案和設定快捷方式已移出下拉選單,並移入帶下拉選單的新 + 按鈕中。

這也支援基於非預設配置檔案建立新的拆分終端。
新鍵盤繫結
此版本中終端有幾個新的預設鍵盤繫結
- 移動到上一個終端 -
Ctrl+PageUp(macOSCmd+Shift+]) - 移動到下一個終端 -
Ctrl+PageDown(macOSCmd+shift+[) - 聚焦終端選項卡檢視 -
Ctrl+Shift+\(macOSCmd+Shift+\) - 終端選項卡預覽
與往常一樣,可以透過鍵盤繫結系統刪除這些預設鍵盤繫結或新增自定義鍵盤繫結。
Linux 選擇貼上命令
新的命令 workbench.action.terminal.pasteSelection 在 Linux 上可用,用於從選擇剪貼簿貼上到終端中。
終端工作區 Shell 許可權更改
為了支援與配置檔案相關的傳入更改,如果 .vscode/settings.json 中存在終端設定,則顯示的提示已刪除,取而代之的是一個設定,用於選擇啟用工作區設定。請注意,這在不受信任的工作區中可能很危險。
"terminal.integrated.allowWorkspaceConfiguration": true
當預設啟用工作區信任時,我們將刪除此功能並使用該系統。
任務
升級時刪除任務 0.1.0
任務 2.0.0 已可用並執行良好超過三年,任務 0.1.0 在此期間已被棄用。鑑於我們的無 Node.js 渲染器 目標,任務 0.1.0 已刪除,而不是將其帶入無 Node.js 世界。當您開啟包含 0.1.0 任務的資料夾時,它們將自動升級到版本 2.0.0。

終端選項卡中沒有“Task”字首
使用新的終端選項卡功能時,"Task" 字首將不再新增到終端名稱中。相反,任務由“工具”圖示指示,以更好地利用可用空間。

更好地匹配 eslint-stylish
$eslint-stylish 問題匹配器可以更準確地匹配多行問題。
除錯
斷點檢視改進
顯示資料斷點的訪問型別
對於資料斷點,VS Code 現在在“斷點”檢視中其名稱旁邊顯示訪問型別(“讀取”、“寫入”或“訪問”)。

更好的異常斷點狀態/錯誤報告
對於異常斷點,VS Code 現在在“斷點”檢視中顯示其單獨的驗證狀態和詳細原因。如果異常斷點無法驗證(例如,因為其條件包含語法錯誤),它將顯示為灰色,並在懸停時顯示相應的錯誤訊息。

其他 UI 改進
停止和斷開命令的替代行為
除錯會話通常透過 Debug: Stop 和 Debug: Disconnect 命令停止。如果除錯會話的型別為 launch,則 Stop 命令不僅停止會話,還會終止被除錯程式。對於 attach 型別的除錯會話,有一個 Disconnect 命令,它停止除錯並恢復被除錯程式的執行。
在此版本中,現在可以透過在從除錯工具欄觸發命令時按住 Alt 修飾符來翻轉此行為。更改行為使得對於 launch 型別的除錯會話,可以使被除錯程式保持執行;對於 attach 型別的除錯會話,可以終止被除錯程式。除了將 Alt 與預設命令一起使用外,還可以從命令面板訪問 Debug: Stop 和 Debug: Disconnect 命令,用於 launch 和 attach 除錯會話。
替代行為僅適用於已選擇加入此功能的除錯擴充套件。
改進的安裝缺失除錯擴充套件流程
如果使用者想要開始除錯但未安裝提供除錯支援的必要語言擴充套件(例如 Python 或 Java),我們改進了流程。發生這種情況時,VS Code 現在會提示使用者安裝適當的擴充套件。

呼叫堆疊列停止指示器
VS Code 現在在被除錯程式停止在某行上時渲染呼叫堆疊列指示器。這有助於識別程式當前停止在該行上的哪個位置。

某些語言預設內聯值
VS Code 的偵錯程式 UI 支援 內聯值,在單步執行原始碼時在編輯器中 內聯 顯示變數值。此功能基於 VS Code 核心中的通用實現,因此可能並非完美適用於所有語言,有時甚至會顯示不正確的值,因為通用方法不理解底層源語言。由於這些原因,該功能預設未啟用。
藉助新的偵錯程式擴充套件 API,語言擴充套件現在可以提供正確的內聯值支援,我們預設啟用了 改進的內聯值 功能。
要啟用此功能,debug.inlineValues 設定有一個新的(預設)值 auto。設定為 auto 時,對於那些具有“改進的內聯值”支援的語言,內聯值會自動啟用。
Debugger for Java 擴充套件是首批採用該 API 的偵錯程式擴充套件之一。在下面的螢幕截圖中,Java 變數的準確值顯示在其用法旁邊。

您可以使用 Inline Values support for PowerShell 擴充套件在除錯 PowerShell 指令碼時獲取內聯值。
斷點處顯示除錯檢視
debug.openDebug 設定的預設值現在為 openOnDebugBreak,以便在每次命中斷點時,VS Code 都會開啟除錯檢視。除錯檢視也在第一次會話開始時顯示。
JavaScript 除錯
與往常一樣,可以在 vscode-js-debug 變更日誌中找到完整的更改列表。
改進的斷點診斷工具可發現性
基於啟發式方法,如果 VS Code 檢測到使用者可能在斷點繫結方面遇到問題,它將顯示一個通知,建議開啟斷點診斷工具。

此提示最初只對部分使用者可見,因為我們正在試驗其有效性和斷言性。
私有類欄位支援
私有類欄位 現在可見,可以在偵錯程式中進行檢查。
Notebook
切換行號
您現在可以從單元格工具欄臨時切換當前會話中單元格的行號,或者透過 notebook.lineNumbers 設定更改所有 Notebook 的行號可見性。

每個檔案型別的單元格工具欄位置
可以透過 notebook.cellToolbarLocation 設定根據檔案型別自定義單元格工具欄位置。例如,您可以將單元格工具欄放在 GitHub Issue notebook 的右側,但將其放在 Jupyter notebook 的左側。
Markdown 單元格中的數學支援
您現在可以在 notebook Markdown 單元格中使用數學方程式

VS Code 使用 KaTeX 來渲染方程式。有兩種方法可以將數學方程式嵌入到 Markdown 單元格中:
- 使用單個美元符號:
$...$。這會建立一個內聯數學方程式。 - 使用雙美元符號:
$$...$$。這會建立一個居中的塊狀數學方程式。
我們使用實驗性 notebook 標記渲染器 API 實現了數學支援,該 API仍在開發中。我們對這個 API 的最終目標是也允許擴充套件來擴充套件 notebook 中 Markdown 的渲染。
語言
Markdown 預覽排版支援
新的 markdown.preview.typographer 設定允許您在內建 Markdown 預覽中啟用智慧引號和簡單的排版替換。
在下面的示例中,Markdown 文字(例如 (c))會在預覽中自動替換為版權符號 ©

markdown.preview.typographer 設定預設停用。
更多檔案被識別為 shellscript
具有 .xsession 和 .xprofile 檔名副檔名的檔案將自動被識別為 shellscript。
預覽功能
終端選項卡
終端中的選項卡作為預覽功能提供,可以使用以下設定啟用
"terminal.integrated.tabs.enabled": true

啟用後,新的選項卡檢視預設僅在有兩個或更多終端時顯示。對於單個終端,選項卡會“內聯”到面板標題中,如下所示

每個選項卡都支援透過上下文選單執行多個操作。

懸停時可以使用拆分和終止終端。

我們試圖將新選項卡的表現方式與資源管理器的工作方式保持一致。以下是其他一些行為
- 雙擊空白區域將建立一個新終端。
- 雙擊分隔符將切換選項卡檢視寬度,使其在顯示所有標題而不截斷的“理想”大小和僅顯示圖示的窄檢視之間切換。
- 可以使用
terminal.integrated.tabs.location設定將選項卡移動到左側。 terminal.integrated.tabs下還提供了各種其他配置設定。
終端狀態
除了選項卡之外,我們還向終端引入了 狀態 的概念。一個終端可以有許多狀態,每個狀態代表終端可以暫時處於的狀態,最高嚴重性的狀態顯示在選項卡旁邊。狀態圖示顯示在選項卡檢視中終端標題的右側。懸停時,會顯示狀態詳細資訊和任何相關操作。
![]()
目前支援以下狀態
- 需要重新啟動:如果擴充套件想要更改終端的環境,則使用警告圖示狀態。
- 已斷開連線:當終端與其程序失去連線時,使用插頭圖示狀態。
- 響鈴:當透過
terminal.integrated.enableBell設定啟用響鈴且終端響鈴觸發時,會出現一個響鈴圖示。
我們計劃很快支援任務狀態,以便即使不啟用選項卡,任務執行狀態也一目瞭然。
歡迎頁面演練
我們擴充套件了 walkthroughs 貢獻,將內容放置在“入門”頁面上,允許在步驟說明和步驟主要內容中使用 Markdown。對“入門”頁面的擴充套件貢獻是一項實驗性功能,可以透過 "workbench.welcomePage.experimental.extensionContributions": true, 啟用。
下面的短片顯示了一個示例演練,用於向用戶介紹 Luna Paint 擴充套件。

活動欄和麵板中的自定義懸停支援
在此里程碑中,我們在活動欄和麵板中添加了對自定義懸停的實驗性支援。您可以使用設定 workbench.experimental.useCustomHover 啟用自定義懸停。

主題:GitHub Light Theme 產品圖示主題:Fluent Icons
遠端儲存庫 (RemoteHub)
作為此版本的一部分,我們正在預覽一個新的內建擴充套件 Remote Repositories (RemoteHub),它允許您直接在 VS Code 中即時瀏覽、搜尋、編輯和提交任何 GitHub 儲存庫,而無需在本地克隆或擁有儲存庫。它目前僅在 VS Code 的 Insiders 版本中提供。
入門
要開始使用,請從命令面板執行 Open Remote Repository... 命令。從那裡,您可以貼上任何 GitHub URL,或選擇搜尋特定的儲存庫或拉取請求。

輸入 URL 或選擇儲存庫或拉取請求後,VS Code 將為該儲存庫開啟一個新的工作區。狀態列左側的遠端狀態指示器顯示遠端儲存庫的連線遠端提供程式名稱,例如 GitHub。

功能
- 即時開啟任何 GitHub 儲存庫,無需克隆或在本地擁有儲存庫。
- 輕鬆編輯和貢獻任何 GitHub 儲存庫 - 直接將更改提交到 GitHub,或開啟拉取請求。
- 在另一個環境中繼續 - 透過 Continue on... 命令(可從命令面板或遠端指示器快速選擇選單訪問)。
- 在本地克隆儲存庫
- 將儲存庫克隆到容器中 - 需要 開發容器 擴充套件
- 提供與在本地儲存庫上工作相似的熟悉使用者介面(*參見下面的“限制”)。
- 資源管理器 - 開啟、複製、移動、重新命名和刪除檔案和資料夾
- 搜尋 - 快速全文搜尋*
- 原始碼管理 - 暫存和提交更改,以及許多其他原始碼管理操作
- 時間線 檢視 - 檢視檔案歷史記錄並支援差異
- 快速開啟 - 快速查詢要開啟的檔案
- 遠端指示器 - 顯示遠端儲存庫連線到的提供程式(例如 GitHub)
- 同時處理不同的分支 - 每個遠端分支都被視為一個單獨的工作樹(在 Git 術語中),這意味著您所做的任何更改都隔離到該分支。您無需隱藏更改即可切換到新分支以檢出 PR 或開始新的工作項。當您返回到上一個分支時,您的更改仍將保留在那裡。
- 安裝 GitHub Pull Requests and Issues 擴充套件,快速檢視、瀏覽和檢出拉取請求,檢視並開始處理問題。
限制
- 有限的語言智慧 - 許多語言伺服器尚不瞭解這種虛擬化環境。TypeScript 支援遠端儲存庫的單檔案智慧。
- 有限的擴充套件支援 - 與語言伺服器一樣,許多擴充套件無法與遠端儲存庫一起使用。擴充套件可以選擇退出,並且不會為虛擬工作區啟用。有關詳細資訊,請參閱下面的擴充套件創作部分。
- 搜尋 - 全文搜尋需要預先構建的索引才能進行精確文字匹配,否則它將回退到 GitHub 的模糊預設分支原生搜尋。
- 終端 - 不支援。開啟的任何終端都將在您的本地檔案系統上。
- 除錯 - 不支援。
- 任務 - 不支援。
告訴我們您的想法
我們非常高興您能試用 Remote Repositories (RemoteHub),迫不及待地想聽取您的想法和反饋。我們才剛剛開始這段旅程,因此隨著我們繼續開發,功能集預計會增加,限制會減少。我們還將擴充套件支援的提供程式集。GitHub 是我們支援的第一個提供程式,Azure Repos 即將推出。
TypeScript 4.3
此版本繼續改進我們對即將釋出的 TypeScript 4.3 版本的支援。您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.3 中新語言功能和改進的更多資訊。以下是它啟用的一些編輯器改進
- 支援
override。還有用於新增override關鍵字的快速修復。 - 匯入語句完成。這類似於自動匯入,只是您正在鍵入匯入語句本身。
- JSDoc
@link標籤支援。
要開始使用 TypeScript 4.3 每夜構建版本,只需安裝 TypeScript Nightly extension。請分享您的反饋,如果您遇到 TypeScript 4.3 的任何錯誤,請告訴我們。
工作區信任
在上一里程碑的發行說明中,我們分享了專門針對擴充套件作者的工作區信任工作。在此里程碑中,我們在擴充套件 API 和使用者體驗方面都取得了巨大進展。儘管如此,此版本仍將停用工作區信任,但我們希望您嘗試一下並提供反饋。
您可以使用以下設定啟用該功能 security.workspace.trust.enabled。啟用後,您將在 VS Code 中開啟資料夾時看到以下對話方塊。

此對話方塊對於允許使用者儘早做出決定並瞭解其決定的影響非常重要。瞭解該功能後,您可能希望使用 security.workspace.trust.startupPrompt 設定來自定義何時顯示對話方塊。
您可以在 問題 #106488 中跟蹤工作區信任的開發並提供反饋。
對擴充套件的貢獻
遠端開發
遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
1.56 中的功能亮點包括
- 當您 Clone Repository in Container Volume 時的新卷檢視。
- 連線到遠端時發出本地終端警告。
- 使用 Dev Containers 擴充套件啟動時提示安裝 Docker Desktop。
您可以在 遠端開發發行說明中瞭解有關新擴充套件功能和錯誤修復的資訊。
GitHub 拉取請求和議題
GitHub Pull Requests and Issues擴充套件仍在繼續開發中,該擴充套件允許您處理、建立和管理拉取請求和問題。
要了解所有新功能和更新,您可以檢視擴充套件 0.26.0 版本的完整變更日誌。
擴充套件創作
定義您的擴充套件是否支援虛擬工作區
新的 遠端儲存庫 擴充套件允許您直接從 GitHub 開啟包含內容的資料夾。它透過提供虛擬檔案系統並在其上開啟工作區來做到這一點。其他擴充套件也這樣做。它們從 ftp 伺服器、雲端儲存或資料庫提供內容,並以檔案的形式無縫地將這些內容提供給 VS Code 中的使用者。
虛擬檔案系統功能已經存在一段時間了,但是我們觀察到並非所有擴充套件都支援在 虛擬工作區 中執行,其中工作區檔案在磁碟上並不物理存在。因此,我們添加了對擴充套件發出訊號的支援,以指示它是否支援在虛擬工作區中執行。當擴充套件選擇退出時,VS Code 不會為虛擬工作區啟用它,並且使用者將不會看到來自此擴充套件的錯誤。
擴充套件在 package.json 中選擇退出虛擬工作區設定,如下所示
{
"capabilities": {
"virtualWorkspaces": false
}
}
目標是儘可能多的擴充套件支援在虛擬工作區中執行。然而,這並非總是可能的,特別是當擴充套件使用假定檔案物理存在的元件時。 虛擬工作區指南 記錄了擴充套件如何支援虛擬工作區。
行動呼籲:請檢查您的擴充套件是否可以處理虛擬工作區,並相應地在您的 package.json 中設定 virtualWorkspaces 功能。
在擴展采用新的 virtualWorkspaces 屬性之前,會有一個過渡期。在此之前,我們維護一個內部列表,列出了我們認為應將 virtualWorkspaces 功能設定為 false 的擴充套件。這是根據對擴充套件是否使用 Node.js fs 模組並因此直接訪問檔案系統的分析完成的。然而,擴充套件作者處於更好的位置來評估擴充套件是否支援 virtualWorkspaces 功能。為了跟蹤採用情況,我們建立了以下 跟蹤問題 #122836。如果您的擴充套件在列表中並且您已採用 virtualWorkspaces 功能,請在上述問題中新增評論。
遠端指示器選單
擴充套件現在可以貢獻到遠端指示器選單

statusBar/remoteIndicator 選單貢獻點將命令新增到遠端指示器選單。
"contributes": {
"menus": {
"statusBar/remoteIndicator": [
{
"command": "remote-wsl.newWindow",
"when": "!remoteName && isWindows",
"group": "remote_10_wsl_0_local@1"
}
]},
"commands": [
{
"command": "remote-wsl.newWindow",
"title": "New WSL Window",
"category": "Remote-WSL"
}
]
}
為了允許選單根據提供程式對條目進行排序,group 需要遵循特定的語法
對於來自遠端的命令:remote_${orderOfGroups}_${remoteName)_${internalGrouping}@${orderInGroup}
對於來自虛擬檔案系統的命令:virtualfs_${orderOfGroups}_${fileScheme)_${internalGrouping}@${orderInGroup}
orderOfGroups是用於對組進行排序的 2 位數字remoteName是 remoteAuthority 的第一部分 (wsl, ssh,...)fileScheme是虛擬檔案系統的 URI 方案internalGrouping可供每個貢獻自由使用orderInGroup用於對組內的條目進行排序
示例:remote_10_wsl_1-open@1
現在大多數 webview 都使用 iframe
自從 webview API 首次引入以來,我們就使用 Electron 的 webview 標籤 來實現 webview。然而,在 web 上,VS Code 的 webview 是使用標準 <iframe> 元素實現的,因為 <webview> 不可用。
我們一直在探索將 VS Code 的桌面版本遷移到使用 <iframe> 支援的 webview,因為此更改將為擴充套件提供桌面和 web 之間更一致的 webview 環境。從 <webview> 遷移也將有助於我們的 Electron 沙盒工作。
在此迭代中,我們將大部分 webview 切換為使用 iframe。現在 <webview> 標籤僅用於啟用“查詢”小部件的 webview,我們計劃在進行更多工程工作後也將它們遷移到使用 iframe。
此更改不應導致問題,但在某些邊緣情況下,<iframe> 和 <webview> 元素的行為有所不同。請務必對您的擴充套件進行快速測試以驗證一切是否按預期工作。
更輕鬆地檢查 webview
<iframe> 支援的 webview 的一個明顯好處是它們現在更容易檢查。
如果您以前使用過 webview,您可能還記得必須使用 Developer: Open Webview Developer Tools 命令來檢查 webview 的內容。這將為您的 webview 開啟一個新的開發人員工具面板。

使用 <iframe> 支援的 webview,您可以改為使用 VS Code 的標準開發人員工具(Developer: Toggle Developer Tools)來檢查 webview。

這使得檢查多個 webview 變得容易。當您的 webview 消失時,開發人員工具也不再關閉。
此外,webview 內部發生的異常和控制檯訊息現在列印在頂級開發人員工具控制檯中。

您還可以使用開發人員工具在 webview 的上下文中評估表示式。使用 Developer: Toggle Developer Tools 開啟 VS Code 的開發工具後,開啟控制檯,然後從上下文選擇器中選擇您的 webview 的 active-frame。

總而言之,能夠使用 VS Code 的標準開發人員工具應該為 webview 提供更好的開發體驗。
CodeActionTriggerKind
CodeActionContext 上的新 triggerKind 屬性跟蹤從 CodeActionProvider 請求程式碼操作的原因。此屬性的可能值為
Invoke- 明確請求程式碼操作,無論是透過鍵盤快捷鍵還是命令。Automatic- 在沒有明確使用者操作的情況下請求程式碼操作。這包括當文件內容更改時請求程式碼操作。
提供程式可以使用 triggerKind 返回不同的結果集,具體取決於請求程式碼操作的方式。例如,自動觸發的重構程式碼操作提供程式可能僅返回當前選擇的精確重構,以限制程式碼操作燈泡顯示的頻率。但是,當明確請求程式碼操作時,同一提供程式可能會自動擴充套件當前選擇,以嘗試顯示使用者在當前位置可能感興趣的所有重構。
更新的 codicons
我們已將以下新圖示新增到我們的 codicon 庫中:
arrow-swapcopydebug-line-by-linefilter-filledperson-addterminal-bashterminal-cmdterminal-debianterminal-linuxterminal-powershellterminal-tmuxterminal-ubuntuwand
![]()
鍵盤繫結標籤顏色
當命令關聯有鍵盤繫結時,會顯示鍵盤繫結標籤。鍵盤繫結標籤的用法包括(但不限於)
- 命令面板
- 鍵盤快捷方式編輯器
- 鍵盤快捷方式記錄器模式
- 擴充套件市場頁面的“功能貢獻”部分
提供以下自定義設定
keybindingLabel.background:鍵盤繫結標籤背景顏色。鍵盤繫結標籤用於表示鍵盤快捷方式。keybindingLabel.foreground:鍵盤繫結標籤前景顏色。鍵盤繫結標籤用於表示鍵盤快捷方式。keybindingLabel.border:鍵盤繫結標籤邊框顏色。鍵盤繫結標籤用於表示鍵盤快捷方式。keybindingLabel.bottomBorder:鍵盤繫結標籤底部邊框顏色。鍵盤繫結標籤用於表示鍵盤快捷方式。
工作區信任擴充套件 API
上一個里程碑中,我們提到了我們一直在進行的工作區信任功能的工作。我們要求擴充套件作者密切關注 問題 #120251 以獲取更新,我們將繼續這樣做。以下資訊和更新也可以在該問題中找到。
在此里程碑中,我們將工作區信任擴充套件 API 從提議狀態轉移到穩定狀態。這使我們能夠釋出將您的擴充套件載入工作區信任指南的第一部分。API 很小,所以快速看一下。
您可以使用 package.json 中的 untrustedWorkspaces 功能宣告您的擴充套件是在不受信任的工作區中提供完全支援、部分支援還是不支援。
以下示例宣告擴充套件在不受信任的工作區中完全受支援。在這種情況下,擴充套件在不受信任的工作區中啟用。
"capabilities": {
"untrustedWorkspaces": {
"supported": true
}
}
下一個示例宣告擴充套件在不受信任的工作區中不受支援。在這種情況下,擴充套件在不受信任的工作區中停用。
"capabilities": {
"untrustedWorkspaces": {
"supported": false
}
}
第三個選項是宣告 limited 支援。當您選擇 limited 選項時,為您提供了三個工具。
首先,如果您的設定可以在工作區中配置,但需要工作區受信任才能應用工作區值,那麼您可以使用 untrustedWorkspaces 物件中的 restrictedConfigurations 陣列屬性包含該設定。這樣做,當您的擴充套件使用 VS Code Workspace Configuration API 讀取這些設定值時,VS Code 將忽略這些受限設定的工作區值。
以下示例宣告在不受信任的工作區中受限的設定。
"capabilities": {
"untrustedWorkspaces": {
"supported": "limited",
"restrictedConfigurations": [
"markdown.styles"
]
}
}
接下來,您還可以使用以下 API 以程式設計方式檢查和偵聽當前工作區是否受信任
export namespace workspace {
/**
* When true, the user has explicitly trusted the contents of the workspace.
*/
export const isTrusted: boolean;
/**
* Event that fires when the current workspace has been trusted.
*/
export const onDidGrantWorkspaceTrust: Event<void>;
}
最後,您可以使用 isWorkspaceTrusted 上下文鍵在您的 when 子句中以宣告方式隱藏命令或檢視。
行動呼籲:請檢視 問題 #120251 中的“工作區信任擴充套件指南”,併為您的擴充套件設定適當的 untrustedWorkspaces.supported 值。
建議的擴充套件 API
每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試使用它們。一如既往,我們希望得到您的反饋。要嘗試提議的 API,您需要執行以下操作:
- 您必須使用 Insiders 版本,因為提議的 API 經常更改。
- 您的擴充套件的
package.json檔案中必須包含以下行:"enableProposedApi": true。 - 將最新版本的 vscode.proposed.d.ts 檔案複製到您專案的源位置。
您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。
原生 notebook
我們正在準備將原生 notebook API 的大部分內容定稿。我們做了許多小的調整,也有一些重大的更改。
Notebook 序列化程式
我們添加了 NotebookSerializer API。它提供了一種將“位元組”轉換為 NotebookData 反之亦然的簡化方法。當您實現此 API 時,您的 notebook 將免費獲得備份、恢復、髒狀態等功能。我們建議擴充套件作者採用這個新 API,而不是使用以前基於內容提供程式的 API。
Notebook 控制器
Notebook 控制器 API 取代了核心提供程式 API。Notebook 控制器提供 notebook 的執行引擎,建立 notebook 輸出。Notebook 可以提供多個控制器或不提供控制器,VS Code 允許使用者選擇控制器。作為回報,擴充套件可以根據其領域模型的需求自由建立、修改和刪除控制器。
Notebook 單元格狀態列
NotebookCellStatusBarItemProvider API 取代了 createCellStatusBarItem 方法。它使擴充套件能夠向每個單元格編輯器底部的狀態列貢獻帶有標籤、圖示和命令的專案。它遵循與許多其他 VS Code 擴充套件 API 相同的提供程式模式。
測試
我們打算在本月敲定新的測試 API 的一個子集,但我們專注於改進並推遲到下個月定稿,在 問題 #122208 中跟蹤。此迭代中進行的 API 更改主要包括
TestProvider重新命名為TestController,其方法也相應重新命名。TestItems 現在是受管理的物件,由vscode.test.createTestItem呼叫。- 測試結果現在透過標準
vscode.test.createTestResults方法建立,該方法可以在TestController.runTests內部或外部呼叫。
隨著這些更改,還增加了一些其他功能,例如顯示原始測試輸出的能力,以及擴充套件指示載入測試中的錯誤的能力。我們相信這些更改為未來的附加功能奠定了堅實的基礎,並且與我們現有的擴充套件 API 更加一致。
我們還建立了一個 Test Adapter Converter 擴充套件,允許任何與現有 Test Explorer UI 擴充套件一起使用的介面卡自動插入到原生 VS Code 測試中。轉換器擴充套件今天可以手動安裝,很快它將與 Test Explorer UI 整合,為現有使用者和介面卡提供無縫遷移到原生測試的路徑。
改進 ArrayBuffers 與 webview 之間的傳輸
在當前版本的 VS Code 中,向 webview 傳送或從 webview 接收型別化陣列有一些怪癖
- 型別化陣列(例如
UInt8Array)序列化效率非常低。當您需要傳輸數兆位元組資料時,這可能會導致效能問題。 - 傳送的型別化陣列在接收端不會重新建立為正確的型別。如果您傳送
UInt8Array,接收方將改為獲取一個具有UInt8Array資料值的通用物件。
雖然這兩個問題都是錯誤,但如果不破壞依賴現有行為的擴充套件,我們也無法修復它們。同時,新編寫的擴充套件絕對不希望出現當前令人困惑且效率低下的行為。
因此,我們決定為現有擴充套件保留現有行為,但讓新擴充套件選擇加入更正確的行為。這是透過檢視擴充套件 package.json 中的 engines 來完成的。
"engines": {
"vscode": "^1.57.0",
}
如果擴充套件目標是 VS Code 1.57+,則型別化陣列應在接收端重新建立,並且大型型別化陣列與 webview 之間的傳輸效率應大大提高。
請測試此行為,如果您發現它未按預期工作或導致現有程式碼意外迴歸,請告訴我們。
TerminalOptions.message
這個新提議允許擴充套件在程序啟動之前在終端中顯示一條訊息。
vscode.window.createTerminal({
message: '\x1b[3;1mSome custom message\x1b[0m'
});
除錯介面卡協議
異常斷點與常規斷點更好地對齊
setExceptionBreakpoints 請求現在可以選擇返回一個 Breakpoints 陣列,類似於其他 set*Breakpoints 請求。這允許客戶端顯示單個異常斷點或過濾器的驗證錯誤訊息。從這個版本開始,VS Code 在斷點檢視中顯示這些錯誤。
重新啟動請求現在可以獲取除錯配置更改
restart 請求現在接受一個新的可選引數 arguments,客戶端可以在其中傳遞啟動或附加配置的最新版本。透過此新增,除錯介面卡可以使用最新的除錯配置值重新啟動會話。
斷開偵錯程式連線並保持被除錯程式掛起
disconnect 請求用於結束除錯會話,並繼續執行被除錯程式或終止它。有一個新選項可以在偵錯程式斷開連線後保持被除錯程式處於掛起狀態。這使得可以使用新會話繼續除錯。
實現此功能的除錯介面卡必須透過 supportSuspendDebuggee 功能宣佈其支援。客戶端可以透過將新的可選引數 suspendDebuggee 傳遞給 disconnect 請求來使用此功能。
工程
Electron 12 更新
在此里程碑中,我們完成了將 Electron 12 捆綁到 VS Code 中的探索,感謝所有參與 Insiders 測試和自託管的人。這是一個主要的 Electron 版本,附帶 Chromium 89.0.4389.114 和 Node.js 14.16.0。
Electron 沙盒進展
在這個里程碑中,我們繼續讓 VS Code 視窗為啟用 Electron 的沙盒和上下文隔離功能做好準備。
具體來說:
- 我們更改了 VS Code 視窗所需的所有環境屬性,使其可在沙盒渲染器中訪問。
- 我們正在探索切換到
iframe元素而不是webview來用於自定義編輯器,方法是在可能的情況下選擇性地啟用iframe。 - 我們能夠將渲染器中所需的一些原生模組或 Node.js 要求移動到其他程序或完全刪除它們。
- 我們使
windows-process-tree具有上下文感知能力。
Service worker 現在用於在 webview 中載入資源
在桌面 VS Code 中,webview 現在使用 service worker 來載入本地資源。web 版本的 VS Code 一直使用 service worker 來執行此操作,但以前桌面 VS Code 使用的是 Electron 協議。
在桌面版本中使用 service worker,可以使 webview 在桌面和 web 之間的行為更好地對齊。它還幫助我們修復了一些棘手的錯誤,並讓我們刪除了大約 1000 行程式碼。
雖然此更改對大多數 webview 擴充套件應該沒有影響,但它可能會在少數邊緣情況下導致問題
-
對 webview 如何載入資源進行假設的擴充套件
如果您的擴充套件直接使用
vscode-webview-resource:協議或硬編碼有關資源 URI 的其他假設,它可能不再起作用。相反,請確保始終使用
.asWebviewUri為資源建立 URI。另請記住,返回 URI 的格式將來可能會更改。 -
將 iframe 的
src設定為指向磁碟上 HTML 檔案的擴充套件service worker 無法看到此請求,因此我們不再支援此功能。web 上已經如此,我們認為這種模式並不常見。
建議的修復方法是不使用 iframe,而是將 HTML 檔案的內容內聯到 webview 中。
程式碼庫中未啟用隱式 override
即將釋出的 TypeScript 4.3 版本新增了一個 override 關鍵字,它告訴編譯器子類中的方法會覆蓋其超類中的方法。還有一個新的 --noImplicitOverride 標誌,它強制所有覆蓋超類中方法的方法都必須使用 override 關鍵字
class Foo {
foo() {...}
}
class SubFoo extends Foo {
foo() { ... } // Error when noImplicitOverride is enabled: missing override specifier
}
override 關鍵字有幾個好處
-
閱讀程式碼時,它會提醒您該方法正在覆蓋基類中的方法
-
嘗試覆蓋基類中不存在的方法會出錯。這有助於捕獲由於重新命名基類中的方法而忘記更新子類中的方法名稱而導致的錯誤。
在此迭代中,我們在程式碼庫中採用了 override 關鍵字,併為核心 VS Code 和所有內建擴充套件啟用了 --noImplicitOverride。雖然我們自動化了大部分工作,但此更改確實幫助我們捕獲了一些我們的程式碼錯誤地重新宣告屬性或具有不清晰繼承模式的情況。
這種新的嚴格規則也應該有助於我們在未來捕獲一些常見的程式設計錯誤。
Windows 安裝程式已合併到 Windows 包管理器中
我們更新了 Windows 包管理器 釋出管道,以釋出我們的 arm64 使用者和系統安裝程式,並採用 v1 包清單架構,使我們能夠將 x86、x64 和 arm64 的使用者和系統安裝程式合併到一個清單中。使用者可以在 安裝 包時使用 --scope 引數,或者使用 winget CLI 設定 來選擇使用者和系統安裝程式。
文件
更新的入門影片
VS Code 入門影片已更新。這些影片涵蓋了從 入門 和 使用擴充套件 到 VS Code 功能(如 除錯 和 版本控制)。
新的 C++ 影片
C++ 擴充套件 團隊建立了一系列入門影片,解釋瞭如何配置 IntelliSense、構建和除錯 C++ 專案。
VS Code 背後的故事和技術
您可以在 這篇採訪 中閱讀有關 VS Code 的歷史和底層技術,採訪物件是 VS Code 工程師 Ben Pasero。Ben 談到了 VS Code 的早期以及使用 Electron 作為應用程式框架使 VS Code 能夠在 macOS、Windows 和 Linux 上執行的感覺。
合作伙伴擴充套件
Azure 機器學習
Azure Machine Learning 擴充套件使您能夠為機器學習工作流建立和管理強大的雲計算資源。憑藉其遠端功能,您可以以安全、可審計和合規的方式無縫連線到計算資源。
值得注意的修復
- 108559:RunInTerminal 不使用工作區設定中的指定整合終端錯誤
- 118282:偵錯程式單步跳過 skipFiles
- 118731:調查如何在非同步開啟瀏覽器視窗和選項卡時避免 Safari 的彈出視窗阻止程式
- 119340:如果啟用了未捕獲的異常斷點,則“不除錯執行”永遠不會終止
- 121347:從備份恢復時檔案出現亂碼
- 119059:自定義文字編輯器:恢復時備份會開啟 2 個編輯器
- 120245:CSS:
!important完成功能損壞 - 120393:改進 webgl 上下文丟失的處理
- 120435:刪除
emmet.extensionsPath有效路徑檢查 - 120882:在資源管理器中貼上檔案不再在編輯器中開啟該檔案
- 121148:除錯下拉選單中顯示重複的啟動配置
- 120277:“在檔案中查詢”窗格中的水平捲軸太小且滾動方向錯誤
感謝
最後但同樣重要的是,衷心感謝以下本月為 VS Code 做出貢獻的人們:
對我們問題跟蹤的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Don Jayamanne (@DonJayamanne)
- Simon Chan (@yume-chan)
- T.Y.M.SAI (@tymsai)
- ArturoDent (@ArturoDent)
- Alexander (@usernamehw)
對 vscode 的貢獻
- @akosyakov (Anton Kosyakov):修復終端建立和初始調整大小之間的競爭條件 PR #121272
- @alanrenmsft (Alan Ren):修復查詢所需節點控制代碼的問題 PR #118091
- @alexmyczko (Alex Myczko):改進 debian control 描述 PR #119160
- @aliasliao (Liao Jinyuan):修復 emmet 問題,即 html 檔案中推廣錯誤的建議 PR #120480
- @andrewbranch (Andrew Branch)
- [typescript-language-features] 支援 TypeScript 4.3 的匯入語句完成 PR #119009
- [html-language-features] 更新 TS 語言服務呼叫以使用 4.3 協議 PR #120362
- [typescript-language-features] 為匯入語句完成新增遙測 PR #121243
- 修復由於相鄰 @ts-expect-error 而遺漏的 Previewer.plain 呼叫 PR #121975
- @anthony-c-martin (Anthony Martin):更新 seti-ui 檔案圖示 PR #119468
- @arnobl (arno):fix(notebook):重做單元格建立不會重新選擇單元格 PR #120086
- @awilkins (Adrian Wilkins):在 Linux 上實現整合終端的選擇貼上 PR #108397
- @benmccann (Ben McCann):修復註釋中的問題編號 PR #121758
- @bourdakos1 (Nick Bourdakos):更新 seti 圖示 PR #120938
- @CanadaHonk
- [themes] 修復 High Contrast Black 預設主題中的 JSON 格式 PR #120761
- [themes] 修復 High Contrast Black 預設主題中的 JSON 格式 (2) PR #120815
- [themes] 修復 High Contrast Black 預設主題中的 JSON 格式 (3) PR #120841
- @conwnet (netcon):fix: 僅在編輯器為只讀時向 textarea dom 新增 readonly 屬性 PR #120503
- @gjsjohnmurray (John Murray)
- fix #120485 當沒有時間線提供程式時,從資源管理器上下文選單隱藏
Open TimelinePR #120497 - fix-120578 未停止時不要提供 callstack step-in/over/out PR #120581
- fix #121509 兩個 API 命令結果的文件錯誤 PR #121511
- fix #120485 當沒有時間線提供程式時,從資源管理器上下文選單隱藏
- @hantatsang (Sang)
- markdown-language-features: 修復 Windows 預覽連結 Uri PR #120090
- 新增 emmet 自閉合縮寫支援 PR #120311
- @jeanp413 (Jean Pierre)
- 修復 scss 中的 emmet 完成 PR #118666
- 修復問題窗格忽略
files.exclude選項 PR #119040 - 修復簡單瀏覽器圖示在 firefox 中損壞 PR #120275
- 修復拆分設定編輯器 JSON 中水平捲軸太窄 PR #121027
- 修復無法預覽帶有特殊字元 '#'、'%' 或 '?' 的影像的迴歸 PR #121874
- @Jolg42 (Joël Galeran):重構 npm 擴充套件以僅使用 npm PR #120317
- @joyceerhl (Joyce Er):為 notebook markdown 單元格新增缺失的 padding-bottom PR #122505
- @KapitanOczywisty:更新 PHP 語法 PR #120339
- @Kingwl (Wenlu Wang):新增 next/prev conflicts PR #97613
- @leemun1 (Mike Lee):feat: 為 markdown 新增對額外環繞對的支援 (#_119982) PR #121698
- @lf- (Jade):改進擴充套件配置架構驗證錯誤的報告 PR #120457
- @limitedmage (Juliana Peña):修復顯示和隱藏 suggestWidget 中的競爭條件 PR #121396
- @LuisPeregrinaIBM2:wsl -l -q,刪除標題和預設標記 PR #120382
- @nan0tube (Yongming Lai):識別常用原始檔為 shellscript PR #121373
- @plainerman (Michael Plainer):新增對停用自動更新已停用擴充套件的支援 PR #113155
- @PooyaZv (Pooya Vakeely):新增 cuda-cpp lang id、語法和問題匹配器 PR #119444
- @qchateau (Quentin Chateau):format modified: 格式化具有空格更改的行 PR #119021
- @sdegutis (Steven Degutis):使錯誤訊息更清晰 PR #121339
- @sokolovstas (Stanislav):修復 eslint-stylish 問題匹配器中的檔案位置模式 PR #117576
- @solomatov (Konstantin Solomatov):在 ext host IPC 超時時終止 PR #122399
- @stoyannk (Stoyan Nikolov):修復了錯誤的變數名隱藏導致擴充套件配置檔案的問題… PR #120054
- @timmaffett (Tim Maffett): 修復並擴充套件了除錯控制檯對大多數 ANSI SGR 程式碼的支援 PR #120891
- @vinku: Emmet: “選擇下一個/上一個專案”不適用於 script 標籤。 PR #118842
- @wdesgardin (William Desgardin): feat: 為 markdown 預覽新增排版選項 PR #119641
- @yannickowow (Yanis HAMITI): 在“斷點”檢視中顯示當前資料斷點訪問型別 (#_119588) PR #119817
對 vscode-eslint 的貢獻
- @JoshuaKGoldberg (Josh Goldberg): 實現 eslint.rules.customizations - 帶有 overrides PR #1164
對 vscode-json-languageservice 的貢獻
- @KapitanOczywisty
- @mifieldxu (Mifield): 使用 minimatch 改進 glob 匹配 PR #93
- @ssbarnea (Sorin Sbarnea): 升級依賴項 PR #95
對 vscode-vsce 的貢獻
對 debug-adapter-protocol 的貢獻
- @jarpoole (Jared Poole): ESP-IDF 除錯介面卡 PR #190
- @vadimcn: 新增對 JSON 模式的直接引用 PR #185
對 vscode-js-debug 的貢獻
- @millerds (Darren Miller): 字串支援 chakracore PR #979
- @swissmanu (Manuel Alabor): CDP 代理:允許其他擴充套件重用 CDP 連線 PR #964
對 vscode-generator-code 的貢獻
- @felipecrs (Felipe Santos): 從搜尋結果中隱藏 dist 資料夾 PR #260
- @miles-crighton (Miles Crighton): fix: 更新令牌檢查命令 PR #249
- @noah-vdv (Noah van der Veer): fix 行 162 上的 'orther' 拼寫錯誤 PR #255

