2020 年 2 月 (版本 1.43)
更新 1.43.1:此更新修復了這些問題。
更新 1.43.2:此更新修復了這些問題。
下載:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap
歡迎使用 Visual Studio Code 2020 年 2 月版。此版本中有許多更新,我們希望您會喜歡,其中一些主要亮點包括:
- 搜尋編輯器 - 在全尺寸編輯器中搜索並儲存全域性搜尋結果。
- 可拖動邊角 - 透過拖動邊角輕鬆更改編輯器佈局。
- Linux 螢幕閱讀器支援 - VS Code 現在支援 Orca 螢幕閱讀器。
- 小地圖尺寸選項 - 新選項可適應或填充小地圖垂直佈局。
- 列選擇模式 - 列模式切換讓您可以快速選擇文字塊。
- 選擇時顯示空格 - 僅在選定文字中渲染空格字元。
- 轉換為模板字串重構 - 將字串連線轉換為 JavaScript/TypeScript 模板字串。
- JS/TS 呼叫層次結構檢視 - 檢視函式的所有呼叫或被呼叫,並深入瞭解呼叫者的呼叫者。
- 遠端開發 - 支援 Windows 和 macOS SSH 主機、SSH 連線共享。
- 設定同步預覽 - 設定同步讓您可以在不同機器之間共享設定和鍵盤快捷鍵。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
內部人員預覽版: 想盡快試用新功能嗎?您可以下載每晚內部人員預覽版並立即試用最新更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code!
工作臺
搜尋編輯器
經過幾次在 Insiders 版本上穩定化後,我們推出了搜尋編輯器,它允許您在全尺寸編輯器中檢視工作區搜尋結果,並帶有語法高亮和可選的周圍上下文行。這在一段時間內一直是備受請求的功能。
以下是搜尋“SearchEditor”一詞的示例,其中包含匹配前後兩行文字作為上下文。
在搜尋編輯器中,可以使用“轉到定義”操作導航到結果,例如 F12 在當前編輯器組中開啟源位置,或 ⌘K F12 (Windows、Linux Ctrl+K F12) 在側面編輯器中開啟位置。此外,雙擊也可以選擇開啟源位置,這可以透過 search.searchEditor.doubleClickBehaviour
設定進行配置。
您可以使用“搜尋編輯器:開啟新搜尋編輯器”命令或使用搜索檢視頂部的“開啟新搜尋編輯器”按鈕開啟新的搜尋編輯器。此外,您還可以使用結果樹頂部的“在編輯器中開啟”連結或“搜尋編輯器:在編輯器中開啟結果”命令將現有結果從搜尋檢視複製到搜尋編輯器。
注意:您可以試用實驗性的 搜尋編輯器:應用更改 擴充套件以將您在搜尋編輯器中所做的編輯同步回原始檔。
可拖動邊角
您知道可以透過抓取和拖動兩個正交邊角之間的交叉點來同時調整它們的大小嗎?這對於編輯器邊角已經有效,現在它也適用於編輯器和檢視之間的邊緣。
主題:GitHub Sharp,字型:Fira Code
公證過的 macOS 構建
適用於 macOS 的 Visual Studio Code 現已透過 Apple 公證,因此您應該不再看到以下對話方塊:
有關更多詳細資訊,請閱讀調查問題和Apple 的開發人員文件。
進度通知
從本版本開始,指示長時間執行操作的通知行為略有不同。
- 它們不再提供通用的“關閉”按鈕,因為這會給人一種操作已被取消的錯誤印象。您仍然可以按 Esc 鍵隱藏通知。
- 每當通知在操作仍在進行時被隱藏,通知都會在狀態列中指示其操作的進度。
後一項更改有助於您在關閉通知後瞭解操作仍在後臺繼續執行(例如長時間執行的儲存操作)。
在選擇“取消”按鈕之前,操作仍在執行。
主題:Dracula 官方,字型:Fira Code
無標題編輯器
新的設定 workbench.editor.untitled.labelFormat
允許您控制無標題編輯器是否應使用檔案內容作為標題。可能的值為 content
或 name
。將 'workbench.editor.untitled.labelFormat': 'name'
配置為以前的行為,其中無標題編輯器將具有短標題,例如 Untitled-1。
當將文字貼上到無標題編輯器中時,VS Code 現在會自動嘗試從文字的第一行檢測語言模式。例如,如果第一行包含典型的 XML 頭部 <?xml version="1.0" encoding="UTF-8"?>
,貼上 XML 將在貼上時自動設定 XML 模式。
透過應用程式連結開啟工作區
VS Code 支援透過協議連結開啟檔案(例如 vscode://file/<file-path>
)。在此里程碑中,我們已將支援擴充套件到包括開啟資料夾或工作區。
資料夾或工作區的語法與檔案相同。
vscode://file/<path>
vscode-insiders://file/<path>
歡迎檢視
歡迎檢視是工作臺的新增功能,它允許檢視在沒有有意義的內容可顯示時,為使用者建立內容或配置 VS Code 提供初始體驗。一些檢視已經採用了此基礎結構,例如檔案資源管理器,它將提供開啟資料夾或克隆 Git 儲存庫以幫助您入門。
主題:GitHub Sharp
原始碼管理歡迎檢視
得益於新的歡迎檢視基礎結構,原始碼管理檢視現在為某些情況提供了更好的體驗,否則它將顯示為空。例如,當未檢測到安裝時,它現在可以指導使用者開啟資料夾或克隆儲存庫或安裝 Git。
主題:GitHub Sharp
編輯器
小地圖尺寸
有一個新設定 editor.minimap.size
,它控制小地圖如何使用垂直空間。
- 當設定為
proportional
(預設值)時,每行在小地圖中獲得一定量的垂直空間,具體取決於editor.minimap.scale
。例如,在高 DPI 顯示器上,配置的比例為1
(預設值),每行在小地圖中獲得 4 畫素。因此,對於一個 100 行的檔案,小地圖中渲染的行高為 400 畫素,對於一個 1000 行的檔案,為 4000 畫素。這意味著對於大檔案,小地圖也會隨著當前檔案的滾動而滾動。 - 當設定為
fit
時,小地圖的高度被限制為不超過編輯器高度。因此,如果檔案有很多行,它們將被取樣,並且只有一部分將在小地圖中渲染,這樣就不需要小地圖滾動了。 - 當設定為
fill
時,小地圖的高度始終是編輯器高度。對於大檔案,這也是透過取樣行實現的,但對於小檔案,這是透過為每行保留更多垂直空間(拉伸行)來實現的。
在這裡,尺寸從 proportional
更改為 fit
,然後在一個較小的檔案中,從 fit
更改為 fill
。
小地圖背景和滑塊顏色
現在有新的顏色可以自定義小地圖及其滑塊。其中一種新顏色是 minimap.background
,當顏色定義為透明(降低 #RRGGBBAA Alpha 通道)時,小地圖將透明渲染。
{
"workbench.colorCustomizations": {
"minimap.background": "#00000055"
}
}
列選擇模式
有一個新的全域性切換,可以透過“選擇”>“列選擇模式”選單項訪問。一旦進入此模式,如狀態列所示,滑鼠手勢和箭頭鍵將建立列選擇。
您也可以從狀態列停用列選擇模式。
選擇時渲染空格
editor.renderWhitespace
設定的預設值已從 none
更改為 selection
。預設情況下,空格字元現在將在高亮文字上渲染。
在此處,在選定區域中顯示製表符和空格字元。
預覽中的定義連結
現在對“轉到定義”滑鼠手勢的行為有了更多控制。預設情況下,透過滑鼠“轉到定義”會開啟一個單獨的編輯器,但使用新設定 editor.definitionLinkOpensInPeek
為 true
,該手勢將在預覽檢視中開啟。
在摺疊行上的任意位置展開
有一個新設定“編輯器:在行末單擊後展開”(editor.unfoldOnClickAfterEndOfLine
),它控制當您單擊摺疊行右側的空白區域(在 ...
之後)時會發生什麼。當設定為 true
時,您可以在摺疊行文字後的任意位置單擊,而無需擔心精確選擇省略號(...
)。預設情況下,此選項是關閉的。
跨多個檔案撤消文字編輯
當撤消重新命名或影響多個檔案的程式碼操作時,VS Code 現在允許您撤消所有受影響檔案中的更改。
撤消跨檔案編輯時將顯示提示。
注意:檔案操作(例如重新命名檔案)尚不支援。例如,使用跨檔案撤消尚不支援在 Java 中重新命名類名(其中檔名也會被重新命名)。
多個不同顏色的標尺
現有的 editor.rulers
設定已擴充套件,允許定義具有自定義顏色的標尺。在以下螢幕截圖中,第 80 列有一個洋紅色標尺,第 90 列有一個紅色標尺。
{
"editor.rulers": [
{ "column": 80, "color": "#ff00ff" },
{ "column": 90, "color": "#ff0000" }
]
}
編輯器頂部和底部填充
現在可以使用 editor.padding.top
和 editor.padding.bottom
在編輯器的頂部或底部保留空白區域(畫素數)。
這是頂部填充 50 畫素的編輯器。
{
"editor.padding.top": 50
}
滾動主要軸
當使用現代觸控板嘗試垂直滾動時,檔案通常也會水平滾動。現在有一個新設定 editor.scrollPredominantAxis
(預設為 true),它會阻止“對角線”滾動。這會強制滾動手勢要麼是垂直的,要麼是水平的(根據絕對滾動增量的最高值),但從不對角線。
Linux 上的 Shift+Insert
在 1.42 版本中,Shift+Insert
被修改為從選擇剪貼簿貼上。我們收到了大量反饋,稱這會破壞現有的肌肉記憶,因此我們決定恢復並讓 Shift+Insert
像以前一樣從常規剪貼簿貼上。
輔助功能
Linux 螢幕閱讀器支援
在社群的幫助下,我們一直在努力使 VS Code 在 Linux 上透過 Orca 螢幕閱讀器實現可訪問性。Orca 和 Chromium 仍在積極開發螢幕閱讀器支援,因此要使其完全正常工作,還需要做一些事情:
- 確保使用 Orca 的最新 master 版本。說明可在問題 #91063 中找到。
- 確保在 VS Code 中將設定
"editor.accessibilitySupport": "on"
啟用。您可以透過設定或執行“顯示輔助功能幫助”命令並按 Ctrl+E 來開啟螢幕閱讀器最佳化模式。
啟用該設定後,VS Code 應該可以與 Orca 螢幕閱讀器配合使用。
語言
TypeScript 3.8.3
VS Code 現在捆綁了 TypeScript 3.8.3。此重大更新帶來了對新語言功能的支援,包括 ECMAScript 私有欄位、頂層 await 表示式和 export * as ns 語法,以及許多工具功能和改進。此更新還修復了許多重要錯誤。
您可以在TypeScript 部落格上閱讀有關 TypeScript 3.8 的更多資訊。
轉換為模板字串重構
您可以使用 JavaScript 和 TypeScript 的新“轉換為模板字串”重構,快速將字串連線轉換為模板字串。
JavaScript 和 TypeScript 的呼叫層次結構支援
TypeScript 3.8 帶來了 JavaScript 和 TypeScript 中的呼叫層次結構支援。
支援 http(s) @link JSDoc 內聯標籤
IntelliSense 現在為 http 和 https 連結渲染JS Doc @link 內聯標籤。在下面的示例影像中,請注意 lightbulb menu
的 @link
如何在懸停時渲染。
@link
到 URL 適用於 JavaScript 和 TypeScript,並在懸停、建議詳細資訊和簽名幫助中渲染為可點選的連結。
TypeScript 語義高亮
TypeScript 和 JavaScript 預設啟用語義高亮。語義高亮由 TypeScript 語言伺服器提供,並基於 TextMate 語法高亮之上。預設語法 (TextMate) 高亮器將許多標記分類為 variables
,這些標記現在解析為名稱空間、類、引數等。
語義高亮由以下設定控制:
"editor.semanticHighlighting.enabled": true
JSON 架構
將檔名與架構關聯時,您現在也可以使用排除模式。排除模式以“!”開頭。要匹配,至少一個模式需要匹配,並且最後一個匹配模式不能是排除模式。
"json.schemas": [
{
"fileMatch": [
"/receipts/*.json",
"!/receipts/*.excluded.json"
],
"url": "./receipts.schema.json"
}
]
除錯
UI 中“執行”更突出
使用者研究表明,新使用者在 VS Code 中難以找到如何執行他們的程式。其中一個原因是,他們認為現有的“除錯”功能與“執行”程式無關。因此,我們正在讓“執行”在 UI 中更加突出。
- 主選單“除錯”已變為“執行”選單。
- “執行和除錯”檢視已變為“執行”檢視,相應的活動欄圖示現在顯示一個帶有小“bug”裝飾的大“播放”圖示。
除錯控制檯分組
VS Code 除錯控制檯現在支援輸出分組。除錯擴充套件可以指示何時應將除錯控制檯輸出分組到共同的父級下。目前,只有 Mock Debug 擴充套件實現了輸出分組,但很快其他除錯擴充套件也會跟進——最顯著的是 JavaScript 偵錯程式。
停用除錯控制檯歷史建議
您現在可以透過新的 debug.console.historySuggestions
設定關閉除錯控制檯中的歷史建議。預設情況下,歷史建議是開啟的。
整合終端
Unicode 11 支援
終端中字元的寬度現在預設為 Unicode 11 寬度。這對大多數人來說意味著表情符號將正確顯示為寬字元。
更好的 Alt+Click 導航提示支援
終端有一個功能,允許您 Alt+Click
單元格,游標將導航到該單元格。以前在 shell 提示符下,這隻適用於單行,即使它已換行。這已得到改進,可以在完整的換行行上工作。
主題:藍寶石
請注意,這可能尚未在 Windows 上正常工作,但ConPTY 的最新更改應該會在將來改進這一點。
任務
任務快速選擇更新
執行“執行任務”命令時顯示的任務快速選擇已更新,以顯示哪些任務提供程式仍在執行。如果您不需要該提供程式中的任務,則“停止檢測”按鈕將立即顯示到目前為止已檢測到的任務,因此您無需等待任何緩慢的任務提供程式。
主題:One Dark Pro,字型:Fira Code
任務例項限制
任務 "runOptions"
現在包含一個 "instanceLimit"
,它指定允許的任務例項數。預設的 "instanceLimit"
為 1。
promptString 密碼輸入
"promptString"
使用者輸入型別可以具有 "password": true
,這將導致下拉輸入框像密碼一樣模糊鍵入的內容。
預覽功能
預覽功能尚未準備好釋出,但已足夠實用。我們歡迎您在這些功能開發期間提供早期反饋。
設定同步
在過去的幾個月裡,我們一直致力於支援在不同機器之間同步 VS Code 設定、擴充套件和鍵盤快捷鍵(熱門功能請求#2743)。在這個里程碑中,我們很高興地宣佈,此功能已準備好在我們的下一個 1.44.0 Insider 版本中進行預覽。您現在可以在所有機器上的所有 VS Code 安裝中同步您的偏好設定。您還可以透過最少的努力在一臺新機器上使用您的個人偏好設定來引導 VS Code。
以下影片演示了在新機器上本地應用擴充套件和設定。
目前,設定、鍵盤快捷鍵、擴充套件和顯示語言已同步,但我們計劃新增更多。您可以檢視我們建議的設定同步功能列表。
機器設定(具有 machine
或 machine-overridable
範圍)預設不進行同步。您還可以從“設定”編輯器或使用 sync.ignoredSettings
設定新增或刪除此列表中的設定。
主題:GitHub Sharp
鍵盤快捷鍵預設按平臺同步。如果您的鍵盤快捷鍵與平臺無關,您可以透過停用 sync.keybindingsPerPlatform
設定來跨平臺同步它們。
所有內建和已安裝的擴充套件及其全域性啟用狀態都會同步。您可以選擇跳過同步某個擴充套件,無論是從“擴充套件”檢視還是使用 sync.ignoredExtensions
設定。
主題:GitHub Sharp
設定同步支援在同步時檢測設定和鍵盤快捷鍵中的衝突。衝突使用差異編輯器顯示,左側是傳入(遠端)更改,右側是本地更改。您可以透過在右側編輯器中編輯並使用編輯器中提供的操作合併更改來解決衝突。
在這裡,透過“接受遠端”操作選擇了遠端 colorTheme
設定值。
主題:GitHub Sharp、GitHub Sharp Dark
可以在“日誌 (同步)”輸出檢視中監視設定同步活動。所有本地偏好設定都會在同步期間更改時備份到磁碟,並保留 30 天。您可以使用命令“同步:開啟本地備份資料夾”轉到備份位置並檢索您的舊偏好設定。
主題:GitHub Sharp
在任何時候,您都可以選擇關閉同步,無論是在當前的 VS Code 例項上還是在所有 VS Code 安裝上。當選擇停用所有同步時,您的資料將從雲中刪除。
注意:設定同步使用 Microsoft 帳戶來儲存您的 VS Code 首選項以進行同步,因此您需要一個帳戶才能使用此功能。有關更多資訊,請參閱設定同步文件。
時間線檢視
在此迭代中,我們繼續在新的時間軸檢視上取得進展。它現在在 Insiders 版本中預設啟用,並且可以透過以下設定在穩定版本中啟用:
"timeline.showView": true
在下面,時間軸檢視顯示檔案的 Git 提交歷史。
我們現在添加了分頁支援(透過上面顯示的“載入更多”操作),並在右側添加了相對時間戳。擴充套件還可以為時間軸檢視以及單個時間軸專案貢獻選單項。在上面的螢幕截圖中,內建的 Git 擴充套件貢獻了命令“複製提交 ID”和“複製提交訊息”。
新的 JavaScript 偵錯程式
本月我們繼續在新的 JavaScript 偵錯程式上取得進展。它預設安裝在 Insiders 版本中,並且可以從 Marketplace 在 VS Code Stable 中安裝。您可以透過啟用 debug.javascript.usePreview
設定來使用現有啟動配置。以下是我們本月新增的一些新功能:
美觀列印
主題:Earthsong,字型:Fira Code
偵錯程式現在可以美觀地列印檔案,這在處理縮小原始檔時特別有用。當您步進或開啟看起來已縮小的檔案時,它會顯示一個提示,您也可以透過“除錯:為除錯美觀列印”命令手動觸發美觀列印。
您可以透過選擇“從不”或將設定 debug.javascript.suggestPrettyPrinting
更改為 false
來關閉建議提示。
支援 Microsoft Edge 和 WebView2
我們現在支援啟動新的 Microsoft Edge 瀏覽器,只需將除錯型別從 chrome
或 pwa-chrome
更改為 pwa-msedge
即可嘗試。它支援與 chrome
相同的所有配置設定。
隨之而來的是對桌面 Windows 應用程式中 WebView2 控制元件的支援。請檢視我們的 webview 演示,瞭解如何設定。
遠端除錯
您現在可以在新的偵錯程式中從遠端工作區(例如 GitHub Codespaces 或 Remote SSH)除錯瀏覽器原始碼。要進行設定,請埠轉發您的 Web 伺服器(或使用簡單的靜態 Web 伺服器),然後建立指向轉發埠的 chrome
或 pwa-msedge
啟動配置。
例如
{
"version": "0.2.0",
"configurations": [
{
"type": "pwa-msedge",
"request": "launch",
"name": "Debug my App",
"url": "https://:5000" // <- debug an app forwarded on port 5000
}
]
}
當您啟動除錯會話時,瀏覽器將在您的機器上開啟,您可以像往常一樣從 VS Code 中進行除錯。
更多檢視可移動
上一個版本中,VS Code 只是讓您體驗了一下將檢視重新定位到面板。在此版本中,此體驗已擴充套件到更多檢視。您現在可以移動除錯/執行檢視或新的時間軸檢視等檢視。您還可以將檢視移動到側邊欄中的其他檢視。例如,您可能希望將“開啟的編輯器”檢視移動到“原始碼管理”檢視。您可以透過拖動檢視並將它們放到活動欄或面板中的所需位置來完成所有這些操作。
以下動畫演示了將“開啟的編輯器”檢視移動到另一個檢視,然後移動到面板。
主題:Horizon Bright,字型:Cascadia Code
我們還引入了一個新命令,以便更輕鬆地使用鍵盤移動檢視:“檢視:移動焦點檢視”(workbench.action.moveFocusedView
)。
這是一個預覽功能,如果您遇到無法修復的狀態,可以使用一個命令將所有檢視重置到其原始位置:“檢視:重置檢視位置”(workbench.action.resetViewLocations
)。
對擴充套件的貢獻
遠端開發
遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
1.43 版的亮點包括
- 透過應用程式連結開啟遠端工作區。
- 遠端 - SSH:支援 Windows 和 macOS SSH 主機。
- 遠端 - SSH:預設啟用連線共享。
- WSL:檢視最近的在 WSL 2 中使用 Docker 部落格文章。
您可以在遠端開發發行說明中瞭解新的擴充套件功能和錯誤修復。
Vetur
適用於 Vue.js 的 Vetur 擴充套件現在包含對模板插值更好的自動完成功能。您可以在 0.24.0 版本中找到變更日誌。
擴充套件創作
偵錯程式擴充套件 API
除錯歡迎檢視
如歡迎檢視內容 API 部分所述,debug
檢視現在可用於歡迎檢視內容貢獻。這些新增可以用於引導初學者使用者使用簡化執行或除錯程式的特定功能。
為了避免檢視被過多的歡迎檢視內容貢獻弄得混亂,我們建議僅為當前活動語言啟用單個貢獻。為了方便這一點,我們引入了一個新的上下文鍵 debugStartLanguage
,它被設定為上次使用偵錯程式的活動編輯器語言。
例如,如果您的偵錯程式針對 Python,則您將僅在 debugStartLanguage == "python"
時貢獻歡迎檢視內容。如果您的偵錯程式針對多種語言,您可以使用 OR 運算子 (||
) 組合多個條件。
新除錯懸停 API
如今,VS Code 的除錯懸停使用基於正則表示式的啟發式方法來查詢滑鼠下的表示式,VS Code 偵錯程式會對其進行評估,然後在懸停中顯示結果。由於正則表示式不可配置,並非所有語言都能正確處理(或無法儘可能充分地處理)。問題#84044、#89603 和#89332 描述了典型問題。
在此里程碑中,我們引入了新的擴充套件 API 來控制除錯懸停的行為。
可以為語言註冊 EvaluatableExpressionProvider
,以提供滑鼠下的表示式,VS Code 偵錯程式將針對活動的除錯會話對其進行評估。
這是一個來自Mock debug 示例的簡單示例,它顯示了一個基於 getWordRangeAtPosition
API 的(簡單)實現。
vscode.languages.registerEvaluatableExpressionProvider('markdown', {
provideEvaluatableExpression(
document: vscode.TextDocument,
position: vscode.Position
): vscode.ProviderResult<vscode.EvaluatableExpression> {
const wordRange = document.getWordRangeAtPosition(position);
if (wordRange) {
return new vscode.EvaluatableExpression(wordRange);
}
return undefined; // nothing evaluatable found under mouse
}
});
不再轉義空格
VS Code 偵錯程式 UI 不再轉義或引用從除錯擴充套件或除錯介面卡接收的任何空格。例如,在 DAP 變數中或作為 DAP 輸出事件接收的所有字串都按原樣在 UI 中顯示,不進行修改。
這意味著現在由除錯擴充套件或除錯介面卡決定是否需要在將資料傳送到 VS Code 之前轉義空格。更多詳細資訊可在問題 #73845 中找到。
CodeAction.disabled
透過 CodeAction.disabled
屬性,擴充套件現在可以告訴 VS Code 為什麼給定的 CodeAction
對使用者當前的選擇不可用。這對於重構特別有用。
以下是在我們的程式碼操作示例擴充套件中使用 .disabled
的示例。
import * as vscode from 'vscode';
export class Emojizer implements vscode.CodeActionProvider {
public provideCodeActions(
document: vscode.TextDocument,
range: vscode.Range
): vscode.CodeAction[] | undefined {
const action = new vscode.CodeAction(
`Convert to ${emoji}`,
vscode.CodeActionKind.Refactor.append('emojize')
);
if (!this.isAtStartOfSmiley(document, range)) {
// Tell the user why our action is not available
action.disabled = { reason: 'Selection is not currently on a :)' };
return [action];
}
action.edit = new vscode.WorkspaceEdit();
action.edit.replace(
document.uri,
new vscode.Range(range.start, range.start.translate(0, 2)),
'😀'
);
return action;
}
}
如果使用者嘗試透過鍵盤快捷鍵應用停用的程式碼操作,VS Code 將向用戶顯示 .disabled
錯誤訊息。
此外,為了幫助發現,停用的程式碼操作在“重構”和“源操作”上下文選單中顯示為褪色。
請注意,停用的操作不會顯示在頂層燈泡選單中。
Terminal.exitStatus
擴充套件現在可以確定終端是否已退出,如果已退出,則使用哪個退出程式碼(如果有)。
window.onDidCloseTerminal(t => {
if (t.exitStatus && t.exitStatus.code) {
vscode.window.showInformationMessage(`Exit code: ${t.exitStatus.code}`);
}
});
新增診斷錯誤連結
我們已將建議的診斷連結 API 升級到穩定版。
class Diagnostic {
...
/**
* A code or identifier for this diagnostic.
* Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
*/
code?: string | number | {
/**
* A code or identifier for this diagnostic.
* Should be used for later processing, e.g. when providing [code actions](#_CodeActionContext).
*/
value: string | number;
/**
* A target URI to open with more information about the diagnostic error.
*/
target: Uri;
};
}
工作區編輯元資料
我們已經最終確定了 WorkspaceEditEntryMetadata
API。它允許擴充套件作者對工作區編輯的更改進行分類,特別是如果更改在應用之前需要進行審查。
除錯介面卡協議
支援輸出事件中的分組
output
事件已新增可選的 group
屬性,以便透過分組相關訊息來保持輸出日誌的組織。group
的可能值為 start
和 startCollapsed
用於開啟展開或摺疊的組,以及 end
用於關閉組。
注意:從本版本開始,VS Code 支援此 DAP 增強功能。
允許透過完成項放置游標
完成項已新增可選的 selectionStart
和 selectionLength
屬性。使用這些屬性,可以在插入完成文字後控制客戶端的當前選擇(或插入符位置)。
注意:VS Code 尚不支援此 DAP 增強功能。它計劃在下個版本中釋出。
提案:進度事件
我們在向除錯介面卡協議新增進度事件的提案方面取得了一些進展。如果您有興趣,可以參與此 DAP 功能請求的討論。
語言伺服器協議
語言伺服器協議 3.16 版本的工作已經開始。
新版本中包含對以下內容的提議支援:
- 完成項的插入/替換編輯。
- 診斷上的結構程式碼(例如連結支援)。
- 對符號資訊和文件符號的標籤支援。
建議的擴充套件 API
每個里程碑都會帶來新的提議 API,擴充套件作者可以進行嘗試。一如既往,我們渴望您的反饋。以下是試用提議 API 的方法:
- 您必須使用 Insiders 版本,因為提議的 API 經常更改。
- 您的擴充套件的
package.json
檔案中必須包含以下行:"enableProposedApi": true
。 - 將最新版本的 vscode.proposed.d.ts 檔案複製到您專案的源位置。
請注意,您不能釋出使用提議 API 的擴充套件。下一個版本中可能會有重大更改,我們絕不希望破壞現有擴充套件。
自定義編輯器 API
在此迭代中,我們繼續致力於自定義編輯器 API 提案。值得注意的更改包括:
- 將 API 方法重新命名為更短、更一致。
- 透過引入
CustomTextEditorProvider
簡化文字檔案的自定義編輯器建立。此自定義編輯器使用 VS Code 的普通TextDocument
作為其資料模型,這樣您就不必自己實現save
、backup
和其他操作。這還使得在資源的自定義編輯器和同一資源的文字編輯器之間進行即時同步變得容易。 - 引入
CustomDocument
來儲存二進位制CustomEditor
使用的模型。每個資源有一個CustomDocument
,但使用者可以在該資源上開啟多個自定義編輯器。
請繼續測試並分享您對我們自定義編輯器 API 提案的反饋。儘管 API 的具體內容可能仍會發生變化,但我們相信當前的提案反映了我們希望儘快最終確定的內容。
CodeActionProviderMetadata.documentation
我們修訂了我們之前的提案,該提案旨在標準化擴充套件如何為其程式碼操作貢獻文件。根據更新後的提案,文件現在使用 CodeActionProviderMetadata
型別上的 documentation
屬性提供。
例如,這是我們內建的 JavaScript 和 TypeScript 擴充套件貢獻文件的方式:
class TypeScriptRefactorProvider implements vscode.CodeActionProvider {
public static readonly metadata: vscode.CodeActionProviderMetadata = {
providedCodeActionKinds: [ vscode.CodeActionKind.Refactor ],
documentation: [
{
kind: vscode.CodeActionKind.Refactor,
// This command opens a webpage when executed
command: {
command: LearnMoreAboutRefactoringsCommand.id,
title: localize('refactor.documentation.title', "Learn more about JS/TS refactorings")
}
}
]
};
...
}
當用戶請求重構時,文件在主程式碼操作列表之後呈現。
問題 #86788 跟蹤提案的狀態。
歡迎檢視內容 API
某些檢視現在支援擴充套件貢獻的歡迎內容。有關更多資訊,請參閱原始問題。
已採用此 API 的檢視有:
explorer
- 檔案資源管理器scm
- 原始碼管理debug
- 執行/除錯
例如,這是 Git 擴充套件對 explorer
歡迎檢視的歡迎檢視內容貢獻,用於克隆儲存庫。
主題:GitHub Sharp
OpenDialogOptions 和 SaveDialogOptions 標題
OpenDialogOptions
和 SaveDialogOptions
都具有一個提議的 title
屬性。title
是否顯示取決於平臺,但如果平臺確實顯示 title
,它將顯示在儲存或開啟對話方塊的上方。例如,內建命令“工作區:將工作區另存為...”將標題設定為“儲存工作區”。
工程
Electron 7.0 更新
在此里程碑中,我們完成了將 Electron 7 捆綁到 VS Code 中的探索。這是一個主要的 Electron 版本,附帶 Chromium 78.0.3904.130 和 Node.js 12.8.1。
對於 HDR 顯示器
我們正在跟蹤 問題 #88491 中 Windows 使用者使用高動態範圍 (HDR) 顯示器時 VS Code 看起來暗淡且無法使用的問題。這是所有基於 Chromium 78.0.3904.130 的應用程式都存在的問題,該問題在 Chromium 81 的最新版本中已修復。一旦我們升級到 Electron 9,VS Code 就會獲得此修復,並且由於技術原因,該修復無法向後移植到 Chromium 78。
同時,我們對此問題有一個臨時解決方案:
- 開啟命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P))。
- 執行**首選項:配置執行時引數**命令。
- 此命令將開啟
argv.json
檔案以配置執行時引數。其中可能已經有一些預設引數。 - 將
"disable-color-correct-rendering": true
編輯為"disable-color-correct-rendering": false
。 - 重啟 VS Code。
注意:除非您遇到問題,否則不要編輯此設定!
我們添加了這個預設執行時引數,以便我們可以覆蓋 Chromium 的預設 sRGB 顏色校正,轉而使用 macOS 上的顯示色彩空間。這樣做可以避免諸如問題 #84154 之類的問題,但對 HDR 顯示器不起作用。
"strict": true
當我們首次釋出 VS Code 時,TypeScript 仍然是一種新穎且快速發展的語言,缺少一些您今天可能認為理所當然的有用型別安全檢查,例如嚴格的空檢查。在過去幾年中,TypeScript 團隊引入了許多選項,使 TypeScript 編譯器更加“嚴格”。這些嚴格的選項可以捕獲許多常見的程式設計錯誤並消除整類錯誤。嚴格模式的好處已得到充分記錄,我們一直希望為 VS Code 程式碼庫啟用嚴格模式。然而,考慮到這需要修復構成核心 VS Code 程式碼庫的大約五十萬行原始碼中的數千個錯誤,這似乎是一項幾乎不可能完成的任務。
儘管如此,嚴格模式的價值足夠大,我們決定即使需要一些時間才能實現,也值得為此努力。因此,在過去兩年中,我們一直在逐步更新我們的程式碼庫以符合嚴格模式。我們所有這些工作都是逐步進行的,並且直接在我們的開發分支中進行,因此每個與嚴格模式相關的修復都使我們的程式碼庫對每個人都更安全一些。啟用嚴格的空檢查可能是該過程中最複雜的部分,我們在部落格文章中記錄了我們是如何完成的。
此次迭代,我們終於完成了最後一個嚴格模式選項:strictFunctionTypes
。隨著這項工作的完成,一個相當平淡無奇的提交為我們的整個程式碼庫啟用了嚴格模式!
啟用嚴格模式是一段漫長的旅程,核心 VS Code 團隊的每個人和許多社群成員都為此做出了貢獻。然而,透過逐步完成這項工作,我們能夠從一開始就受益於所有這些辛勤工作。展望未來,嚴格模式應該會鼓勵最佳編碼實踐,使重構更安全,並最終讓我們更快地釋出並減少錯誤!
改進的 CI 構建效能
VS Code 使用 Azure Pipelines 進行持續整合構建,我們最近顯著提高了構建效能。您可以在最佳化 CI 構建時間部落格文章中瞭解更多資訊。
針對瀏覽器執行測試
在此里程碑中,我們利用 Playwright 庫,使我們的所有測試(單元、整合、冒煙)都可以在瀏覽器中執行,從而提高了對 Chrome、Firefox 和 Safari 等瀏覽器的覆蓋率。您可以參考我們的 VS Code 測試 README,瞭解如何執行這些測試。
值得注意的修復
- 61491:SCM:Viewlet 應該改進“無儲存庫”訊息
- 74782:調查:macOS 公證
- 82828:自動顯示突出顯示檔名,而不總是將其移動到資源管理器中間
- 8641:macOS:允許滑鼠按鈕 4 和 5 導航歷史記錄
- 87767:VSCode 重啟除錯不再工作
- 88038:不要用自動執行的偵錯程式命令汙染 shell 歷史記錄
- 89230:“組”在編輯器獲得焦點時被讀取
- 89699:後退/前進:保留選擇
- 89989:Web:允許將檔案開啟到新視窗
- 90075:資源管理器:支援懸空符號連結
- 90240:禪模式關閉後行號不可見
- 90876:列表項應具有“listitem”角色
- 91166:問題面板開啟時警報過於冗長。
- 91238:和絃在整合終端中不起作用
感謝
最後但同樣重要的是,衷心感謝!以下幫助使 VS Code 變得更好的各位:
對我們問題跟蹤的貢獻
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Alexander (@usernamehw)
- ArturoDent (@ArturoDent)
- Gama11 (@Gama11)
對 vscode
的貢獻
- @alpalla:修復 #32264 - 允許 N 個相同任務的例項 PR #89872
- Baibhav Vatsa (@BaibhaVatsa):從 tsconfig.base.json 中刪除冗餘標誌 PR #91050
- Bailey Herbert (@baileyherbert)
- @bepvte:將“貢獻”重新命名為“功能貢獻” PR #89842
- @bolinfest
- Brett Cannon (@brettcannon):修復命令文件中的複數問題 PR #89959
- Dor Mesica (@dormesica):修復終端中執行活動檔案未用引號包裹的問題 PR #90847
- Evan Krause (@evangrayk):修復非編輯器 webview 中撤消/重做失效的問題 PR #89961
- Ian MacFarlane (@eyeino):建立新 git 分支時澄清語言 PR #90160
- John Murray (@gjsjohnmurray)
- lipgloss (@gloss-water):主題:為小地圖不透明度新增工作臺配置選項 PR #58324
- Michael Gubik (@gubikmic):僅滾動主要軸(防止滾動漂移) PR #70047
- Gustavo Cassel (@GustavoASC)
- @Helloimbob:自動檢測 csh 指令碼為 shellscript PR #90960
- Jean Pierre (@jeanp413)
- Jonas Littorin (@jlittorin):為“promptString”型別的輸入變數添加了密碼屬性。 PR #90482
- John Blackbourn (@johnbillion):將 .envrc 檔案視為 Shell 指令碼 PR #90825
- Josh Goldberg (@JoshuaKGoldberg):文件拼寫錯誤:insertSpaces 中缺少 ` PR #90374
- @LadyCailin:當突出顯示的行是作用域開始/結束時,向右縮排一個 PR #77762
- Maik Riechert (@letmaik):文件:修復 package.json 欄位名“extensionDependency” PR #90103
- Gordey (@lgordey):設定 UI:為同步設定新增分隔符 PR #91461
- Alex SK (@lxsk):修復 #21849:小地圖:顯示完整文件 PR #74425
- Dan (@mallardduck):新增支援多個不同顏色的標尺 PR #88453
- Rasmus (@neonsea):避免偵錯程式命令汙染 shell 歷史記錄 PR #88041
- @nrayburn-tech
- Przemek Adamczewski (@padamczewski):修復:多游標複製行 n 次 (#_40646) PR #52645
- Peter Shinners (@PeterShinners):修復
task.autoDetect
描述的語法錯誤 PR #90117 - PM Extra (@PMExtra):修復 JsonValidation 的一個小 bug PR #91237
- Ron Buckton (@rbuckton):修復 TS 呼叫層次結構中檔案顯示的差一錯誤 PR #89822
- Robert Rossmann (@robertrossmann):像其他捲軸一樣設定差異編輯器的可滾動視口樣式 PR #89660
- Oğuzhan Eroğlu (@rohanrhu):添加了記住 End 鍵狀態的行為 PR #88664
- Michael Scovetta (@scovetta):修復 #90555 (resetLocal() 什麼都不做) PR #90556
- Sergio Schvezov (@sergiusens):Snap 修復 PR #91182
- Matthew Spencer (@sirmspencer):新增關閉側邊欄的新操作 PR #90404
- Konstantin Solomatov (@solomatov):修復擴充套件偽終端中的連結處理 PR #88458
- 태재영 (@TroyTae):支援 front-matter 結尾的三點 PR #90122
- Victor Gomes (@vhpgomes):智慧選擇修復 PR #90736
- Waldemar Kornewald (@wkornewald):更接近頂部顯示(居中主體,而不是簽名) PR #80727
- @zhengjiaqi:編輯器操作執行支援引數 PR #87677
- Jiayue. Zhang (@zjysdhr):修復 #88294 在提交介面中新增 commitData PR #89005
對 vscode-eslint
的貢獻
- Yosuke Ota (@ota-meshi):新增對新 eslint 建議 API 的支援 PR #814
- Krasimir Nedelchev (@kaykayehnn):修復拼寫錯誤 PR #900
對 language-server-protocol
的貢獻
- Lars Hvam (@larshp) 規範 3.15,修復拼寫錯誤 PR #912
- Maxim Reznik (@reznikmm):
- 修復 specification-3-15.md markdown 格式 PR #913
- 刪除 3.15 中多餘的 foldingRangeProvider 定義 PR #914
- 刪除 3.15 中多餘的 ExecuteCommandOptions 定義 PR #915
- 將 3.15 markdown 中的 ts 替換為 typescript PR #916
- 刪除重複的 TextDocumentRegistrationOptions PR #917
- 將選擇範圍相關功能新增到 3.15 PR #918
- 將 workspaceFolders/configuration/window 新增到 3.15 PR #930
- Christian Tietze (@DivineDominion) 修復拼寫錯誤 PR #921
- Kun Ren (@renkun-ken) 修復拼寫錯誤 PR #922
對 vscode-js-debug
的貢獻
- SantoJambit (@SantoJambit):僅獲取 codelens 的根級別 scripts 屬性 PR #351
對 vscode-languageserver-node
的貢獻
- @Razzeee 修復拼寫錯誤 PR #574
- Remy Suen (@rcjsuen):修復語義標記檔名中的拼寫錯誤 PR #583
對 vscode-css-languageservice
的貢獻
- Jorge del Casar (@jorgecasar):在 SCSS 中新增對解析 @apply 規則的支援 PR #194
- Denis Malinochkin (@mrmlnc):能夠為 SCSS/Less mixins 使用建議參與者 PR #201
- Will Bender (@Ragnoroct):修復規則集後的 scss 自動完成 PR #188
對 vscode-vsce
的貢獻
- Robert Holt (@rjmholt):新增 --noGitHubIssueLinking 以阻止包步驟中的問題連結擴充套件 PR #424
對 localization
的貢獻
有超過 800 名 雲 + AI 本地化 社群成員正在使用 Microsoft 本地化社群平臺 (MLCP),其中約有 170 名活躍貢獻者為 Visual Studio Code 做出貢獻。我們感謝您的貢獻,無論是提供新翻譯、投票翻譯還是提出流程改進建議。
這是貢獻者的快照。有關專案詳細資訊,包括貢獻者姓名列表,請訪問專案網站:https://aka.ms/vscodeloc。
- 簡體中文(中國) 顧亦知、易婷婷、Charles Dong、Justin Liu、項斌、ick、paul cheung、陳詩歡、普魯文、張銳、李志強、Joel Yang。
- 繁體中文(臺灣) 潘怡君、林高民。
- 丹麥語(丹麥) Lasse Stilvang。
- 荷蘭語(荷蘭) Koen Williame。
- 英語(英國) Martin Littlecott、Henry Dearn、carlos baltazar。
- 芬蘭語(芬蘭) Feetu Nyrhinen。
- 法語(法國) Thierry DEMAN-BARCELÒ、Antoine Griffard、Rodolphe NOEL、Younes ZOBAIRI。
- 德語(德國) Philip Kneifeld、Raphael Höser、nick rauch。
- 印地語(印度) KRISHNA TANDON、Alish Vagadiya。
- 匈牙利語(匈牙利) Levente Borbély。
- 印度尼西亞語(印度尼西亞) Eriawan Kusumawardhono、Riwut Libinuko。
- 義大利語(義大利) Luigi Bruno。
- 日語(日本) TENMYO Masakazu、Koichi Makino。
- 韓語(韓國) 姜成元、Hongju、鄭關宇。
- 拉脫維亞語(拉脫維亞) Andris Vilde、Atis Straujums。
- 波蘭語(波蘭) Makabeus Orban、Mariusz Wachowski。
- 葡萄牙語(巴西) Marcondes Alexandre、Arthur Lima、Marcelo Fernandes、Roberto Fonseca、Yuri Dantas、Luiz Gustavo Nunes、Thiago Takehana。
- 葡萄牙語(葡萄牙) Diogo Barros。
- 羅馬尼亞語(羅馬尼亞) LaServici。
- 俄語(俄羅斯) Andrey Veselov、Vadim Svitkin、Dmitry Kiryanov。
- 西班牙語(西班牙,國際排序) Ricardo Estrada Rdez、Alvaro Enrique Ruano。
- 泰米爾語(印度) Vijay Rajasekar、Selvakumarasamy G、Pandidurai R。
- 土耳其語(土耳其) Mehmet Yönügül。
- 越南語(越南) Hiếu Nguyễn、Van-Tien Hoang、Vương。