🚀 在 VS Code 中

2024 年 5 月 (版本 1.90)

更新 1.90.2:此更新解決了這些問題

更新 1.90.1:此更新解決了這些問題

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


歡迎使用 Visual Studio Code 2024 年 5 月發行版本。此版本有許多更新,我們希望您會喜歡,其中一些主要重點包括

如果您想在線上閱讀這些版本資訊,請前往 code.visualstudio.com 上的更新Insiders: 想要盡快試用新功能嗎?您可以下載每晚組建的 Insiders 組建,並在最新更新可用時立即試用。

協助工具

從協助工具說明對話方塊設定快速鍵

協助工具說明對話方塊提供功能或檢視重要命令的概觀。當命令缺少快速鍵指派時,您現在可以從協助工具說明對話方塊中使用 ⌥K (Windows、Linux Alt+K) 進行設定。

實驗性功能:訊號延遲設定

當啟用設定 Debounce position changes 時,您可以使用設定 Signal options delays 自訂各種協助工具訊號的延遲時間。

工作台

編輯器索引標籤多選

您現在可以同時選取多個索引標籤,讓您能夠一次將動作套用至多個編輯器。這項新功能讓您能夠使用單一動作移動、釘選或關閉多個索引標籤。若要將另一個索引標籤新增至您的選取範圍,請使用 Ctrl + 按一下 (macOS 上為 Cmd + 按一下)。若要選取索引標籤範圍,請使用 Shift + 按一下

一律顯示編輯器動作

我們正在推出 Always Show Editor Actions 設定。當您啟用此設定時,每個編輯器群組的編輯器標題動作會一律顯示,無論編輯器是否為作用中狀態。

當未啟用此設定 (預設值) 時,編輯器動作只會在編輯器為作用中狀態時顯示

Editor Actions of each group when the setting is disabled

如果您啟用此設定,即使編輯器不是作用中狀態,編輯器動作也一律可用

Editor Actions of each group when the setting is enabled

將 disable-lcd-text 設定為執行階段引數

使用 disable-lcd-text,您可以停用 Windows 上的 RGB 子像素轉譯。disable-lcd-text 設定現在支援作為 argv.json 檔案中的執行階段引數。先前,它僅作為未記載的 CLI 旗標提供。使用喜好設定:設定執行階段引數命令來設定執行階段引數。

在下圖中,您可以看到並排比較,左側的 disable-lcd-texttrue,右側則為 false

Comparison showing that disable-lcd-text disables RGB subpixel rendering

佈景主題:淺粉紅色 (在 vscode.dev 上預覽)

設定新視窗的自訂設定檔

先前,當您開啟新的 VS Code 視窗時,它會使用作用中視窗的設定檔,如果沒有作用中視窗,則會使用預設設定檔。您現在可以透過設定 window.newWindowProfile 設定來指定開啟新視窗時應使用的設定檔。

Configure custom profile for new window

原始碼控制

焦點輸入/資源群組命令

在此里程碑中,我們新增了數個工作台命令,讓您可以為它們建立鍵盤快速鍵

  • 焦點放在下一個或上一個原始碼控制輸入欄位:workbench.scm.action.focusNextInputworkbench.scm.action.focusPreviousInput
  • 焦點放在存放庫內的下一個或上一個資源群組:workbench.scm.action.focusNextResourceGroupworkbench.scm.action.focusPreviousResourceGroup

筆記本

在儲存格選取範圍中尋找

當您在筆記本中時,現在可以使用 [尋找] 控制項在選取儲存格的特定範圍內搜尋。

在您將 notebook.experimental.find.scope.enabled 設定為 true 之後,[在儲存格選取範圍中尋找] 切換將在 [尋找] 控制項中可用。然後,您可以選取儲存格範圍,並開啟 [尋找] 控制項,或者,如果它已開啟,則選取 [在儲存格選取範圍中尋找] 按鈕。

筆記本格式化程式碼動作

筆記本現在支援一種新的程式碼動作,其使用 notebook.format 程式碼動作種類前置詞定義。這些程式碼動作可以透過明確的格式化要求 (使用筆記本:格式化筆記本命令) 或儲存時格式化要求自動觸發。

這些可用於透過使用工作區編輯和筆記本編輯來提供更強大的格式化。若要開始使用,請查看 vscode-extension-samples 存放庫中的範例擴充功能。

終端機

⚠️ 移除畫布轉譯器

畫布轉譯器已在 VS Code 1.89 版本中被取代,現在已完全移除。這表示在少數不支援 WebGL2 的電腦上,終端機現在使用以 DOM 為基礎的轉譯器。您可以在終端機文件中閱讀有關 GPU 加速的詳細資訊。

重新調整終端機中重疊字形的比例

在 VS Code 1.88 版本中作為預覽功能推出的設定 terminal.integrated.rescaleOverlappingGlyphs 現在預設為啟用。此功能會重新調整字形的比例,這些字形會重疊在後續儲存格上,這些儲存格旨在涵蓋寬度不明確的字元,而且可能具有字型字形,這些字形與後端 pty/unicode 版本認為的不同。

例如,在大多數字型中,羅馬數字 unicode 字元 (U+2160+) 通常會佔用多個儲存格,因此當啟用此設定時,它們會水平重新調整比例。

不重新調整比例

Before the glyphs for Ⅷ and Ⅻ depending on the font would always overlap the following cells

重新調整比例

After the glyphs for Ⅷ and Ⅻ depending on the font are rescaled horizontally to fit a single cell

擴充功能貢獻

GitHub Copilot

將內容附加至聊天

為了讓您的聊天提示更具體,您可以將內容新增至您的聊天訊息。您現在可以將更多類型的內容附加至聊天訊息,例如工作區符號。先前,您使用 '#' 符號來參考檔案或目前選取範圍。現在,您可以透過選取 [聊天] 檢視輸入欄位中的 📎 圖示,或輸入 ⌘/ (Windows、Linux Ctrl+/),將內容附加至聊天訊息。

提示:當您保持內容選取器開啟時,使用向右箭頭鍵在背景中快速附加內容。當您在編輯器中時,您也可以在選取範圍上按一下滑鼠右鍵,然後選擇Copilot > 將選取範圍新增至聊天

使用 Bing 搜尋和企業知識庫提出問題

VS Code 中的 GitHub Copilot Enterprise 使用者現在可以提出問題,這些問題會透過 Web 結果和您企業的知識庫中的內容來擴充。若要試用此功能,請安裝 Copilot Chat 的最新預先發行版本。

在 [聊天] 檢視中,您可以提出諸如 @github Node.js 的最新 LTS 是什麼?#web 之類的問題,以利用 Web 搜尋。Copilot 參考的任何搜尋結果都會顯示在聊天回應的 [使用的參考] 區段中。

Web search results in Copilot Chat

您也可以直接從 VS Code 提出有關您企業知識庫的問題,這些知識庫是包含文件的 Markdown 存放庫集合。只需輸入 @github #kb 即可從您可用的知識庫中選擇。同樣地,Copilot 參考的任何知識庫程式碼片段都會顯示在聊天回應的 [使用的參考] 區段中。

這讓 Copilot Enterprise 使用者能夠透過使用現有的聊天變數 (例如 #file#selection) 將搜尋結果和內部文件與編輯器內容結合。請試用看看,並在 https://github.com/microsoft/vscode-copilot-release 與我們分享您的意見反應!

聊天程式碼區塊中的 IntelliSense

我們現在支援 Copilot 產生的程式碼區塊中的基本 IntelliSense。這可讓您使用許多您可能已在編輯器中使用的相同 IntelliSense 工具,並可協助您更了解產生的程式碼。

Hover IntelliSense in Copilot chat code block

支援的 IntelliSense 功能包括

  • 使用 ctrl 按一下 / cmd 按一下F12 移至定義
  • 浮動提示
  • 移至實作
  • 移至類型定義

IntelliSense 甚至可以與 @workspace 搭配使用,以了解 Copilot 回應中使用的任何工作區符號。

TypeScript、JavaScript、HTML 和 CSS 程式碼區塊的 IntelliSense 已開箱即用。如需額外的語言支援,請嘗試安裝該語言的擴充功能,但並非每個語言擴充功能都已支援程式碼區塊 IntelliSense。請針對任何尚未支援此功能的語言提交功能要求。

我們透過新增檔案名稱和符號的連結來改善聊天回應。透過選取這些連結,您可以巡覽至編輯器中的對應檔案或符號。

Clickable links for symbols used with /explain

Clickable file and symbol links for an @workspace question

在內嵌聊天和 [聊天] 檢視之間漫遊作用中聊天

您現在可以將已完成或仍作用中的聊天要求從內嵌聊天移至 [聊天] 檢視。您可以使用此功能來清除內嵌聊天,並將對話移至更持久的位置。若要移動要求,請選取聊天輸入方塊旁的聊天圖示。

Move a chat conversation from inline chat to the Chat view

自動重新命名建議

如果您使用 Copilot Chat 擴充功能,當您重新命名符號時,現在會自動觸發由 Copilot 驅動的重新命名建議。您可以使用設定 github.copilot.renameSuggestions.triggerAutomatically 關閉此功能。

Python

測試錯誤修正

使用 Python 測試重寫時使用 pytest 的體驗已獲得改善,以便在 pytest 的 cwd 與 VS Code 工作區根目錄相鄰時,提供更好的支援來設定 pytest 的 cwd,並在跨類別重複函數名稱時,在測試總管上顯示參數化測試。

此外,我們透過將系統設定指令碼路徑新增至 PATH 以啟用測試執行的殼層,減少了一些測試探索失敗案例。

實驗性功能:具有 Intellisense 和語法醒目提示的 Python 原生 REPL

您現在可以在類似編輯器的 REPL 環境中執行 Python 程式碼,該環境配備 IntelliSense 和語法醒目提示等功能,以提高與 REPL 互動的效率。若要啟用此功能,請在您的 settings.json 檔案中設定 "python.REPL.sendToNativeREPL": true。這會在 Shift+Enter執行選取範圍/行中執行 Python 原生 REPL 中的程式碼。

您可以選擇使用終端機內 Python REPL ( >>> ),方法是在您的 settings.json 檔案中設定 "python.REPL.sendToNativeREPL": false。此外,如果您在您的 settings.json 檔案中新增設定 "interactiveWindow.executeWithShiftEnter": false,Python 原生 REPL 會在 Enter 上智慧地執行,與 Python 的原始互動式解譯器類似。

GitHub Pull Requests and Issues

GitHub Pull Requests 擴充功能上取得了更多進展,此擴充功能可讓您處理、建立和管理提取要求和問題。檢閱擴充功能 0.90.0 版本的變更記錄,以了解其他重點。

VS Code 語音

我們為 VS Code 語音擴充功能新增了文字轉語音功能支援。可以啟用新的設定 accessibility.voice.autoSynthesize,以在也使用語音作為輸入時自動讀出 Copilot Chat 回應。

請注意輸入欄位中的麥克風圖示如何變更,表示文字正在大聲讀出。若要中斷合成,請選取圖示或按下 Escape

每個聊天回應也會顯示一個新的喇叭圖示,以便您可以選擇性地大聲讀出回應

Text to Speech for a Chat Response

您可以透過現有的 accessibility.voice.speechLanguage 設定來變更用於文字轉語音的語言。

預覽功能

PowerShell 的 VS Code 原生 IntelliSense

除了數項可靠性改進之外,我們還對終端機中的 PowerShell IntelliSense 進行了以下變更

  • terminal.integrated.shellIntegration.suggestEnabled 已變更為 terminal.integrated.suggest.enabled
  • 新的 terminal.integrated.suggest.quickSuggestions 控制在您於空白字元後輸入時是否顯示建議
  • 新的 terminal.integrated.suggest.suggestOnTriggerCharacters 控制在您輸入 /\- 時是否顯示建議

TypeScript 5.5

我們持續改善對即將推出的 TypeScript 5.5 版本的支援。查看 TypeScript 5.5 beta 部落格文章迭代計畫,以了解此版本的詳細資訊。

若要開始使用 TypeScript 5.5 beta,請安裝 TypeScript Nightly 擴充功能。請分享意見反應,並讓我們知道您是否遇到任何 TypeScript 5.5 的錯誤。

Web 的問題回報程式

我們已改善 VS Code for Web 中的問題回報流程,使其與使用者目前在桌面上擁有的流程相符。選取說明:回報問題會在新的視窗中開啟問題回報程式頁面,使用者可以在其中選取錯誤類型、來源和擴充功能 (如有必要)。擴充功能資訊、系統資訊和更多資訊會自動附加至在 GitHub 中建立的問題。

此功能目前在此版本中預設為停用,但請開啟 issueReporter.experimental.webReporter 設定,分享有關此功能的意見反應。

擴充功能撰寫

使用 esbuild 進行擴充功能

適用於 TypeScriptWebyo code 擴充功能產生器現在具有使用 esbuild 作為套件組合器的選項。當您選取 esbuild 時,這會建立 esbuild.js 組建指令碼,並在 package.json 中新增指令碼項目,並在 .vscode/tasks.json 中新增組建工作。

若要在現有的擴充功能中使用 esbuild,請查看套件組合擴充功能 Web 擴充功能指南。

您可以在 vscode-extension-samples/esbuild-sample 找到範例專案。

聊天和語言模型 API

我們已完成 API,讓擴充功能能夠參與聊天並存取語言模型。請參閱擴充功能範例聊天擴充功能文件頁面以取得更多資訊,或觀看我們在 Microsoft Build 大會上發表的使用 GitHub Copilot 增強 VS Code 擴充功能演講。

重要:這些 API 已完成,但目前僅在 VS Code Insiders 中提供。

聊天參與者

聊天參與者 API 讓擴充功能能夠使用聊天參與者擴充 GitHub Copilot Chat,聊天參與者可以使用 @ 在聊天輸入欄位中叫用。參與者可以使用 Markdown、檔案樹狀結構、執行 VS Code 命令的按鈕或其他類型的內容回覆使用者要求。

Chat Participant example in the Chat view

語言模型

語言模型 API 能夠存取 Copilot 的聊天模型,例如 gpt-3.5 和 gpt-4。此 API 可以用於聊天參與者,也可以用於豐富其他功能。API 是圍繞LanguageModelChat 物件建置的,這些物件用於聊天要求和計算權杖。

存取聊天物件的唯一方法是 vscode.lm.selectChatModels 函數。此函數接受選取器,以縮小聊天模型的不同屬性範圍,例如依廠商、系列、版本或識別碼。這些值相對自由形式,必須在提供它們的擴充功能的文件中查閱。今天,只有 Copilot Chat 擴充功能貢獻聊天模型。它使用 copilot 廠商,目前的系列為 gpt-3.5-turbogpt-4,但可能會變更。

程式碼片段示範如何從 copilot 廠商選取所有聊天模型

const models = await vscode.lm.selectChatModels({
  vendor: 'copilot'
});

if (models.length === 0) {
  // no models available
  return;
}

呼叫 selectChatModels 時,有兩件事非常重要

  1. 如果沒有可用的模型,函數會傳回陣列,而且擴充功能必須處理此案例。
  2. Copilot 的聊天模型需要使用者同意,擴充功能才能使用它們。同意是作為驗證對話方塊實作的。因此,selectChatModels 應該作為使用者起始的動作 (例如命令) 的一部分呼叫,而不是「突然」呼叫。

有了可用的聊天物件,擴充功能現在可以使用它來傳送聊天要求。以下程式碼片段示範如何傳送聊天要求並處理回應串流。

// take the first model and say "Hello"
const [chat] = models;
const messages = [vscode.LanguageModelChatMessage.User('Hello')];
const response = await chat.sendRequest(messages);

// the response is always an async iterable that can be consumed with for-await
for await (const part of response.text) {
  console.log(part);
}

這是語言模型 API 的要點。請參閱擴充功能範例以取得更完整的範例。請繼續關注更多範例、文件和 API 的進一步擴充。

VS Code 的 Java 擴充功能已在使用語言模型 API,為您的 Java 程式碼提供以 Copilot 為基礎的重寫功能。在Visual Studio Code 上 Java 2024 年 5 月更新部落格文章中了解有關這些更新的詳細資訊。

@vscode/prompt-tsx 程式庫

為了協助開發 VS Code 的 GitHub Copilot 擴充功能,我們開發並發行了以 TSX 為基礎的程式庫,用於宣告複雜的提示並將其轉換為聊天訊息,但須受限於 LLM 的內容視窗限制。在開發此程式庫時,我們從 Anysphere 的 priompt 程式庫獲得靈感。如果您是計畫使用聊天和語言模型 API 的擴充功能作者,請考慮試用此程式庫的最新 alpha 版本:@vscode/prompt-tsx

透過 GitHub 應用程式擴充 GitHub Copilot

也可以透過貢獻 GitHub 應用程式來擴充 GitHub Copilot。此 GitHub 應用程式可以在 [聊天] 檢視中貢獻聊天參與者,您可以使用 @ 叫用該聊天參與者。GitHub 應用程式由服務支援,並跨所有 GitHub Copilot 介面運作,例如 github.com、Visual Studio 或 VS Code。GitHub 應用程式無法完全存取 VS Code API。若要透過 GitHub 應用程式擴充 GitHub Copilot,您應該加入 Copilot 合作夥伴計畫。您可以觀看我們在 Microsoft Build 大會上發表的擴充 GitHub Copilot 演講,以了解更多資訊。

偵錯堆疊焦點 API

VS Code 現在透過新的 API 公開偵錯檢視中焦點所在的堆疊框架和執行緒。vscode.debug.activeStackItem 擷取目前焦點所在的堆疊項目 (執行緒或堆疊框架),而 vscode.debug.onDidChangeActiveStackItem 是在該項目變更時觸發的事件。

這與擴充 VS Code 偵錯功能的 API (例如使用 DebugAdapterTracker 的 API) 結合使用時非常有用。深入了解如何建立偵錯工具擴充功能

TestRunRequest.preserveFocus API

先前,由擴充功能觸發的測試執行永遠不會像 UI 起始的執行一樣將焦點移至 [測試結果] 檢視。此行為現在可以透過建立 TestRunRequest 時可以設定的 preserveFocus 旗標進行設定。此旗標預設為 true,以維持回溯相容性。

建議的 API

可歸因的測試涵蓋率

我們正在開發 API,以啟用在每個測試基礎上歸因測試涵蓋率。這讓使用者可以查看哪些測試執行了哪些程式碼,篩選編輯器中顯示的涵蓋率和測試涵蓋率檢視中的涵蓋率。查看 vscode#212196 以取得更多資訊和更新。

浮動提示詳細程度

在上一個里程碑中,提出了一個新的 API,以提供可以增加或減少詳細程度的浮動提示。在此里程碑中,API 已變更,因此 HoverVerbosityRequest 使用 verbosityDelta 來發出浮動提示詳細程度的相對增加或減少訊號。先前,HoverVerbosityRequest 使用列舉 HoverVerbosityAction 來發出是否應增加或減少詳細程度的訊號。

工程

追蹤啟動時的記憶體效率

我們每天在 Windows、macOS 和 Linux 上測量 VS Code insiders 的啟動效能。我們主要感興趣的是啟動速度,直到開啟文字檔案為止。

本月,我們新增了另一個計畫改善的計量,以使啟動速度更快:我們消耗多少記憶體,以及有多少記憶體最終被 V8 垃圾收集回收。如果我們可以降低此數字,啟動時間將不會受到 V8 垃圾收集執行的影響。

Memory consumption statistics for VS Code

Electron 29 更新

在此里程碑中,我們正在將 Electron 29 更新升級至穩定版本的使用者。此更新隨附 Chromium 122.0.6261.156 和 Node.js 20.9.0。我們要感謝所有在 Insiders 組建上自行託管並提供早期意見反應的人員。

值得注意的修正

  • 212386 本機歷程記錄:不會保留先前已刪除檔案的項目
  • 213645 輔助視窗在 Firefox 中無法運作
  • vscode-js-debug#2000/2002 JavaScript 偵錯工具速度更快,尤其是在處理來源對應重新命名時

感謝您

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

問題追蹤

對我們問題追蹤的貢獻

提取要求

vscode 的貢獻

vscode-eslint 的貢獻

vscode-extension-samples 的貢獻

vscode-generator-code 的貢獻

vscode-hexeditor 的貢獻

vscode-languageserver-node 的貢獻

vscode-mypy 的貢獻

vscode-remote-try-dotnet 的貢獻

language-server-protocol 的貢獻

monaco-editor 的貢獻