🚀 在 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 上的「更新」。

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

工作台

搜尋編輯器

在搶先體驗版上經過幾次迭代穩定後,我們推出了搜尋編輯器,可讓您在全尺寸編輯器中檢視工作區搜尋結果,並完整支援語法醒目提示和周圍上下文的選用行數。這一直是長期以來備受期待的功能

以下是搜尋單字 '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。現在預設會在醒目提示的文字上呈現空白字元。

此處索引標籤和空格空白字元會顯示在選取的區域中

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" 設定為 "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 功能表@link 如何在浮動提示中呈現

A hover with a rendered @link JSDoc tag

URL 的 @link 適用於 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+按一下以導覽提示支援

終端機有一項功能可讓您 Alt+按一下儲存格,游標會導覽至該儲存格。過去在 Shell 提示字元中時,這僅適用於單行,即使它已換行也是如此。這已改進為可在完整換行行上運作。

Alt+按一下可在換行行之間移動 主題:Sapphire

請注意,這可能尚無法在 Windows 上正確運作,但 ConPTY 的近期變更應會在未來改善此情況。

工作

工作快速選取更新

當執行「執行工作」命令時顯示的工作快速選取已更新,以向您顯示哪些工作提供者仍在執行。如果您不需要來自該提供者的工作,「停止偵測」按鈕會立即向您顯示目前已偵測到的工作,因此您不必等待任何速度緩慢的工作提供者。

工作停止偵測 主題:One Dark Pro,字型:Fira Code

工作執行個體限制

工作 "runOptions" 現在包含 "instanceLimit",指定允許的工作執行個體數目。預設 "instanceLimit" 為 1。

promptString 密碼輸入

"promptString" 使用者輸入類型可以有 "password": true,這會導致下拉式輸入方塊模糊化輸入的內容,就像密碼一樣。

預覽功能

預覽功能尚未準備好發行,但功能已足夠使用。我們歡迎您在開發期間提供早期意見反應。

設定同步

在過去幾個月中,我們一直致力於支援跨機器同步 VS Code 設定、擴充功能和鍵盤快速鍵 (熱門功能要求 #2743)。在此里程碑中,我們很高興宣布此功能已準備好從我們的下一個 1.44.0 搶先體驗版發行版本開始預覽。您現在可以在所有機器的所有 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 喜好設定以進行同步,因此您需要帳戶才能使用此功能。如需更多資訊,請參閱 設定同步文件

時間軸檢視

在此迭代中,我們已持續在新時間軸檢視上取得進展。它現在預設在 搶先體驗版版本中啟用,並且可以透過以下設定在穩定版中啟用

"timeline.showView": true

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

Timeline view

主題:Dark Amethyst

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

新 JavaScript 偵錯工具

這個月我們已持續在新 JavaScript 偵錯工具上取得進展。它預設安裝在搶先體驗版上,並且可以從 VS Code 穩定版中的 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 Codespaces遠端 SSH) 偵錯瀏覽器原始碼。若要設定此功能,請連接您的 Web 伺服器 (或使用簡單的靜態 Web 伺服器) 的連接埠轉送,然後建立指向轉送連接埠的 chromepwa-msedge 啟動設定。

例如

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-msedge",
      "request": "launch",
      "name": "Debug my App",
      "url": "https://127.0.0.1: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 章節中所述,偵錯檢視現在已開放歡迎檢視內容貢獻。這些新增功能可用於引導初學者使用者使用可簡化執行或偵錯程式的特定功能。

為了避免檢視因過多的歡迎檢視內容貢獻而變得雜亂,我們建議個別貢獻僅針對目前的活動語言啟用。為了方便起見,我們推出了新的內容索引鍵 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;
  }
}

如果使用者嘗試透過鍵盤快速鍵套用已停用的 Code Action,VS Code 會向使用者顯示 .disabled 錯誤訊息

Showing the '.disabled' error in the editor

此外,為了協助探索,已停用的 Code Action 會在「重構」和「來源動作」內容選單中顯示為淡化

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 中修正。一旦我們升級到 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 上使用顯示色彩空間。這樣做可以避免 issue #84154 等問題,但不適用於 HDR 顯示器。

"strict": true

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

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

在此迭代中,我們終於完成了啟用最後一個嚴格模式選項: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:Zen 模式關閉後,行號不可見
  • 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。