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

2024 年 5 月 (1.90 版)

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

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

下載:Windows:x64 Arm64 | Mac:通用 Intel Apple 晶片 | 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 + 單擊

始終顯示編輯器操作

我們引入了 始終顯示編輯器操作 設定。啟用此設定後,每個編輯器組的編輯器標題操作將始終顯示,無論編輯器是否處於活動狀態。

當設定未啟用時(預設值),編輯器操作僅在編輯器處於活動狀態時顯示。

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

在單元格選擇中查詢

在筆記本中時,您現在可以使用查詢控制元件在選定單元格的特定範圍內進行搜尋。

notebook.experimental.find.scope.enabled 設定為 true 後,“在單元格選擇中查詢”開關將在查詢控制元件中可用。然後,您可以選擇一系列單元格,並開啟查詢控制元件,或者如果它已開啟,選擇“在單元格選擇中查詢”按鈕。

筆記本格式化程式碼操作

筆記本現在支援一種新型的程式碼操作,它以 notebook.format 程式碼操作種類字首定義。這些程式碼操作可以透過顯式格式化請求(使用命令 筆記本:格式化筆記本)或儲存時格式化請求自動觸發。

這些可以透過使用工作區編輯和筆記本編輯來提供更強大的格式化。要開始使用,請檢視 vscode-extension-samples 儲存庫中的示例擴充套件。

終端

⚠️ Canvas 渲染器已移除

Canvas 渲染器已在 VS Code 1.89 版本中棄用,現在已完全移除。這意味著在少數不支援 WebGL2 的機器上,終端現在使用基於 DOM 的渲染器。您可以在終端文件中瞭解有關 GPU 加速的更多資訊。

終端中重疊字形的重新縮放

設定 terminal.integrated.rescaleOverlappingGlyphs 在 VS Code 1.88 版本中作為預覽功能引入,現在預設啟用。此功能會重新縮放與旨在覆蓋歧義寬度字元的後續單元格重疊的字形,並且這些字形的字型可能與後臺 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 > 新增選擇到聊天

使用必應搜尋和企業知識庫提問

VS Code 中的 GitHub Copilot Enterprise 使用者現在可以提問,這些問題會透過網路結果和您的企業的知識庫的上下文進行豐富。要試用此功能,請安裝 Copilot Chat 的最新預釋出版本。

在聊天檢視中,您可以提問,例如 @github Node.js 的最新 LTS 是什麼? #web,以利用網路搜尋。Copilot 引用的任何搜尋結果都會顯示在聊天回覆的 Used References 部分。

Web search results in Copilot Chat

您還可以直接從 VS Code 詢問有關您企業的知識庫的問題,這些知識庫是包含文件的 Markdown 儲存庫集合。只需鍵入 @github #kb 即可從您可用的知識庫中進行選擇。同樣,Copilot 引用的任何知識庫片段都會顯示在聊天回覆的 Used References 部分。

這使得 Copilot Enterprise 使用者能夠透過使用現有聊天變數(例如 #file#selection)將搜尋結果和內部文件與編輯器上下文結合起來。請試用並向我們分享您的反饋:https://github.com/microsoft/vscode/issues

聊天程式碼塊中的 IntelliSense

我們現在支援 Copilot 生成的程式碼塊中的基本 IntelliSense。這使您可以使用與您在編輯器中可能已經使用的許多相同的 IntelliSense 工具,並可以幫助您更好地理解生成的程式碼。

Hover IntelliSense in Copilot chat code block

支援的 IntelliSense 功能包括

  • 使用 ctrl 單擊 / cmd 單擊F12 轉到定義
  • 懸停資訊
  • 轉到實現
  • 轉到型別定義

IntelliSense 甚至可以與 @workspace 一起使用,以瞭解 Copilot 回覆中使用的任何工作區符號。

TypeScript、JavaScript、HTML 和 CSS 程式碼塊的 IntelliSense 開箱即用。為了獲得額外的語言支援,請嘗試安裝該語言的擴充套件,儘管並非所有語言擴充套件都已支援程式碼塊 IntelliSense。請為尚未支援此功能的任何語言提交功能請求。

我們透過新增檔名和符號的連結改進了聊天回覆。透過選擇這些連結,您可以在編輯器中導航到相應的 G 檔案或符號。

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 以啟用 shell 進行測試執行,減少了一些測試發現失敗場景。

實驗性:帶 Intellisense 和語法高亮顯示的 Python 原生 REPL

您現在可以在類似編輯器的 REPL 環境中執行您的 Python 程式碼,該環境配備了 Intellisense 和語法高亮顯示等功能,以使與 REPL 的互動更高效。要啟用此功能,請在您的 settings.json 檔案中設定 "python.REPL.sendToNativeREPL": true。這將在 Shift+Enter執行選擇/行 時在 Python 原生 REPL 中執行程式碼。

您可以透過在 settings.json 中設定 "python.REPL.sendToNativeREPL": false 來選擇使用終端中的 Python REPL (>>>)。此外,如果您在 settings.json 中新增設定 "interactiveWindow.executeWithShiftEnter": false,Python 原生 REPL 將在 Enter 鍵上智慧執行,類似於 Python 的原始互動式直譯器。

GitHub 拉取請求和議題

GitHub Pull Requests 擴充套件取得了更多進展,該擴充套件使您能夠處理、建立和管理拉取請求和問題。檢視擴充套件 0.90.0 版本的更改日誌 以瞭解其他亮點。

VS Code Speech

我們為 VS Code 語音 擴充套件添加了文字轉語音功能。可以啟用新設定 accessibility.voice.autoSynthesize,以便在語音也用作輸入時自動朗讀 Copilot 聊天回覆。

請注意輸入欄位中的麥克風圖示如何變化,表示正在朗讀文字。要中斷合成,請選擇圖示或按 Escape

每個聊天回覆還顯示一個新的揚聲器圖示,以便您可以選擇性地朗讀回覆。

Text to Speech for a Chat Response

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

預覽功能

VS Code 原生 PowerShell 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 Web 版中的問題報告流程,使其與使用者當前在桌面版中使用的流程相匹配。選擇 幫助:報告問題 會在新視窗中開啟問題報告頁面,使用者可以在其中選擇錯誤型別、來源和必要的擴充套件。擴充套件資訊、系統資訊等會自動附加到在 GitHub 中建立的問題。

此功能在此版本中目前預設停用,但請透過開啟 issueReporter.experimental.webReporter 設定來分享您的反饋。

擴充套件創作

將 esbuild 用於擴充套件

yo code 擴充套件生成器對於 TypeScriptWeb 現在有一個選項可以使用 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 Apps 擴充套件 GitHub Copilot

還可以透過貢獻 GitHub App 來擴充套件 GitHub Copilot。這個 GitHub App 可以在聊天檢視中貢獻一個聊天參與者,您可以透過 @ 呼叫它。GitHub App 由一個服務支援,並且適用於所有 GitHub Copilot 表面,例如 github.com、Visual Studio 或 VS Code。GitHub Apps 無法完全訪問 VS Code API。要透過 GitHub App 擴充套件 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 啟動的執行那樣將焦點移到“測試結果”檢視中。此行為現在可以透過一個 preserveFocus 標誌進行配置,該標誌可以在建立 TestRunRequest 時設定。此標誌預設為 true 以保持向後相容性。

提議的 API

可歸因測試覆蓋率

我們正在開發一個 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 的貢獻