2023 年 8 月 (版本 1.82)

**更新 1.82.1**:此更新解決了此安全性 問題

**更新 1.82.2**:此更新解決了這些 問題

**更新 1.82.3**:此更新解決了此安全性 問題

下載:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


歡迎使用 Visual Studio Code 2023 年 8 月發行版本。此版本包含許多更新,希望您會喜歡,重點摘要如下

如果您想在線上閱讀這些版本資訊,請前往 code.visualstudio.com 上的更新

**Insiders:** 想要盡快試用新功能嗎?您可以下載每晚的 Insiders 組建,並在最新更新可用時立即試用。

協助工具

視窗標題中的焦點檢視

window.title 設定現在具有 ${focusedView} 變數,如果目前焦點在檢視上,則會在標題列中顯示檢視的名稱。

行內完成項目的協助工具檢視

行內完成項目,例如來自 GitHub Copilot 擴充功能的完成項目,現在可以在協助工具檢視中檢查。

改善工作台中導覽的一致性

上次反覆運算中,我們在使用 ⌘↓ (Windows、Linux Ctrl+Down)⌘↑ (Windows、Linux Ctrl+Up) 時,讓輸入控制項 (例如,搜尋或篩選輸入) 與其結果之間的導覽體驗,在擴充功能檢視、鍵盤快速鍵編輯器等元件中保持一致。這已擴充至設定編輯器和 GitHub Pull Request 註解控制項。

這也適用於在終端機和終端機協助工具緩衝區之間導覽。

更新的終端機協助工具緩衝區按鍵繫結

先前,終端機協助工具緩衝區是透過 Shift+Tab 開啟。這與某些 Shell 中現有的鍵盤快速鍵衝突。因此,我們已移除該按鍵繫結,改用 ⌘↓ (Windows、Linux Ctrl+Down)⌥F2 (Windows Alt+F2、Linux Shift+Alt+F2),以與其他協助工具檢視對齊。

協助工具檢視中的動作

協助工具檢視中的動作可讓螢幕助讀程式使用者移至「下一個/上一個」、停用協助工具詳細資訊,以及針對特定功能執行更多動作。這些動作存在於檢視中方便的工具列上,以便保留目前的內容。

移至協助工具檢視中的符號

協助工具說明對話方塊和某些協助工具檢視現在具有**移至符號** (⇧⌘O (Windows、Linux Ctrl+Shift+O)) 動作,可讓您更快速地瀏覽內容。

執行後焦點移至終端機協助工具緩衝區

終端機現在具有 terminal.integrated.focusAfterRun 設定,讓使用者可以指定在叫用**終端機:在作用中終端機中執行選取的文字**時,應將焦點放在終端機的協助工具緩衝區 (accessible-buffer)、終端機本身 (terminal) 或都不放 (none)。

工作台

內建連接埠轉送

VS Code 現在具有內建連接埠轉送系統。此功能可讓您透過網際網路與其他人及裝置共用在本機執行的服務。若要使用此功能,請在面板區域中可用的**連接埠**檢視中選取**轉送連接埠**按鈕 (**連接埠:焦點放在連接埠檢視上**)。

Forward a Port button displayed in the Ports view

主題:Codesong (在 vscode.dev 上預覽)

連接埠轉送使用者指南中深入了解連接埠轉送。

命令中心預設為開啟

命令中心是在幾個月前推出的,作為快速探索和與 VS Code 互動的方式。您可以將其用作啟動平台,在命令面板中尋找命令、執行工作及其他快速體驗。我們一直在執行實驗,在標題列中顯示命令中心,並獲得正面意見反應,因此我們認為現在是預設啟用它的時候了。

以下影片示範如何使用命令中心,以及返回和前進按鈕。

我們看到命令中心在成為尋找 VS Code 中任何內容的中心方面具有巨大潛力,因此請期待未來有更多改進!

**注意**:如果您不希望命令中心可見,可以以滑鼠右鍵按一下標題列,然後取消選取下拉式清單中的 **命令中心** 項目以隱藏它。

控制如何從鍵盤或滑鼠關閉釘選的編輯器

有一個新的設定 workbench.editor.preventPinnedEditorClose,可更精細地控制釘選索引標籤如何回應鍵盤快速鍵或滑鼠中鍵按一下以關閉編輯器。根據預設,釘選索引標籤不會從鍵盤或滑鼠互動關閉 (預設值 keyboardAndMouse)。您可以據此變更此設定

  • keyboardAndMouse - 釘選索引標籤不會從鍵盤快速鍵或滑鼠中鍵按一下關閉 (自 1.82.x 以來的預設值)。
  • keyboard - 釘選索引標籤不會透過鍵盤快速鍵關閉 (直到 1.81.x 的預設值)。
  • mouse - 釘選索引標籤不會透過滑鼠中鍵按一下關閉。
  • never - 釘選索引標籤一律會從鍵盤快速鍵或滑鼠中鍵按一下關閉。

狀態列的新增和更新的可設定主題色彩

狀態列已為其項目提供許多可設定主題的色彩。現在有更多色彩可允許為主題設定暫留前景和背景色彩

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

下列兩個色彩名稱已更新,因為色彩不再適用於整個狀態列,而僅適用於遠端指示器

  • statusBar.offlineBackground 重新命名為 statusBarItem.offlineBackground
  • statusBar.offlineForeground 重新命名為 statusBarItem.offlineForeground

編輯器

固定捲動

這次反覆運算對固定捲動 UI 進行了幾項改進,可在編輯器頂端使用 (**檢視:切換固定捲動**)。

  • 現在,根據預設,當編輯器水平捲軸捲動時,固定捲動會橫向捲動。可以停用 editor.stickyScroll.scrollWithEditor 來關閉此功能。
  • 可以按住 Shift 鍵並將滑鼠指標暫留在固定捲動行上方,以檢視範圍的最後一行。按住 Shift 鍵時按一下行,會將編輯器游標移至範圍的最後一行。
  • 已將摺疊圖示新增至固定捲動邊界。這些圖示的轉譯會遵循設定 editor.showFoldingControls,其控制編輯器邊界中摺疊圖示的轉譯。

儲存時排序 JSON

現在可以在儲存時排序 JSON 或 JSONC (含註解的 JSON) 檔案。使用設定 json.sortOnSave.enable 來啟用此功能。

透過鍵盤導覽程式碼動作和快速修正

您現在可以透過輸入任何關鍵字或字母 (對應於可用的功能表選項),快速導覽快速修正、程式碼動作或原始檔控制功能表 (它們使用「動作」控制項)。篩選器使用模糊比對,搜尋不限於第一個字母或前置字元,也包含整個標籤文字。

Example of searching "Surround" or "Read" in the Refactor menu

差異編輯器

在此版本中,我們預設啟用新的差異編輯器。我們也改善了一些新的差異編輯器功能,並修正了許多錯誤。

移動的程式碼偵測

這次反覆運算中,我們潤飾了移動的程式碼偵測功能。可以使用 "diffEditor.experimental.showMoves": true 或在差異編輯器內容功能表中啟用。啟用後,會偵測到從相同檔案中的一個位置移動到不同位置的程式碼區塊,並繪製箭頭以指示程式碼區塊移動到哪裡。

程式碼移動也會在稍微修改時偵測到。**比較**按鈕可用於比較移動前後的區塊。

Moved code detection demo

已摺疊未變更的程式碼標頭

使用 "diffEditor.hideUnchangedRegions.enabled": true 或選取編輯器內容功能表中的地圖圖示,以啟用摺疊未變更的程式碼區塊。

在此版本中,現在有摺疊程式碼區塊的階層連結,可指出哪些符號已摺疊。按一下階層連結項目會顯示選取的項目

Collapsed code headers

動態配置

如果差異編輯器的寬度太小,編輯器會自動切換為行內檢視。如果編輯器再次夠寬,則會還原先前的配置。設定 "diffEditor.useInlineViewWhenSpaceIsLimited": false 以停用此行為。

按鈕切換狀態

我們更新了差異編輯器中按鈕的切換樣式,使其更為可見。

舊的切換樣式 (未切換和已切換),其中未切換的按鈕變暗

Old, untoggled dim buttons, Old, toggled

新的切換樣式 (未切換和已切換),其中已切換的背景已加上陰影

New, untoggled visible buttons, New, toggled with shaded background

終端機

控制終端機在啟動時的還原方式

新的設定 terminal.integrated.hideOnStartup 控制應用程式啟動時是否自動建立終端機。下列選項可供使用

  • never (預設):永遠不要在啟動時隱藏終端機檢視。
  • whenEmpty:僅在未還原持續性工作階段時隱藏終端機。
  • always:永遠隱藏終端機,即使已還原持續性工作階段也一樣。

停用括號貼上模式

括號貼上模式是終端機中的一項功能,可將貼上的文字包裝在特殊序列中,讓 Shell 可以使用該資訊。開啟此功能的 Shell 旨在正確支援此功能,但可能有原因導致其失敗,此時您可能會在貼上時意外看到類似 [201~ 的文字。現在可以明確停用此功能,即使 Shell 要求使用此功能,也會停用此功能。

終端機在執行後焦點設定

終端機現在具有 terminal.integrated.focusAfterRun 設定,讓使用者可以指定在叫用**終端機:在作用中終端機中執行選取的文字**時,是否應將焦點放在終端機上。其他選項是將焦點放在終端機的協助工具緩衝區 (accessible-buffer) 或都不放 (none)。

可調整大小的尋找

終端機的**尋找**控制項現在可以使用左側的窗格調整大小,與編輯器類似

Hover the left border of the Find control to see the resize handle

當滑鼠指標暫留或拖曳窗格以調整**尋找**控制項大小時,窗格會反白顯示。

停用 GPU 加速時更快的轉譯

「DOM 轉譯器」 (在停用 GPU 加速時使用) 的效能已大幅改善,這要歸功於 元件的重寫。重寫的重點是減少使用的 DOM 元素數量,而且終端機越大,節省的空間就越大。

在具有 117 欄和 36 列的終端機上測試典型的轉譯呼叫時,之前花費約 10 毫秒,之後花費約 2 毫秒。在測試電腦上將終端機大小增加到 300x100 時,記錄的轉譯之前花費約 25-35 毫秒,之後花費約 4-5 毫秒。

更好的選取範圍轉譯

當 GPU 加速關閉時,選取範圍轉譯現在與 webgl 轉譯器相同,而且所有背景都會變更為主題的選取範圍背景色彩,以確保良好的對比和一致性。

The background when selected will now be the same as the rest of the selection

針對變暗的文字,尊重一半的最小對比率

最小對比率功能可讓終端機更精細地控制終端機中的前景色彩,以確保它們以特定的對比率顯示。過去此功能的一個問題是,變暗的文字 (CSI 2 m) 也會尊重對比率,這表示它可能與一般文字一樣醒目。PowerShell 的自動完成虛擬文字是不適用此功能的一個範例。

變暗的文字現在將只有一半的對比需求。雖然這表示文字可能不再符合最小對比率,但現在它明顯不同於一般文字,這更重要。

Now dimmed text should be visually different for typical minimum contrast ratios

設定未聚焦時的游標外觀

現在可以使用 terminal.integrated.cursorStyleInactive 設定終端機中未聚焦時游標的外觀。這支援現有 terminal.integrated.cursorStyle 的所有樣式,加上 outline (預設) 和 none

The new inactive cursor styles are underline, block, line, outline and none

**開啟偵測到的連結** 命令 (⇧⌘G (Windows、Linux Ctrl+Shift+G)) 行為已變更,以維持高效能,同時讓搜尋整個終端機緩衝區中的連結變得更容易。先前,它只會為可視區域和稍微上方提供連結,而且結尾會有麻煩的 **顯示更多連結** 按鈕,以搜尋緩衝區的其餘部分

Previously the last entry must have been selected to search everything

現在會立即呈現可視區域中的連結,因此可以盡快顯示快速選取

Now initial results are restricted to the initial viewport

快速選取顯示後,就會在背景中偵測終端機緩衝區其餘部分的連結。在輸入以篩選時,VS Code 會等待所有結果,並將它們包含在篩選的結果中

Results from the entire buffer are included in the search when filtering begins

請注意,在輸入篩選器之前,不會包含 CodeQL.yml,因為它在可視區域之外。

現在終端機中會偵測到下列 GNU 樣式連結格式

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

偵錯

JavaScript 偵錯工具

WebAssembly 偵錯

JavaScript 偵錯工具現在會自動將 WebAssembly 模組反編譯為 WebAssembly 文字格式,並允許您逐步執行反編譯的模組並在其中設定中斷點。

Breakpoint hit during a WebAssembly debug session

主題:Codesong (在 vscode.dev 上預覽)

原始碼地圖載入改進

我們在此版本中對原始碼地圖的載入方式進行了許多改進

  • 在某些常見情況下,例如在使用 tsc 命令列編譯的應用程式中,原始碼地圖的載入速度快了 3-5 倍。
  • 現在支援來自 Vite 開發伺服器的熱模組重新載入。
  • 現在可以從已驗證的端點自動載入原始碼地圖。

測試

改善的狀態區域

**測試**檢視中篩選方塊下方的「狀態區域」現在更簡潔,也提供可按一下的動作來重新執行最近執行的測試。按住 Alt 鍵並按一下重新執行按鈕,將會改為偵錯這些測試。

Testing view status area displaying test result count, test timing, and rerun button

連結偵測現在會在顯示**測試輸出**的終端機中執行。檔案名稱、路徑和 URI 現在可按一下。

改善的測試關聯輸出體驗

測試擴充功能可以將主控台輸出與特定測試或位置建立關聯。先前,以此方式建立的每個輸出都會以自己的項目形式出現在**測試結果**檢視中,並在選取時在文字編輯器中開啟。

現在,它們會顯示在適當的終端機中,而導覽至輸出訊息會開啟該測試輸出的終端機,並選取訊息。

筆記本

複製儲存格輸出

儲存格輸出功能表現在包含將輸出複製到系統剪貼簿的選項。內容功能表也可以用於影像輸出,方法是以滑鼠右鍵按一下影像,然後選取 **複製輸出** 命令。

主題:Bearded Theme feat. Gold D Raynh (在 vscode.dev 上預覽)

語言

TypeScript 5.2

VS Code 現在隨附 TypeScript 5.2.2。此主要更新帶來新的 TypeScript 語言功能、更佳的效能,以及許多重要的改進和錯誤修正。您可以在 TypeScript 部落格上閱讀有關 TypeScript 5.2 的資訊。

移至檔案重構

JavaScript 和 TypeScript 的 **移至檔案** 重構可讓您將類別、函式或常數移至現有的檔案中。這也會自動更新符號的所有參考,並在需要時更新匯入

當您選取 **移至檔案** 時,VS Code 會顯示目前 TypeScript 或 JavaScript 專案中所有檔案的清單。您可以開始輸入以快速篩選至您想要的檔案。

或者,您可以使用 **選取現有檔案...** 使用一般檔案選取器選取檔案,或使用 **輸入新的檔案路徑...** 指定應建立的新檔案。

行內變數重構

JavaScript 和 TypeScript 的 **行內變數** 重構會將變數的所有出現次數取代為其常數值。

此重構在重寫現有程式碼時通常最有用。例如,當變數最終宣告然後立即傳回時,您可以使用行內變數來移除額外的宣告並直接傳回值

function add(a, b) {
  const result = a + b;
  return result;
}

result 上執行 inline variable 之後

function add(a, b) {
  return a + b;
}

可按一下的參數提示

您現在可以按一下參數提示,以快速跳至參數宣告。在使用內嵌提示開啟之後

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

按住 Ctrl/Cmd 並按一下參數名稱,以跳至該參數的宣告

我們計劃在即將發行的版本中,針對其他 JavaScript 和 TypeScript 內嵌提示啟用 **移至定義**。

遠端開發

遠端開發擴充功能可讓您使用 開發容器、透過 SSH 或 遠端通道的遠端機器,或 Linux 的 Windows 子系統 (WSL) 作為功能完整的開發環境。

重點包括

  • 更好的遠端 - 通道連線可靠性。
  • 新的 **在 WSL 中安裝 Docker** 命令。
  • 預先建置開發容器教學指南。

您可以在遠端開發版本資訊中深入了解新的擴充功能和錯誤修正。

擴充功能貢獻

GitHub Copilot

從聊天檢視建立工作區

您現在可以在 GitHub Copilot Chat 擴充功能的穩定組建中使用 /createWorkspace,從自然語言描述建立工作區。

我們也進行了下列改進

  1. 建議的工作區現在會以檔案樹狀結構的形式轉譯在聊天回應中。
  2. 您可以按一下檔案,以在編輯器中開啟唯讀預覽。
  3. 如果 Copilot 的初始建議不太正確,您可以提出後續問題,以協助 Copilot 反覆運算和改進。

在未命名的編輯器中使用行內聊天開始撰寫程式碼

現在當您開啟未命名的文字編輯器時,會有關於如何透過 ⌘I (Windows、Linux Ctrl+I) 開始行內聊天工作階段的提示。螢幕助讀程式使用者可以聽到此提示,並選擇使用 accessibility.verbosity.untitledHint 設定停用它。

快速聊天的改進

我們在幾個月前推出了快速聊天,並一直在快速反覆運算,以提供感覺專為 VS Code 設計的體驗。

這次反覆運算的重點

  • 更精簡的 UX。
  • 快速聊天現在會在焦點遺失時保持開啟。
  • 窗格和「捲動以成長」行為可調整視窗大小。
  • **開啟快速聊天** 現在位於命令中心中。

The Quick Chat window with a question and answer displayed

總體而言,UX 更精簡,以與其他「快速開啟」體驗 (例如命令面板) 對齊 (到處都更少邊框間距、使用者和 Copilot 圖示更小、按鈕為行內而不是在標題列中)。

根據預設,當您提出問題時,快速聊天會調整大小以專注於該問題和答案,以盡可能減少螢幕空間。我們也認為這有助於專注於您可能想要詢問 Copilot 的那些快速問題。您的對話記錄仍然可用,您可以向上捲動以返回過去。

由於此動態高度,我們也想要提供一種在您需要更多或更少空間時調整視窗大小的方式。有兩個選項可調整視窗大小。第一個是我們所謂的「捲動以成長」。如果您的快速聊天視窗因答案簡短而很小,但您想要查看先前的長答案,當您向上捲動時,快速聊天會成長到最大高度。

快速聊天的高度可以重設回僅顯示最後一個問題和答案,方法是執行下列其中一項操作

  • 關閉快速聊天並等待 30 秒。
  • 提出另一個問題或執行 /clear (請記住,/clear 會永久清除您的聊天記錄)。
  • 按兩下底部窗格。

說到窗格...我們在快速聊天的底部也有一個窗格,可用於手動調整快速聊天的高度。當您使用窗格時,您會選擇退出預設動態行為,並表示「我希望此高度在此處保持固定,直到重設為止」。

**注意**:如果您想要返回動態行為,請按兩下窗格或在聊天中輸入 /clear (/clear 會清除您的聊天記錄)。

最後但並非最不重要的一點是,您可以從命令中心使用 **開啟快速聊天** 選項啟動快速聊天。

Open Quick Chat command in the Command Center

解釋終端機選取範圍

Copilot 現在能夠透過在終端機的內容功能表 (根據平台而定,以滑鼠右鍵按一下或 Shift + 以滑鼠右鍵按一下) 中選取 **Copilot:解釋此項**,來解釋目前的終端機選取範圍。

The terminal context menu's first entry is Copilot: Explain This

**Copilot:解釋此項** 命令會顯示聊天檢視,Copilot 將在其中傳回詳細說明。

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

設定的自然語言搜尋

**設定**編輯器現在允許使用 GitHub Copilot Chat 進行自然語言搜尋。

自然語言搜尋結果目前位於關鍵字比對結果下方,並依相似度分數降冪排序,但我們計劃在下個月修正排序,以便搜尋結果繼續依其目錄群組排列。

自然語言搜尋目前依賴 Copilot 內嵌。因此,在內嵌可用之前 (也就是 GitHub Copilot Chat 擴充功能啟動後幾秒鐘),在**設定**編輯器中進行的搜尋不會顯示自然語言搜尋結果。

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

主題:Light Pink (在 vscode.dev 上預覽)

Python

新的 Python 格式化文章

有一個新的專用主題Python 格式化,您將在其中了解如何設定預設格式器 (例如 autopep8 或 Black) 並透過各種設定自訂它。

使用環境變數的終端機啟用

Python 擴充功能現在具有新的啟用機制,可在終端機中啟用選取的環境,而無需執行任何明確的啟用命令。本月,我們開始推出此機制作為實驗,使其成為預設體驗。透過新的方法,我們使用環境變數來啟用終端機,這會在終端機啟動時隱含地完成,因此速度更快,尤其對於 conda 環境而言。您可以新增下列 **使用者** 設定:"python.experiments.optInto": ["pythonTerminalEnvVarActivation"] 來試用。

如果您對此實驗有任何意見或建議,請隨時在 vscode-python issue #11039 中分享。

重新建立或使用現有的 .venv 環境

在已包含 .venv 資料夾的工作區中工作時,**Python:建立環境** 命令已更新選項,可重新建立或使用現有的環境。如果您決定重新建立環境,目前的 .venv 會被刪除,讓您可以重新建立名為 .venv 的新環境。然後,您可以依照 **Python:建立環境** 流程,選取慣用的解譯器並指定任何用於安裝的相依性檔案,來自訂此新環境。如果環境無法刪除 (例如,由於它是作用中的環境),系統會提示您手動刪除環境。

或者,如果您選擇使用現有的環境,則會為您的工作區選取環境。

預覽功能

我們正在實驗在 **快速存取** 功能表中顯示工作區搜尋結果。若要試用此功能,請執行 **搜尋:快速文字搜尋 (實驗性)**。此命令會設定 **快速開啟** 以接受搜尋查詢。輸入一些文字以查看來自不同工作區檔案的相符項目。

變暗未聚焦的編輯器和終端機

有一個新的實驗性功能,可變暗目前未聚焦的編輯器和終端機。此功能的目標是讓文字將移至何處比典型的閃爍游標更清楚。

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

上圖顯示已啟用變暗未聚焦功能,不透明度設定為 0.5,以便更清楚地顯示 terminalService.ts 的編輯器具有焦點。

可以使用 accessibility.dimUnfocused.enabled 啟用此功能,而變暗量則由 accessibility.dimUnfocused.opacity 控制。

此功能目前僅涵蓋編輯器和終端機,但計劃將其擴充,以允許使用者自行設定他們想要變暗的檢視

擴充功能撰寫

支援批次範圍格式化

DocumentRangeFormattingEditProvider API 現在支援批次格式化。這表示擴充功能可以選擇性地向編輯器發出訊號,表示它支援一次呼叫多個範圍。這有助於減少對格式提供者的呼叫次數,進而提高效能。

若要選擇加入批次格式化,提供者必須實作新的選擇性函式:provideDocumentRangesFormattingEdits

範圍限定於工作區資料夾的 EnvironmentVariableCollection

EnvironmentVariableCollection API 現在支援建立新的集合,其範圍限定於特定的工作區資料夾,並且除了「全域」集合之外還會套用。

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 擴充功能使用此機制,根據終端機在多根工作區中屬於哪個資料夾,設定不同的虛擬環境。

設定何時套用 EnvironmentVariableMutator

EnvironmentVariableCollection API 現在能夠在 Shell 整合指令碼內套用變更,該指令碼將在 Shell 初始化指令碼之後執行。這只會在啟用 Shell 整合時運作,因此如果變更至關重要,則可以在 Shell 建立時和 Shell 整合內部套用變更

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

當有問題的變數可能會被 Shell 初始化指令碼修改時,此功能很有用。

建議的 API

每個里程碑都會推出新的建議 API,而擴充功能作者可以試用它們。與往常一樣,我們想要您的意見反應。以下是試用建議 API 的步驟

  1. 尋找您想要試用的建議,並將其名稱新增至 package.json#enabledApiProposals
  2. 使用最新的 @vscode/dts 並執行 npx @vscode/dts dev。這會將對應的 d.ts 檔案下載到您的工作區。
  3. 您現在可以針對提案進行程式設計。

您不能發布使用建議 API 的擴充功能。下一個版本中可能會出現重大變更,而我們絕不希望破壞現有的擴充功能。

TestMessage 和貢獻點上的 contextValue

您可以為 TestMessage 提供 contextValue,以便在使用者對這些訊息採取動作時顯示。此外,還提供兩個新的選單貢獻點:testing/message/contexttesting/message/content。前者顯示在「測試結果」樹狀檢視中的訊息上,後者顯示在編輯器中的訊息上方。

請在 issue #190277 中閱讀更多關於 contextValue 的資訊。

終端機上下文選單貢獻

目前正在提案兩個新的選單,讓擴充功能能夠將自己的上下文選單動作整合到終端機中

  • terminal/context - 終端機上下文選單
  • terminal/title/context - 終端機索引標籤上下文選單

監聽終端機命令執行

擴充功能長期以來一直要求能夠監聽終端機命令執行 API,現在已推出早期提案供測試。此 API 是使用 shell integration 實作,並且僅會在啟用並運作 shell integration 的終端機上觸發。

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

此 API 的形狀尚未最終確定,但基本概念將保持不變。

以下範例示範如何監聽任何成功的 git push 命令,並在擴充功能中觸發重新整理

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

終端機選取範圍存取

一個簡單的建議 API,用於存取終端機選取範圍

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

此 API 很可能會包含一個對應的變更事件,然後才會最終確定,並且 API 名稱可能會變更,以更清楚地表明它是一個簡單的字串,而不是像 TextEditor.selection 那樣基於 Range

終端機快速修復進度

終端機快速修復提案現在可以觸發常規的 VS Code 命令,而不是終端機命令。此變更也因此需要變更終端機命令介面名稱

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

工程

Electron 25 更新

在此里程碑中,我們將 Electron 25 更新推廣給我們的穩定版使用者。此更新包含 Chromium 114.0.5735.289 和 Node.js 18.15.0。我們要感謝所有在 Insiders 組建上自行託管並提供早期意見反應的使用者。

Node.js 的更新重點

捆綁在我們的桌面應用程式和與我們的 伺服器 捆綁在一起的獨立可執行檔中的 Node.js 已從 v16 更新至 v18。鑑於這是一個主要版本升級,因此有一些行為和相容性變更

  • 來自作業系統的 DNS 結果順序 不再排序。我們已在本地和伺服器情境中,將 --dns-result-order=ipv4first 新增至我們的擴充功能主機,以避免破壞可能尚未採用此變更的擴充功能。展望未來,我們建議擴充功能在 socket.connect API 中使用 autoSelectFamily 選項,以適應結果順序變更。

  • 來自 官方 Node.js 儲存庫 的 Linux 預先建置二進位檔現在與基於 glibc 2.28 或更新版本的 Linux 發行版相容。這表示我們的伺服器將不再支援 Ubuntu 18、CentOS 7、RHEL 7 等。我們現在為我們的 Linux 伺服器提供 Node.js 的自訂組建,以維持 glibc 2.17 或更新版本的相容性。當我們不再能夠在 CentOS 7 映像上建置較新版本的 Node.js 時,此支援將在未來的更新中變更,因此我們建議受此變更影響的伺服器使用者更新其作業系統版本。

Chromium 的更新重點

  • Mesa 版本更新後,Chromium shader 編譯可能會損壞,導致應用程式 UI 中出現瑕疵。此問題已在 issue #190437 中追蹤,其中也包含指向 Chromium 錯誤報告的連結。您可以透過使用 --verbose 執行並在記錄中尋找以下行 ERROR:shared_context_state.cc(81)] Skia shader compilation error 來識別此問題。如果您受到此問題的影響,目前的解決方法是刪除位於 ~/.config/Code/GPUCache 的 GPU 快取。
  • 當 Chromium 為 webgl 使用 SwiftShader 後端時,似乎已在 Windows 和 Linux 上針對我們的整合式終端機造成效能衰退。作為一種解決方法,我們會根據 GL_RENDERER 字串偵測受影響的使用者,並將終端機切換到 DOM 後端。其他詳細資訊可以在 issue #190195 中找到,其中也包含指向 Chromium 錯誤報告的連結。

感謝您

最後但同樣重要的是,衷心感謝 VS Code 的貢獻者。

問題追蹤

對我們的問題追蹤的貢獻

提取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-hexeditor 的貢獻

vscode-js-debug 的貢獻

vscode-pull-request-github 的貢獻

vscode-vsce 的貢獻

  • @bandantonio (Antonio)
    • 功能:將使用者友善的資訊新增至 --help PR #884
    • 功能:新增在沒有授權檔案的情況下封裝和發布的支援 PR #887
    • 重新措辭 manifest 中不符的定價值的錯誤訊息 PR #890