🚀 在 VS Code 中

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 上的更新

Insiders: 想盡快試用新功能嗎?您可以下載每晚建置的 Insiders 版本,並在最新更新可用時立即試用。如需最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上追蹤我們 @code

工作台

搜尋編輯器

經過幾次在 Insiders 版本上穩定化的迭代後,我們推出了搜尋編輯器,可讓您在全尺寸編輯器中檢視工作區搜尋結果,並具備語法醒目提示和可選的周圍上下文行。這一直是長期以來 高度要求的功能

以下是以 'SearchEditor' 一詞進行搜尋,並在每個符合項目前後顯示兩行文字作為上下文的範例

搜尋編輯器 佈景主題:A Touch of Lilac,字型: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 Official,字型: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。空格字元現在預設會在醒目提示的文字中呈現。

此處的 Tab 鍵和空格空格字元會顯示在選取的區域中

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 中更加醒目。

  • 主選單偵錯已變更為執行選單。
  • 執行和偵錯檢視已變更為執行檢視,且對應的活動列圖示現在顯示大型「播放」圖示,並帶有小型「錯誤」裝飾。

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 可以跨換行移動 佈景主題:Sapphire

請注意,這可能尚未在 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 版本上啟用,並且可以透過以下設定在 Stable 版本上啟用

"timeline.showView": true

以下時間軸檢視顯示檔案的 Git 提交歷程記錄

Timeline view

佈景主題:Dark Amethyst

我們現在新增了分頁支援(透過上面顯示的載入更多動作),並在右側新增了相對時間戳記。擴充功能也可以將選單項目貢獻給時間軸檢視以及個別的時間軸項目。在上面的螢幕擷取畫面中,內建的 Git 擴充功能正在貢獻命令複製提交 ID複製提交訊息

新的 JavaScript 偵錯工具

本月我們繼續在新的 JavaScript 偵錯工具上取得進展。它預設安裝在 Insiders 版本上,並且可以從 VS Code Stable 中的 Marketplace 安裝。您可以透過啟用 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": "http://localhost: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)。

擴充功能貢獻

遠端開發

遠端開發擴充功能 上繼續進行工作,這可讓您使用容器、遠端機器或 Windows Linux 子系統 (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 程式碼動作範例擴充功能 中使用 .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

Issue #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 顯示器

我們正在追蹤 Windows 使用者在使用高動態範圍 (HDR) 顯示器時遇到的問題,如 issue #88491 中所述,VS Code 看起來會很黯淡且無法使用。這是所有以 Chromium 為基礎的應用程式在 78.0.3904.130 版本中都會發生的問題,且此問題已在較新版本的 Chromium 81 中修正。VS Code 將在我們升級至 Electron 9 後取得此修正程式,且有技術原因導致無法將此修正程式回溯移植到 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 上使用顯示色彩空間。這樣做可避免 issue #84154 等問題,但不適用於 HDR 顯示器。

"strict": true

當我們首次發行 VS Code 時,TypeScript 仍是一種新興且快速發展的語言,缺少您現在可能認為理所當然的一些實用類型安全檢查,例如 嚴格的 Null 檢查。在過去幾年中,TypeScript 團隊推出了一些選項,讓 TypeScript 編譯器更加「嚴格」。這些嚴格選項可以捕捉到許多常見的程式設計錯誤,並消除整個類別的錯誤。嚴格模式的優點已充分記錄在案,而且我們一直都想為 VS Code 程式碼庫啟用嚴格模式。然而,這樣做似乎幾乎是不可能的任務,因為這需要在構成核心 VS Code 程式碼庫的大約 50 萬行原始碼中修正數千個錯誤。

儘管如此,嚴格模式的價值仍然非常大,因此我們決定值得努力實現,即使這需要一些時間才能達成。因此,在過去兩年中,我們一直逐步更新程式碼庫,使其符合嚴格模式。我們在開發分支中以累加方式直接完成所有這項工作,以便每個與嚴格模式相關的修正程式都能讓我們的程式碼庫對所有人來說更安全一點。啟用嚴格的 Null 檢查可能是此過程中最複雜的部分,而我們已在部落格文章中記錄我們如何完成此作業。

在此迭代中,我們終於完成啟用最後一個嚴格模式選項:strictFunctionTypes。完成此作業後,一個相當平淡的認可便為我們的整個程式碼庫啟用了嚴格模式!

啟用嚴格模式是一段漫長的旅程,核心 VS Code 團隊的每個人和許多社群成員都為此做出了貢獻。然而,透過以累加方式完成這項工作,我們從第一天開始就能從所有這些辛勤工作中受益。展望未來,嚴格模式應鼓勵最佳程式碼撰寫實務、讓重構更安全,並最終讓我們能夠更快且錯誤更少地發行產品!

改善的 CI 建置效能

VS Code 使用 Azure Pipelines 進行持續整合建置,而我們最近大幅改善了建置效能。您可以在 改善 CI 建置時間 部落格文章中深入瞭解這方面資訊。

針對瀏覽器執行測試

在此里程碑中,我們透過運用 Playwright 程式庫,讓我們所有的測試 (單元、整合、冒煙) 都能在瀏覽器中執行,這讓我們在 Chrome、Firefox 和 Safari 等瀏覽器上的涵蓋範圍更廣。您可以參閱我們的 VS Code 測試 README,瞭解如何執行這些測試。

值得注意的修正

  • 61491: SCM:檢視窗格應改善「沒有存放庫」訊息
  • 74782: дослідити: macOS 公證
  • 82828: autoReveal 反白顯示檔案名稱 (如果有的話),而不會總是將其移動到檔案總管的中間
  • 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 位 Cloud + AI 本地化 社群成員使用 Microsoft 本地化社群平台 (MLCP),其中約有 170 位活躍貢獻者參與 Visual Studio Code。我們感謝您的貢獻,無論是提供新的翻譯、針對翻譯進行投票,還是建議流程改進。

以下是貢獻者的快照。如需專案的詳細資訊 (包括貢獻者名稱清單),請造訪專案網站:https://aka.ms/vscodeloc

  • 簡體中文 (中國) Yizhi Gu, Tingting Yi, Charles Dong, Justin Liu, 斌 项, ick, paul cheung, CHEN Shihuan, 普鲁文, 张锐, Zhiqiang Li, Joel Yang。
  • 繁體中文 (台灣) Yi-Jyun Pan, 高民 林。
  • 丹麥文 (丹麥) 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, Дмитрий Кирьянов。
  • 西班牙文 (西班牙,國際排序) 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。