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 團隊本月一直在忙於一些較長時間的更新,因此請檢視預覽功能部分,瞭解即將推出的內容。以下是此版本中包含的一些亮點
- 改進的懸停反饋 - 幫助您快速找到可點選的編輯器操作。
- 終端配置檔案改進 - 建立自定義預設終端配置檔案。
- 偵錯程式內聯值 - 在除錯會話期間內聯顯示變數值。
- 筆記本 KaTeX 支援 - 筆記本 Markdown 單元格中的數學支援。
- 開發容器卷檢視 - 管理 Docker 容器中掛載的卷。
- winget 安裝 - VS Code 可透過 Windows 包管理器獲得。
- 新的入門影片 - 介紹 VS Code 入門以及使用 C++ 的影片。
- 終端標籤頁預覽 - 首次瞭解如何使用新的標籤頁檢視管理開啟的終端。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
太平洋時間 5 月 11 日星期二上午 8 點(倫敦時間下午 4 點)在 VS Code 團隊直播加入我們,觀看此版本中新功能的演示,並向我們即時提問。
內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。
工作臺
改進的操作懸停反饋
我們更改了工作臺周圍操作的滑鼠懸停反饋,以提供更好的可點選操作使用者體驗。
無標題編輯器提示
我們注意到許多新使用者不知道必須設定語言才能獲得完整的 VS Code 語言支援。為了解決這個問題,我們為無標題編輯器引入了一個提示,以幫助使用者設定正確的語言模式。無標題提示可能對高階使用者沒有幫助,因此您開始輸入時它會立即消失,或者您可以選擇不再顯示以不再顯示該提示。
預設自定義編輯器和筆記本解析
如果您有兩個編輯器都宣告它們應該是您的資源(例如,影像檢視器和影像編輯器)的預設編輯器,您將收到一個提示來解決衝突。
在下面的短影片中,使用者打開了一個 PNG 檔案,該檔案與兩個編輯器關聯。通知讓使用者繼續使用 Luna Paint 影像編輯器或配置新的預設值,他們這樣做了並開始使用二進位制十六進位制編輯器。
更新的自定義對話方塊
我們更新了自定義對話方塊樣式,您可以透過 "window.dialogStyle": "custom"
啟用。VS Code 現在會使背景變暗,以便更好地聚焦於對話方塊,並且當有多個操作時,還會使用輔助按鈕樣式。
產品圖示主題:Fluent Icons
您可以使用以下顏色標記來主題化輔助按鈕樣式
button.secondaryBackground
button.secondaryForeground
button.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 版。
終端標籤頁中沒有“任務”字首
使用新的終端標籤頁功能時,“任務”字首將不再新增到終端名稱中。相反,任務由“工具”圖標表示,以便更好地利用可用空間。
更好地匹配 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
時,對於支援“改進內聯值”的語言,內聯值會自動啟用。
Java 偵錯程式擴充套件是首批採用該 API 的偵錯程式擴充套件之一。在下面的螢幕截圖中,Java 變數的準確值顯示在其使用旁邊。
您可以使用 PowerShell 內聯值支援擴充套件在除錯 PowerShell 指令碼時獲取內聯值。
斷點命中時顯示除錯檢視
debug.openDebug
設定的預設值現在是 openOnDebugBreak
,以便在每次命中斷點時,VS Code 都會開啟除錯檢視。除錯檢視也在首次會話啟動時顯示。
JavaScript 除錯
像往常一樣,完整的更改列表可以在 vscode-js-debug 變更日誌中找到。
改進的斷點診斷工具可發現性
根據啟發式,如果 VS Code 檢測到使用者在繫結斷點時可能遇到問題,它將顯示一條通知,建議開啟斷點診斷工具。
此提示最初只會對一部分使用者可見,因為我們正在試驗其有效性和斷言性。
私有類欄位支援
私有類欄位現在在偵錯程式中可見且可以檢查。
Notebook
切換行號
您現在可以從單元格工具欄暫時切換當前會話中單元格的行號,或者透過 notebook.lineNumbers
設定更改所有筆記本的行號可見性。
每個檔案型別的單元格工具欄位置
單元格工具欄位置現在可以透過 notebook.cellToolbarLocation
設定按檔案型別自定義。例如,您可以將GitHub Issue筆記本的單元格工具欄放在右側,但將其放在 Jupyter 筆記本的左側。
Markdown 單元格中的數學支援
您現在可以在筆記本 Markdown 單元格中使用數學公式
VS Code 使用 KaTeX 渲染公式。有兩種方法可以將數學公式嵌入 Markdown 單元格中
- 使用單個美元符號:
$...$
。這會建立一個內聯數學公式。 - 使用雙美元符號:
$$...$$
。這會建立一個居中、塊級數學公式。
我們使用實驗性筆記本標記渲染器 API 實現了數學支援,該 API 仍在開發中。我們最終的目標是使用此 API 允許擴充套件在筆記本中擴充套件 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)
作為此版本的一部分,我們正在預覽一個新的內建擴充套件,遠端儲存庫 (RemoteHub),它允許您直接從 VS Code 中即時瀏覽、搜尋、編輯和提交到任何 GitHub 儲存庫,而無需克隆或在本地擁有儲存庫。它目前僅在 VS Code 的 Insiders 版本中可用。
入門
要開始使用,請從命令面板執行開啟遠端儲存庫...命令。從那裡,您可以貼上任何 GitHub URL,或選擇搜尋特定的儲存庫或拉取請求。
一旦您輸入 URL 或選擇儲存庫或拉取請求,VS Code 將為該儲存庫開啟一個新工作區。狀態列左側的遠端狀態指示器顯示連線的遠端提供商名稱(例如 GitHub),用於遠端儲存庫。
功能
- 無需克隆或在本地擁有儲存庫即可即時開啟任何 GitHub 儲存庫。
- 輕鬆編輯和貢獻到任何 GitHub 儲存庫 - 直接將您的更改提交到 GitHub,或開啟拉取請求。
- 在其他環境中繼續 - 透過繼續...命令(可從命令面板或遠端指示器快速選擇選單訪問)。
- 在本地克隆儲存庫
- 將儲存庫克隆到容器中 - 需要 開發容器 擴充套件
- 提供與本地儲存庫類似的使用者介面(*請參閱下面的“限制”)。
- 檔案管理器 - 開啟、複製、移動、重新命名和刪除檔案和資料夾
- 搜尋 - 快速全文搜尋*
- 原始碼管理 - 暫存和提交您的更改,以及許多其他原始碼管理操作
- 時間線檢視 - 檢視具有差異支援的檔案歷史記錄
- 快速開啟 - 快速查詢要開啟的檔案
- 遠端指示器 - 顯示遠端儲存庫連線到的提供商(例如 GitHub)
- 同時處理不同的分支 - 每個遠端分支都被視為一個單獨的工作樹(在 Git 術語中),這意味著您所做的任何更改都隔離在該分支中。您無需隱藏更改即可切換到新分支以檢出 PR 或開始新工作項。當您返回到上一個分支時,您的更改仍將存在。
- 安裝 GitHub 拉取請求和問題 擴充套件,並快速檢視、探索和檢出拉取請求,檢視並開始處理問題。
限制
- 有限的語言智慧 - 許多語言伺服器尚未理解這種虛擬化環境。TypeScript 支援遠端儲存庫的單個檔案智慧。
- 有限的擴充套件支援 - 與語言伺服器一樣,許多擴充套件不適用於遠端儲存庫。擴充套件可以選擇退出,並且不會為虛擬工作區啟用。有關更多詳細資訊,請參閱下面的擴充套件創作部分。
- 搜尋 - 全文搜尋需要預構建的索引才能進行精確文字匹配,否則將回退到 GitHub 的模糊預設分支原生搜尋。
- 終端 - 不支援。任何開啟的終端都將在您的本地檔案系統上。
- 除錯 - 不支援。
- 任務 - 不支援。
告訴我們您的想法
我們非常高興您能試用 遠端儲存庫 (RemoteHub),並期待您的想法和反饋。我們才剛剛開始這段旅程,因此隨著我們繼續開發,功能集將不斷增長,限制將不斷縮小。我們還將擴充套件支援的提供商集。GitHub 是我們支援的第一個提供商,Azure Repos 即將推出。
TypeScript 4.3
此版本繼續改進我們對即將釋出的 TypeScript 4.3 版本的支援。您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.3 中新語言功能和改進的更多資訊。以下是它啟用的一些編輯器改進
- 支援
override
。還有用於新增override
關鍵字的快速修復。 - 匯入語句完成。這類似於自動匯入,只是您正在鍵入匯入語句本身。
- JSDoc
@link
標籤支援。
要開始使用 TypeScript 4.3 夜間構建,只需安裝 TypeScript Nightly 擴充套件。請分享您的反饋,如果您在使用 TypeScript 4.3 時遇到任何錯誤,請告訴我們。
工作區信任
在上一個里程碑的釋出說明中,我們分享了我們在工作區信任方面的工作,特別是針對擴充套件作者。在此里程碑中,我們在擴充套件 API 和使用者體驗方面都取得了巨大進展。儘管如此,此版本仍將停用工作區信任,但我們希望您試用並提供反饋。
您可以使用以下設定 security.workspace.trust.enabled
啟用該功能。啟用後,當您在 VS Code 中開啟資料夾時,您將看到以下對話方塊。
此對話方塊對於允許使用者儘早做出決定並瞭解其決定的影響非常重要。一旦您瞭解該功能,您可能希望使用 security.workspace.trust.startupPrompt
設定自定義何時顯示對話方塊。
您可以在問題 #106488中關注工作區信任的開發並提供反饋。
對擴充套件的貢獻
遠端開發
遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
1.56 中的功能亮點包括
- 當您在容器卷中克隆儲存庫時,新的卷檢視。
- 連線到遠端時,本地終端警告。
- 使用 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
大多數網頁檢視現在使用 iframe
自從最初引入網頁檢視 API 以來,我們一直使用 Electron 的網頁檢視標籤來實現網頁檢視。然而,在網頁上,VS Code 的網頁檢視改用標準的 <iframe>
元素實現,因為 <webview>
不可用。
我們一直在探索將 VS Code 的桌面版本遷移到使用 <iframe>
支援的網頁檢視,因為此更改將為擴充套件提供桌面和網頁之間更一致的網頁檢視環境。從 <webview>
遷移也將有助於我們的 Electron 沙盒工作。
在這次迭代中,我們已將大多數網頁檢視切換為使用 iframe。<webview>
標籤現在僅用於啟用查詢小部件的網頁檢視,我們計劃在進行更多工程工作後也將它們遷移到使用 iframe。
此更改不應引起問題,但在某些角落情況下 <iframe>
和 <webview>
元素的行為有所不同。請務必對您的擴充套件進行快速測試,以驗證一切是否按預期工作。
更輕鬆地檢查網頁檢視
<iframe>
支援的網頁檢視的一個明顯好處是它們現在更容易檢查。
如果您以前使用過網頁檢視,您可能還記得必須使用開發者:開啟網頁檢視開發者工具命令來檢查網頁檢視的內容。這將為您的網頁檢視開啟一個新的開發者工具面板。
使用 <iframe>
支援的網頁檢視,您可以使用 VS Code 的標準開發者工具(開發者:切換開發者工具)來檢查網頁檢視。
這使得檢查多個網頁檢視變得容易。當您的網頁檢視消失時,開發者工具也不會再關閉。
此外,網頁檢視中發生的異常和控制檯訊息現在會列印在頂層開發者工具控制檯中。
您還可以使用開發者工具在網頁檢視的上下文中評估表示式。使用開發者:切換開發者工具開啟 VS Code 的開發者工具後,開啟控制檯,然後從上下文選擇器中選擇您的網頁檢視的 active-frame
。
總的來說,能夠使用 VS Code 的標準開發者工具應該為網頁檢視提供更好的開發體驗。
CodeActionTriggerKind
CodeActionContext
上的新 triggerKind
屬性跟蹤從 CodeActionProvider
請求程式碼操作的原因。此屬性的可能值為
Invoke
- 程式碼操作是顯式請求的,透過鍵盤快捷鍵或命令。Automatic
- 程式碼操作是在沒有明確使用者操作的情況下請求的。這包括在文件內容更改時請求程式碼操作。
提供者可以使用 triggerKind
根據程式碼操作的請求方式返回不同的結果集。例如,自動觸發的重構程式碼操作提供者可能只返回精確當前選擇的重構,以限制程式碼操作燈泡出現的頻率。但是,當顯式請求程式碼操作時,同一提供者可能會自動展開當前選擇,以嘗試顯示使用者在當前位置可能感興趣的所有重構。
更新的 codicons
我們已將以下新圖示新增到我們的 codicon 庫中:
arrow-swap
copy
debug-line-by-line
filter-filled
person-add
terminal-bash
terminal-cmd
terminal-debian
terminal-linux
terminal-powershell
terminal-tmux
terminal-ubuntu
wand
鍵繫結標籤顏色
當命令關聯有鍵繫結時,會顯示鍵繫結標籤。鍵繫結標籤的用法包括(但不限於)
- 命令面板
- 鍵盤快捷方式編輯器
- 鍵盤快捷方式錄製器模態視窗
- 擴充套件市場頁面的“功能貢獻”部分
以下自定義項可用
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 工作區配置 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 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。
原生筆記本
我們正在準備將大部分原生筆記本 API 定稿。我們已經進行了許多小調整,也有一些重大更改。
筆記本序列化器
我們添加了 NotebookSerializer
API。它提供了一種簡化的方法,可以將“位元組”轉換為 NotebookData
,反之亦然。當您實現此 API 時,您的筆記本將免費獲得備份、還原、髒狀態等功能。我們建議擴充套件作者採用此新 API,而不是使用以前基於內容提供程式的 API。
筆記本控制器
筆記本控制器 API 取代了核心提供者 API。筆記本控制器提供筆記本的執行引擎,用於建立筆記本輸出。筆記本可以提供多個控制器或不提供任何控制器,並且 VS Code 允許使用者選擇控制器。反過來,擴充套件可以自由建立、修改和刪除控制器,以滿足其領域模型的需求。
筆記本單元格狀態列
NotebookCellStatusBarItemProvider
API 取代了 createCellStatusBarItem
方法。它使擴充套件能夠向每個單元格編輯器底部的狀態列貢獻帶有標籤、圖示和命令的專案。它遵循與許多其他 VS Code 擴充套件 API 相同的提供程式模式。
測試
我們原計劃本月完成一部分新的測試 API,但我們專注於完善並推遲到下個月完成,並在問題 #122208中跟蹤。此迭代中進行的 API 更改主要是
TestProvider
已重新命名為TestController
,其方法也相應重新命名。TestItem
s 現在是由vscode.test.createTestItem
呼叫的託管物件。- 測試結果現在透過標準
vscode.test.createTestResults
方法建立,該方法可以在TestController.runTests
內部或外部呼叫。
這些更改還帶來了一些附加功能,例如顯示原始測試輸出的能力以及擴充套件指示載入測試中的錯誤。我們相信這些更改為未來的附加功能提供了堅實的基礎,並與我們現有的擴充套件 API 更加緊密地結合。
我們還建立了一個 測試介面卡轉換器 擴充套件,允許任何與現有 測試資源管理器 UI 擴充套件一起工作的介面卡自動插入到原生 VS Code 測試中。轉換器擴充套件今天可以手動安裝,很快它將與測試資源管理器 UI 整合,為現有使用者和介面卡提供無縫遷移到原生測試的路徑。
改進 ArrayBuffer 與網頁檢視之間的傳輸
在當前版本的 VS Code 中,向網頁檢視傳送或從網頁檢視接收型別化陣列有一些奇怪之處
- 型別化陣列(如
UInt8Array
)的序列化效率非常低。當您需要傳輸許多兆位元組的資料時,這可能會導致效能問題。 - 傳送的型別化陣列在接收端不會以正確的型別重新建立。如果您傳送
UInt8Array
,接收者會得到一個具有UInt8Array
資料值的通用物件。
雖然這兩個問題都是錯誤,但我們無法在不潛在地破壞依賴現有行為的擴充套件的情況下修復它們。同時,新編寫的擴充套件沒有任何理由想要當前令人困惑且效率低下的行為。
因此,我們決定保留現有擴充套件的現有行為,但讓新擴充套件選擇更正確的行為。這是透過檢視擴充套件的 package.json
中的 engines
來完成的。
"engines": {
"vscode": "^1.57.0",
}
如果擴充套件目標是 VS Code 1.57+,則型別化陣列應該在接收端重新建立,並且大型型別化陣列與網頁檢視之間的傳輸應該效率更高。
請測試此行為,如果您發現它不符合預期或導致現有程式碼意外迴歸,請告訴我們。
TerminalOptions.message
這個新的提案允許擴充套件在程序啟動之前在終端中顯示一條訊息。
vscode.window.createTerminal({
message: '\x1b[3;1mSome custom message\x1b[0m'
});
除錯介面卡協議
異常斷點與常規斷點更好地對齊
setExceptionBreakpoints
請求現在可以選擇返回一個 Breakpoint
陣列,類似於其他 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 視窗所需的所有環境屬性,使其可以在沙盒渲染器中訪問。
- 我們正在探索將自定義編輯器從
webview
切換到iframe
元素,透過在某些情況下選擇性地啟用iframe
。 - 我們能夠將渲染器中一些原生模組或 Node.js 需求移動到其他程序或完全刪除它們。
- 我們使
windows-process-tree
具有上下文感知能力。
服務工作執行緒現在用於在網頁檢視中載入資源
在桌面版 VS Code 中,網頁檢視現在使用服務工作執行緒載入本地資源。網頁版 VS Code 一直使用服務工作執行緒來實現此功能,但以前桌面版 VS Code 使用的是 Electron 協議。
在桌面版中使用服務工作執行緒,我們可以更好地協調桌面和網頁之間網頁檢視的行為。它還幫助我們修復了一些棘手的錯誤,並讓我們刪除了大約 1000 行程式碼。
雖然此更改對大多數網頁檢視擴充套件應該沒有影響,但它可能會在少數邊緣情況下引起問題
-
對網頁檢視如何載入資源做出假設的擴充套件
如果您的擴充套件直接使用
vscode-webview-resource:
協議或硬編碼有關資源 URI 的其他假設,它可能不再起作用。相反,請確保始終使用
.asWebviewUri
為資源建立 URI。另請記住,返回的 URI 格式將來可能會更改。 -
將 iframe 的
src
設定為指向磁碟上的 HTML 檔案的擴充套件服務工作執行緒無法看到此請求,因此我們不再支援此功能。在網路上已經如此,我們認為這種模式並不常見。
推薦的修復方法是不使用 iframe,而是將 HTML 檔案的內容內聯到網頁檢視中。
程式碼庫中未啟用隱式覆蓋
即將釋出的 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 機器學習擴充套件使您能夠為機器學習工作流建立和管理強大的雲計算資源。憑藉其遠端功能,您可以無縫地連線到您的計算資源,以安全、可審計和合規的方式。
值得注意的修復
- 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 控制描述 PR #119160
- @aliasliao (Liao Jinyuan):修復 emmet 在 html 檔案中推廣錯誤建議的問題 PR #120480
- @andrewbranch (Andrew Branch)
- [typescript-language-features] 支援 TypeScript 4.3 的匯入語句補全 PR #119009
- [html-language-features] 更新 4.3 協議的 TS 語言服務呼叫 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):修復(筆記本):重做單元格建立不會重新選擇單元格 PR #120086
- @awilkins (Adrian Wilkins):在 Linux 上實現整合終端的選擇貼上 PR #108397
- @benmccann (Ben McCann):修復註釋中的問題編號 PR #121758
- @bourdakos1 (Nick Bourdakos):更新 seti 圖示 PR #120938
- @CanadaHonk
- [themes] 修復高對比度黑色預設主題中的 JSON 格式 PR #120761
- [themes] 修復高對比度黑色預設主題中的 JSON 格式 (2) PR #120815
- [themes] 修復高對比度黑色預設主題中的 JSON 格式 (3) PR #120841
- @conwnet (netcon):修復:僅當編輯器為只讀時才向 textarea dom 新增只讀屬性 PR #120503
- @gjsjohnmurray (John Murray)
- 修復 #120485 當沒有時間線提供者時從檔案管理器上下文選單隱藏
Open Timeline
PR #120497 - 修復 120578 未停止時不要提供呼叫堆疊單步進入/跳過/跳出 PR #120581
- 修復 #121509 兩個 API 命令結果的文件錯誤 PR #121511
- 修復 #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):為筆記本 markdown 單元格新增缺失的 padding-bottom PR #122505
- @KapitanOczywisty:更新 PHP 語法 PR #120339
- @Kingwl (Wenlu Wang):新增下一個/上一個衝突 PR #97613
- @leemun1 (Mike Lee):feat:為 markdown 新增對附加環繞對的支援 (#_119982) PR #121698
- @lf- (Jade):改進擴充套件配置架構驗證錯誤報告 PR #120457
- @limitedmage (Juliana Peña):修復顯示和隱藏建議小部件中的競爭條件 PR #121396
- @LuisPeregrinaIBM2:wsl -l -q,刪除標題和預設標記 PR #120382
- @nan0tube (Yongming Lai):將常用原始檔識別為 shellscript PR #121373
- @plainerman (Michael Plainer):新增支援以停用停用擴充套件的自動更新 PR #113155
- @PooyaZv (Pooya Vakeely):新增 cuda-cpp 語言 ID、語法和問題匹配器 PR #119444
- @qchateau (Quentin Chateau):格式已修改:格式化具有空格更改的行 PR #119021
- @sdegutis (Steven Degutis):使錯誤訊息更清晰 PR #121339
- @sokolovstas (Stanislav):修復 eslint-stylish 問題匹配器中的檔案位置模式 PR #117576
- @solomatov (Konstantin Solomatov):在擴充套件主機 IPC 超時時終止 PR #122399
- @stoyannk (Stoyan Nikolov):修復錯誤的變數名遮蔽導致擴充套件的配置檔案... PR #120054
- @timmaffett (Tim Maffett):修復並擴充套件了除錯控制檯對大多數 ANSI SGR 程式碼的支援 PR #120891
- @vinku:Emmet:選擇下一個/上一個專案不適用於指令碼標籤。 PR #118842
- @wdesgardin (William Desgardin):feat:為 markdown 預覽新增排版選項 PR #119641
- @yannickowow (Yanis HAMITI):在“斷點”檢視中顯示當前 DataBreakpoint 訪問型別 (#_119588) PR #119817
對 vscode-eslint
的貢獻
- @JoshuaKGoldberg (Josh Goldberg):實現 eslint.rules.customizations - 帶覆蓋 PR #1164
對 vscode-json-languageservice
的貢獻
- @KapitanOczywisty
- @mifieldxu (Mifield):改進使用 minimatch 的全域性匹配 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):修復:更新令牌檢查命令 PR #249
- @noah-vdv (Noah van der Veer):修復第 162 行的 'orther' 拼寫錯誤 PR #255