參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

2020 年 2 月 (版本 1.43)

更新 1.43.1:此更新修復了這些問題

更新 1.43.2:此更新修復了這些問題

下載:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap


歡迎使用 Visual Studio Code 2020 年 2 月版。此版本中有許多更新,我們希望您會喜歡,其中一些主要亮點包括:

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。

內部人員預覽版: 想盡快試用新功能嗎?您可以下載每晚內部人員預覽版並立即試用最新更新。有關最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上關注我們 @code

工作臺

搜尋編輯器

經過幾次在 Insiders 版本上穩定化後,我們推出了搜尋編輯器,它允許您在全尺寸編輯器中檢視工作區搜尋結果,並帶有語法高亮和可選的周圍上下文行。這在一段時間內一直是備受請求的功能

以下是搜尋“SearchEditor”一詞的示例,其中包含匹配前後兩行文字作為上下文。

搜尋編輯器 主題:淡紫色觸感,字型:Hasklig

在搜尋編輯器中,可以使用“轉到定義”操作導航到結果,例如 F12 在當前編輯器組中開啟源位置,或 ⌘K F12 (Windows、Linux Ctrl+K F12) 在側面編輯器中開啟位置。此外,雙擊也可以選擇開啟源位置,這可以透過 search.searchEditor.doubleClickBehaviour 設定進行配置。

Search Editor definition reveals

您可以使用“搜尋編輯器:開啟新搜尋編輯器”命令或使用搜索檢視頂部的“開啟新搜尋編輯器”按鈕開啟新的搜尋編輯器。此外,您還可以使用結果樹頂部的“在編輯器中開啟”連結或“搜尋編輯器:在編輯器中開啟結果”命令將現有結果從搜尋檢視複製到搜尋編輯器。

注意:您可以試用實驗性的 搜尋編輯器:應用更改 擴充套件以將您在搜尋編輯器中所做的編輯同步回原始檔。

Search Editor: Apply Changes extension

可拖動邊角

您知道可以透過抓取和拖動兩個正交邊角之間的交叉點來同時調整它們的大小嗎?這對於編輯器邊角已經有效,現在它也適用於編輯器和檢視之間的邊緣。

Draggable sash corners

主題:GitHub Sharp,字型:Fira Code

公證過的 macOS 構建

適用於 macOS 的 Visual Studio Code 現已透過 Apple 公證,因此您應該不再看到以下對話方塊:

macOS missing notarization warning

有關更多詳細資訊,請閱讀調查問題Apple 的開發人員文件

進度通知

從本版本開始,指示長時間執行操作的通知行為略有不同。

  • 它們不再提供通用的“關閉”按鈕,因為這會給人一種操作已被取消的錯誤印象。您仍然可以按 Esc 鍵隱藏通知。
  • 每當通知在操作仍在進行時被隱藏,通知都會在狀態列中指示其操作的進度。

後一項更改有助於您在關閉通知後瞭解操作仍在後臺繼續執行(例如長時間執行的儲存操作)。

在選擇“取消”按鈕之前,操作仍在執行。

Progress Notification

主題:Dracula 官方,字型:Fira Code

無標題編輯器

新的設定 workbench.editor.untitled.labelFormat 允許您控制無標題編輯器是否應使用檔案內容作為標題。可能的值為 contentname。將 '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 儲存庫以幫助您入門。

File Explorer Welcome view

主題:GitHub Sharp

原始碼管理歡迎檢視

得益於新的歡迎檢視基礎結構,原始碼管理檢視現在為某些情況提供了更好的體驗,否則它將顯示為空。例如,當未檢測到安裝時,它現在可以指導使用者開啟資料夾或克隆儲存庫或安裝 Git。

Source Control Welcome view

主題:GitHub Sharp

編輯器

小地圖尺寸

有一個新設定 editor.minimap.size,它控制小地圖如何使用垂直空間。

  • 當設定為 proportional(預設值)時,每行在小地圖中獲得一定量的垂直空間,具體取決於 editor.minimap.scale。例如,在高 DPI 顯示器上,配置的比例為 1(預設值),每行在小地圖中獲得 4 畫素。因此,對於一個 100 行的檔案,小地圖中渲染的行高為 400 畫素,對於一個 1000 行的檔案,為 4000 畫素。這意味著對於大檔案,小地圖也會隨著當前檔案的滾動而滾動。
  • 當設定為 fit 時,小地圖的高度被限制為不超過編輯器高度。因此,如果檔案有很多行,它們將被取樣,並且只有一部分將在小地圖中渲染,這樣就不需要小地圖滾動了。
  • 當設定為 fill 時,小地圖的高度始終是編輯器高度。對於大檔案,這也是透過取樣行實現的,但對於小檔案,這是透過為每行保留更多垂直空間(拉伸行)來實現的。

在這裡,尺寸從 proportional 更改為 fit,然後在一個較小的檔案中,從 fit 更改為 fill

Minimap size

小地圖背景和滑塊顏色

現在有新的顏色可以自定義小地圖及其滑塊。其中一種新顏色是 minimap.background,當顏色定義為透明(降低 #RRGGBBAA Alpha 通道)時,小地圖將透明渲染。

Transparent minimap

{
  "workbench.colorCustomizations": {
    "minimap.background": "#00000055"
  }
}

列選擇模式

有一個新的全域性切換,可以透過“選擇”>“列選擇模式”選單項訪問。一旦進入此模式,如狀態列所示,滑鼠手勢和箭頭鍵將建立列選擇。

Column selection

您也可以從狀態列停用列選擇模式。

選擇時渲染空格

editor.renderWhitespace 設定的預設值已從 none 更改為 selection。預設情況下,空格字元現在將在高亮文字上渲染。

在此處,在選定區域中顯示製表符和空格字元。

Render whitespace characters on selection

現在對“轉到定義”滑鼠手勢的行為有了更多控制。預設情況下,透過滑鼠“轉到定義”會開啟一個單獨的編輯器,但使用新設定 editor.definitionLinkOpensInPeektrue,該手勢將在預覽檢視中開啟。

Definition with mouse in Peek

在摺疊行上的任意位置展開

有一個新設定“編輯器:在行末單擊後展開”(editor.unfoldOnClickAfterEndOfLine),它控制當您單擊摺疊行右側的空白區域(在 ... 之後)時會發生什麼。當設定為 true 時,您可以在摺疊行文字後的任意位置單擊,而無需擔心精確選擇省略號(...)。預設情況下,此選項是關閉的。

folded line with ellipses

跨多個檔案撤消文字編輯

當撤消重新命名或影響多個檔案的程式碼操作時,VS Code 現在允許您撤消所有受影響檔案中的更改。

撤消跨檔案編輯時將顯示提示。

Undo across files prompt

注意:檔案操作(例如重新命名檔案)尚不支援。例如,使用跨檔案撤消尚不支援在 Java 中重新命名類名(其中檔名也會被重新命名)。

多個不同顏色的標尺

現有的 editor.rulers 設定已擴充套件,允許定義具有自定義顏色的標尺。在以下螢幕截圖中,第 80 列有一個洋紅色標尺,第 90 列有一個紅色標尺。

Colored rulers

{
  "editor.rulers": [
    { "column": 80, "color": "#ff00ff" },
    { "column": 90, "color": "#ff0000" }
  ]
}

編輯器頂部和底部填充

現在可以使用 editor.padding.topeditor.padding.bottom 在編輯器的頂部或底部保留空白區域(畫素數)。

這是頂部填充 50 畫素的編輯器。

editor.padding.top set to 50 pixels

{
  "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 的新“轉換為模板字串”重構,快速將字串連線轉換為模板字串

Converting string concatenation to a template string

JavaScript 和 TypeScript 的呼叫層次結構支援

TypeScript 3.8 帶來了 JavaScript 和 TypeScript 中的呼叫層次結構支援。

Viewing incoming calls using call hierarchy in a TypeScript file

IntelliSense 現在為 http 和 https 連結渲染JS Doc @link 內聯標籤。在下面的示例影像中,請注意 lightbulb menu@link 如何在懸停時渲染。

A hover with a rendered @link JSDoc tag

@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”裝飾的大“播放”圖示。

Run and Debug Activity Bar icon

除錯控制檯分組

VS Code 除錯控制檯現在支援輸出分組。除錯擴充套件可以指示何時應將除錯控制檯輸出分組到共同的父級下。目前,只有 Mock Debug 擴充套件實現了輸出分組,但很快其他除錯擴充套件也會跟進——最顯著的是 JavaScript 偵錯程式。

Debug Console grouping

停用除錯控制檯歷史建議

您現在可以透過新的 debug.console.historySuggestions 設定關閉除錯控制檯中的歷史建議。預設情況下,歷史建議是開啟的。

整合終端

Unicode 11 支援

終端中字元的寬度現在預設為 Unicode 11 寬度。這對大多數人來說意味著表情符號將正確顯示為寬字元。

Emojis are correctly wide characters

更好的 Alt+Click 導航提示支援

終端有一個功能,允許您 Alt+Click 單元格,游標將導航到該單元格。以前在 shell 提示符下,這隻適用於單行,即使它已換行。這已得到改進,可以在完整的換行行上工作。

Alt+Click 可以跨換行行移動 主題:藍寶石

請注意,這可能尚未在 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。

以下影片演示了在新機器上本地應用擴充套件和設定。

Bootstrap VS Code using Settings Sync

目前,設定、鍵盤快捷鍵、擴充套件和顯示語言已同步,但我們計劃新增更多。您可以檢視我們建議的設定同步功能列表。

機器設定(具有 machinemachine-overridable 範圍)預設不進行同步。您還可以從“設定”編輯器或使用 sync.ignoredSettings 設定新增或刪除此列表中的設定。

被忽略的設定 主題:GitHub Sharp

鍵盤快捷鍵預設按平臺同步。如果您的鍵盤快捷鍵與平臺無關,您可以透過停用 sync.keybindingsPerPlatform 設定來跨平臺同步它們。

所有內建和已安裝的擴充套件及其全域性啟用狀態都會同步。您可以選擇跳過同步某個擴充套件,無論是從“擴充套件”檢視還是使用 sync.ignoredExtensions 設定。

被忽略的擴充套件 主題:GitHub Sharp

設定同步支援在同步時檢測設定和鍵盤快捷鍵中的衝突。衝突使用差異編輯器顯示,左側是傳入(遠端)更改,右側是本地更改。您可以透過在右側編輯器中編輯並使用編輯器中提供的操作合併更改來解決衝突。

在這裡,透過“接受遠端”操作選擇了遠端 colorTheme 設定值。

設定同步處理衝突 主題:GitHub Sharp、GitHub Sharp Dark

可以在“日誌 (同步)”輸出檢視中監視設定同步活動。所有本地偏好設定都會在同步期間更改時備份到磁碟,並保留 30 天。您可以使用命令“同步:開啟本地備份資料夾”轉到備份位置並檢索您的舊偏好設定。

設定同步日誌 主題:GitHub Sharp

在任何時候,您都可以選擇關閉同步,無論是在當前的 VS Code 例項上還是在所有 VS Code 安裝上。當選擇停用所有同步時,您的資料將從雲中刪除。

Turn off Settings Sync

注意:設定同步使用 Microsoft 帳戶來儲存您的 VS Code 首選項以進行同步,因此您需要一個帳戶才能使用此功能。有關更多資訊,請參閱設定同步文件

時間線檢視

在此迭代中,我們繼續在新的時間軸檢視上取得進展。它現在在 Insiders 版本中預設啟用,並且可以透過以下設定在穩定版本中啟用:

"timeline.showView": true

在下面,時間軸檢視顯示檔案的 Git 提交歷史。

Timeline view

主題:Dark Amethyst

我們現在添加了分頁支援(透過上面顯示的“載入更多”操作),並在右側添加了相對時間戳。擴充套件還可以為時間軸檢視以及單個時間軸專案貢獻選單項。在上面的螢幕截圖中,內建的 Git 擴充套件貢獻了命令“複製提交 ID”和“複製提交訊息”。

新的 JavaScript 偵錯程式

本月我們繼續在新的 JavaScript 偵錯程式上取得進展。它預設安裝在 Insiders 版本中,並且可以從 Marketplace 在 VS Code Stable 中安裝。您可以透過啟用 debug.javascript.usePreview 設定來使用現有啟動配置。以下是我們本月新增的一些新功能:

美觀列印

Animation of VS Code asking whether to pretty-print a minified file when the debugger steps into it. Selecting "yes" formats the file and moves the debugger into the new beautified code.

主題:Earthsong,字型:Fira Code

偵錯程式現在可以美觀地列印檔案,這在處理縮小原始檔時特別有用。當您步進或開啟看起來已縮小的檔案時,它會顯示一個提示,您也可以透過“除錯:為除錯美觀列印”命令手動觸發美觀列印。

您可以透過選擇“從不”或將設定 debug.javascript.suggestPrettyPrinting 更改為 false 來關閉建議提示。

支援 Microsoft Edge 和 WebView2

我們現在支援啟動新的 Microsoft Edge 瀏覽器,只需將除錯型別從 chromepwa-chrome 更改為 pwa-msedge 即可嘗試。它支援與 chrome 相同的所有配置設定。

隨之而來的是對桌面 Windows 應用程式中 WebView2 控制元件的支援。請檢視我們的 webview 演示,瞭解如何設定。

Image showing the debugger paused at a breakpoint for code running in a native window's WebView.

遠端除錯

您現在可以在新的偵錯程式中從遠端工作區(例如 GitHub CodespacesRemote SSH)除錯瀏覽器原始碼。要進行設定,請埠轉發您的 Web 伺服器(或使用簡單的靜態 Web 伺服器),然後建立指向轉發埠的 chromepwa-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 只是讓您體驗了一下將檢視重新定位到面板。在此版本中,此體驗已擴充套件到更多檢視。您現在可以移動除錯/執行檢視或新的時間軸檢視等檢視。您還可以將檢視移動到側邊欄中的其他檢視。例如,您可能希望將“開啟的編輯器”檢視移動到“原始碼管理”檢視。您可以透過拖動檢視並將它們放到活動欄或面板中的所需位置來完成所有這些操作。

以下動畫演示了將“開啟的編輯器”檢視移動到另一個檢視,然後移動到面板。

Moving views around

主題: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 錯誤訊息。

Showing the '.disabled' error in the editor

此外,為了幫助發現,停用的程式碼操作在“重構”和“源操作”上下文選單中顯示為褪色。

A '.disabled' Code Action in the Refactor menu

請注意,停用的操作不會顯示在頂層燈泡選單中。

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 的可能值為 startstartCollapsed 用於開啟展開或摺疊的組,以及 end 用於關閉組。

注意:從本版本開始,VS Code 支援此 DAP 增強功能。

允許透過完成項放置游標

完成項已新增可選的 selectionStartselectionLength 屬性。使用這些屬性,可以在插入完成文字後控制客戶端的當前選擇(或插入符位置)。

注意: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 作為其資料模型,這樣您就不必自己實現 savebackup 和其他操作。這還使得在資源的自定義編輯器和同一資源的文字編輯器之間進行即時同步變得容易。
  • 引入 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")
        }
      }
    ]
  };
  ...
}

當用戶請求重構時,文件在主程式碼操作列表之後呈現。

The JS/TS Code Action documentation entry

問題 #86788 跟蹤提案的狀態。

歡迎檢視內容 API

某些檢視現在支援擴充套件貢獻的歡迎內容。有關更多資訊,請參閱原始問題

已採用此 API 的檢視有:

  • explorer - 檔案資源管理器
  • scm - 原始碼管理
  • debug - 執行/除錯

例如,這是 Git 擴充套件對 explorer 歡迎檢視的歡迎檢視內容貢獻,用於克隆儲存庫。

Explorer Welcome view

主題:GitHub Sharp

OpenDialogOptions 和 SaveDialogOptions 標題

OpenDialogOptionsSaveDialogOptions 都具有一個提議的 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 變得更好的各位:

對我們問題跟蹤的貢獻

vscode 的貢獻

vscode-eslint 的貢獻

language-server-protocol 的貢獻

vscode-js-debug 的貢獻

vscode-languageserver-node 的貢獻

vscode-css-languageservice 的貢獻

vscode-vsce 的貢獻

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。