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

2024 年 11 月 (版本 1.96)

更新 1.96.1:此更新解決了這些問題,並啟用了GitHub Copilot 免費計劃

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

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

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

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


歡迎使用 Visual Studio Code 2024 年 11 月釋出版。此版本包含許多更新,我們希望您會喜歡,其中一些主要亮點包括:

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新Insiders:想盡快嘗試新功能嗎?您可以下載每晚Insiders版本並儘快嘗試最新更新。

GitHub Copilot

GitHub Copilot 免費計劃

我們很高興地宣佈全新的 GitHub Copilot 免費層級。註冊GitHub Copilot 免費計劃,您只需要一個 GitHub 帳戶。您每月將獲得一定數量的完成和聊天互動,每月重置。

您可以直接在 VS Code 中註冊。按照Copilot 設定指南中的步驟操作。

Chat view shows the Copilot message and a button that enables you to sign in to use Copilot.

瞭解有關Copilot 免費計劃詳細資訊和條件的更多資訊。

Copilot 編輯

上一個里程碑,我們推出了Copilot 編輯(目前處於預覽階段),它允許您使用自然語言一次性快速編輯多個檔案。從那時起,我們不斷迭代體驗。您可以透過在命令中心開啟 Copilot 選單,然後選擇“開啟 Copilot 編輯”,或觸發來試用 Copilot 編輯。

進度和編輯器控制元件

Copilot 編輯可以對不同的檔案進行多項更改。您現在可以更清楚地看到其編輯流的進度。透過編輯器疊加控制元件,您可以輕鬆地迴圈檢視所有更改並接受或丟棄它們。

將聊天會話移動到 Copilot 編輯

您可以使用聊天檢視探索更改程式碼的一些想法。現在,您無需應用單獨的程式碼塊,而是可以將聊天會話移動到 Copilot 編輯以應用會話中的所有程式碼建議。

Edit with Copilot showing for a chat exchange.

工作集建議檔案

在 Copilot 編輯中,工作集決定了 Copilot 編輯可以建議更改的檔案。為了幫助您將相關檔案新增到工作集,對於 Git 倉庫,Copilot 編輯現在可以根據您已新增的檔案建議其他檔案。例如,Copilot 編輯將建議與您已新增的檔案經常一起更改的檔案。

Copilot 在工作集中的新增檔案按鈕旁邊顯示建議的檔案。您還可以選擇新增檔案,然後選擇相關檔案從建議的檔案列表中進行選擇。

重啟後恢復編輯會話

重啟 VS Code 後,編輯會話現在將完全恢復。這包括工作集、接受狀態以及所有過去編輯步驟的檔案狀態。

從資源管理器、搜尋和編輯器新增到工作集

您可以使用新的將檔案新增到 Copilot 編輯上下文選單操作,將檔案新增到 Copilot 編輯工作集,該操作適用於搜尋檢視中的搜尋結果和資源管理器檢視中的檔案。此外,您還可以從編輯器上下文選單中將文字選擇附加到 Copilot 編輯。

Add a file from the explorer view to Copilot Edits

使用 Copilot 除錯

配置除錯可能很棘手,尤其是在處理新專案或語言時。此里程碑,我們引入了一個新的 copilot-debug 終端命令,以幫助您使用 VS Code 除錯程式。您可以透過在通常執行的命令前加上 copilot-debug 來使用它。例如,如果您通常使用命令 python foo.py 執行程式,現在可以執行 copilot-debug python foo.py 來啟動除錯會話。

程式退出後,您可以選擇重新執行程式,或檢視、儲存或重新生成用於除錯程式的 VS Code 啟動配置

終端顯示除錯會話後重新執行、重新生成、儲存或啟動配置的選項。 主題:Codesong(在vscode.dev上預覽)

任務支援

Copilot 的除錯功能,包括 copilot-debug/startDebugging 意圖,現在會根據需要為需要在除錯前進行編譯的程式碼生成 preLaunchTask。對於編譯型語言,如 Rust 和 C++,情況通常如此。

新增上下文

我們添加了新的方法,可以將符號和資料夾作為上下文新增到 Copilot 聊天和 Copilot 編輯中,從而更容易在工作流程中引用相關資訊。

符號

現在可以透過將符號從“大綱檢視”或“麵包屑”拖放到“聊天檢視”中,輕鬆地將符號新增到 Copilot 聊天和 Copilot 編輯中。

我們還在聊天輸入中引入了符號補全。透過鍵入 # 後跟符號名稱,您將看到您最近處理過的檔案中的符號建議。

要引用整個專案中的符號,您可以使用 #sym 開啟全域性符號選擇器。

資料夾

現在可以透過將資料夾從資源管理器、麵包屑或其他檢視拖放到 Copilot 聊天中來將其新增為上下文。

當資料夾拖放到 Copilot 編輯中時,資料夾中的所有檔案都將包含在工作集中。

Copilot 使用圖

VS Code 擴充套件可以使用 VS Code API 構建在 Copilot 的功能之上。您現在可以在“執行時狀態”檢視中檢視擴充套件的 Copilot 使用圖。此圖顯示了過去 30 天內擴充套件發出的聊天請求數量。

Copilot usage graph in the Runtime Status view

提交訊息生成的自定義指令

Copilot 可以幫助您根據所做的更改生成提交訊息。此里程碑,我們添加了在生成提交訊息時支援自定義指令的功能。例如,如果您的提交訊息需要遵循特定格式,您可以在自定義指令中描述這一點。

您可以使用 github.copilot.chat.commitMessageGeneration.instructions 設定來指定自定義指令或指定包含自定義指令的工作區檔案。這些指令將附加到用於生成提交訊息的提示。獲取有關如何使用自定義指令的更多資訊。

內聯聊天

此里程碑,我們進一步改進了內聯聊天的使用者體驗:我們使進度報告更加微妙,在流式傳輸更改時停用波浪線,並更美觀地渲染檢測到的命令。

此外,我們繼續改進了虛擬碼檢測,現在當一行主要為自然語言時,會顯示提示您可以繼續使用內聯聊天。此功能允許您在編輯器中鍵入虛擬碼,然後將其用作內聯聊天的提示。您還可以透過按⌘I(Windows、Linux Ctrl+I來觸發此流程。

Inline Chat hint for a line that is dominated by natural language.

此外,還有一個新的實驗性設定,可以在空行上顯示內聯聊天提示。此設定可以透過 inlineChat.lineEmptyHint 啟用。預設情況下,此設定是停用的。

終端聊天

終端內聯聊天煥然一新,其外觀和感覺更接近編輯器內聯聊天

Terminal inline chat looks a lot like editor chat now

以下是一些值得注意的其他改進:

  • 小部件的佈局和位置得到改進,並且通常表現更好
  • 有一個模型選擇器
  • 底部按鈕現在更加一致

@workspace 的效能改進

當您使用@workspace向 Copilot 詢問您當前開啟的工作區時,我們首先需要將工作區縮小為一組相關的程式碼片段,我們可以將其作為上下文傳遞給 Copilot。如果您的工作區由 GitHub 倉庫支援,我們可以透過使用 Github 程式碼搜尋快速找到這些相關的片段。但是,由於程式碼搜尋索引跟蹤倉庫的主分支,我們無法依賴它進行本地更改或在分支上時。

此里程碑,我們致力於將 Github 搜尋的速度優勢帶到分支和拉取請求中。這意味著我們現在同時搜尋基於您的倉庫主分支的遠端索引,並搜尋任何本地更改的檔案。然後我們將這些結果合併在一起,為 Copilot 提供一組快速且最新的程式碼片段來使用。您可以閱讀有關Github 程式碼搜尋以及如何啟用它的更多資訊。

輔助功能

程式碼操作可訪問性訊號

有些程式碼操作可能需要很長時間才能完成,例如呼叫外部服務生成影像替代文字的快速修復。它們何時觸發或何時完全應用可能並不明顯。因此,我們添加了可訪問性訊號來指示程式碼操作已觸發或已應用。

您可以使用 accessibility.signals.codeActionTriggeredaccessibility.signals.codeActionApplied 設定啟用這些訊號。

REPL 中的自動焦點管理

我們引入了一個新設定,以改善在 REPL 中工作的可訪問性。透過 accessibility.replEditor.autoFocusReplExecution,您現在可以指定每當執行程式碼時,焦點是保持不變 (none)、移動到輸入框 (input) 還是轉移到最近執行的單元格 (lastExecution)。預設情況下,焦點移動到輸入框。

工作臺

改進的擴充套件搜尋結果

當您在“擴充套件”檢視中使用自由格式文字搜尋擴充套件時,已安裝的擴充套件現在會顯示在搜尋結果的頂部。這使得在搜尋 Marketplace 時更容易查詢和管理已安裝的擴充套件。

Installed extensions shown at top of search results.

從“擴充套件”檢視下載擴充套件

您現在可以透過在“擴充套件”檢視中擴充套件的上下文選單中使用下載操作,直接從 VS Code 下載擴充套件。如果您想在不安裝擴充套件的情況下下載它,這會很有用。

Context menu option to download an extension from the Extensions view.

擴充套件磁碟空間

您現在可以在“擴充套件”編輯器中檢視擴充套件在磁碟上的記憶體使用情況。這可以幫助您瞭解擴充套件正在使用多少磁碟空間。

Extension memory usage on disk shown in the Extensions view.

資源管理器中的查詢功能改進

在九月釋出版中,我們引入了在整個專案中在資源管理器中查詢檔案的功能,這是以前無法實現的。然而,此更新暫時刪除了高亮模式並限制了某些操作。

在此釋出版中,我們重新引入了高亮模式。此功能允許您輕鬆地在工作區中定位檔案和資料夾,並高亮顯示匹配結果以提高可見性。此外,我們還在摺疊的資料夾上引入了一個新的視覺指示器,顯示其中是否隱藏了匹配項。

篩選器開關仍然可用,使您能夠透過隱藏不匹配項來只關注與您的查詢匹配的檔案和資料夾。我們還重新啟用了我們必須在以前的版本中停用的所有上下文選單操作。

我們還改進了使用查詢控制元件時的使用者體驗。當滾動到檔案資源管理器的頂部時,會在頂部建立額外的空間,確保控制元件不會阻礙您的搜尋結果。

The find control is rendered above the first file or folder in the explorer when scrolled to the top.

在主側邊欄和輔助側邊欄之間移動檢視

您可以透過拖放或使用移動檢視命令將檢視容器移動到另一個位置。您現在可以直接在檢視容器上使用“移動到”上下文選單操作,以在主側邊欄、輔助側邊欄或面板區域之間移動它。

隱藏標題區域中的導航控制元件

有些人喜歡儘可能保持標題區域簡潔。我們添加了一個新設定 workbench.navigationControl.enabled,它允許您隱藏標題區域中的後退/前進按鈕。

您也可以透過右鍵單擊標題區域並選擇導航控制元件來訪問此設定。

Navigation Controls context menu when right-clicking the VS Code title area.

編輯器

配置貼上和拖放行為

當您將檔案拖放到文字編輯器中或複製並貼上到其中時,VS Code 提供了多種方式將其插入到該檔案中。預設情況下,VS Code 會嘗試插入檔案的相對於工作區的路徑。現在,您可以使用拖放/貼上控制元件來切換資源插入方式。擴充套件還可以提供自定義編輯,例如在 Markdown 中,它提供插入 Markdown 連結的編輯

藉助新的 editor.pasteAs.preferenceseditor.dropIntoEditor.preferences 設定,您現在可以指定預設使用的編輯型別偏好。例如,如果您希望複製/貼上始終插入貼上檔案的絕對路徑,只需設定

"editor.pasteAs.preferences": [
    "uri.path.absolute"
]

這些設定是編輯型別有序列表。首選型別的第一個匹配編輯將預設應用。在應用預設編輯後,您仍然可以使用拖放/貼上控制元件更改為不同型別的編輯。

這些新設定與我們JavaScript 和 TypeScript 中新增的複製和貼上匯入支援完美配合。此功能會在 JavaScript 或 TypeScript 檔案之間複製和貼上程式碼時自動新增匯入。為了避免干擾您的工作流程,預設情況下,我們決定貼上只插入純文字,而“貼上並匯入”作為選項在貼上控制元件中提供。但是,如果您希望 VS Code 始終嘗試貼上並匯入,只需設定

"editor.pasteAs.preferences": [
    "text.updateImports"
]

現在,VS Code 會在可能的情況下自動嘗試貼上並匯入,如果無法使用貼上並匯入的編輯,則會回退到貼上純文字。目前,這僅適用於 JavaScript 和 TypeScript,但我們希望隨著時間的推移,其他語言也會採用此支援。

最後,您現在還可以在設定 editor.action.pasteAs 鍵繫結時指定首選貼上樣式。以下鍵繫結將始終嘗試貼上並更新匯入

{
  "key": "ctrl+shift+v",
  "command": "editor.action.pasteAs",
  "args": {
    "preferences": ["text.updateImports"]
  }
}

持久化編輯器查詢歷史記錄

查詢控制元件現在可以跨會話持久化搜尋歷史記錄,並在 VS Code 重啟後恢復它。搜尋歷史記錄按工作區儲存,可以透過 editor.find.history 設定停用。

覆蓋模式

您知道嗎,除非您安裝了 Vim 鍵對映,否則 VS Code 不支援在編輯器中覆蓋文字?應大眾要求,我們現在添加了覆蓋模式,以便在輸入時覆蓋編輯器中的文字,而不是插入文字。一個有用的場景是在編輯 Markdown 表格時,您希望表格單元格邊界保持對齊。

此模式可以透過命令檢視:切換覆蓋/插入模式或使用鍵盤上的 Insert 鍵進行切換。當您處於覆蓋模式時,狀態列會顯示 OVR 指示器。

可以透過使用設定 editor.overtypeCursorStyle 在覆蓋模式下更改游標樣式。此外,還有一個設定 editor.overtypeOnPaste,它決定在覆蓋模式下貼上是覆蓋還是插入。預設行為是插入貼上的文字。

原始碼管理

Git blame 資訊(實驗性)

此里程碑,我們增加了對使用編輯器裝飾和狀態列專案顯示 blame 資訊的實驗性支援。您可以透過使用 git.blame.editorDecoration.enabledgit.blame.statusBarItem.enabled 設定啟用此功能。您可以將滑鼠懸停在 blame 資訊上以檢視更多提交詳細資訊。

您可以使用 git.blame.editorDecoration.templategit.blame.statusBarItem.template 設定自定義在編輯器和狀態列中顯示的訊息格式。您可以使用變數來獲取最常見的資訊。例如,以下模板顯示了提交的主題、作者姓名和相對於現在的作者日期

{
  "git.blame.editorDecoration.template": "${subject}, ${authorName} (${authorDateAgo})"
}

如果您想調整編輯器裝飾的顏色,請使用 git.blame.editorDecorationForeground 主題顏色。

請嘗試此實驗性功能,並告訴我們您的想法。

原始碼控制圖示題操作

根據使用者反饋,我們已將“拉取”和“推送”操作重新引入原始碼控制圖檢視標題欄。如果原始碼控制圖中顯示當前歷史項引用,則這些操作將啟用。

如果您不想使用這些操作,或原始碼控制圖檢視標題欄中的任何其他操作,您可以右鍵單擊標題欄並將其隱藏。

Source Control Graph title actions and context menu to hide specific items.

Notebook

跨單元格選擇高亮

現在筆記本中支援選擇高亮,允許跨多個單元格基於文字選擇進行高亮。這由現有的設定 editor.selectionHighlight 控制。

多游標:選擇所有查詢匹配項

筆記本現在支援“選擇所有查詢匹配項”的鍵盤快捷鍵。此命令 ID 為 notebook.selectAllFindMatches,預設情況下可透過按鍵⇧⌘L(Windows、Linux Ctrl+Shift+L使用。

在 Markdown 中執行節中的單元格

現在,筆記本的 Markdown 單元格工具欄中公開了“執行節中的單元格”操作。如果 Markdown 單元格有標題,則會執行節和子節中包含的所有單元格。如果沒有標題,則在可能的情況下,此操作會執行周圍節中的所有單元格。

單元格執行時間詳細程度

單元格狀態列中的執行時間資訊現在有一個選項可以增加詳細程度。這可以透過設定 notebook.cellExecutionTimeVerbosity 啟用,除了持續時間之外,它還可以顯示執行時間戳。

Verbose cell execution time within cell status bar.

終端

連字支援

現在,終端中支援連字,無論是否使用GPU 加速。此功能可以透過設定 terminal.integrated.fontLigatures 啟用。

Fonts that support ligatures like ->, ==>, and so on will now visually look like single characters

要使用此功能,請確保您還使用支援連字的字型 terminal.integrated.fontFamily

自定義終端選項卡的新變數

終端選項卡中顯示的文字由 terminal.integrated.tabs.titleterminal.integrated.tabs.description 設定決定,這些設定允許使用變數集合。我們現在支援以下新變數:

  • ${shellType} - 終端中使用的檢測到的 shell 型別。這類似於預設值,但例如在執行 git 命令時它不會更改為 git

  • ${shellCommand} - 終端中正在執行的命令。這需要shell 整合

    alt text

  • ${shellPromptInput} - 終端中正在執行的命令或當前檢測到的提示輸入。這需要shell 整合

    Typing "echo hello" in the terminal will show "echo hello|" in the tab when configured

執行最近的命令現在顯示歷史原始檔

“執行最近的命令”shell 整合功能現在包含命令源的全尺寸標題,包括相關的歷史檔案和方便的開啟按鈕。

alt text

此命令的預設鍵繫結是 Ctrl+Alt+R

格式為 /path/to/file.ext, <line> 的連結現在應該在終端中被檢測為連結。

測試

可歸因覆蓋率

此里程碑,我們最終確定了一個 API,使擴充套件能夠提供基於每個測試的覆蓋率,這樣您就可以準確地看到任何給定測試執行了哪些程式碼。當可歸因覆蓋率可用時,在“測試覆蓋率”檢視中、編輯器操作中、在“測試覆蓋率”工具欄(透過測試:測試覆蓋率工具欄命令切換)中,或者簡單地透過使用測試:按測試篩選覆蓋率命令,都可以使用篩選按鈕。

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

重構的內聯失敗訊息

我們重構了測試失敗訊息,使其既更引人注目又更不顯眼。這對於繁忙的場景特別有用,例如在 SCM 或 Copilot 編輯器的差異中。選擇失敗訊息仍然會開啟一個 Peek 控制元件以顯示失敗的完整詳細資訊。

Image of new test error messages in the editor.

持續執行 UI 的改進

以前,持續測試執行的全域性狀態(可透過“測試資源管理器”檢視中的“眼睛”圖示切換)將使用預設的一組執行配置檔案切換持續執行的開/關狀態。

我們重構了持續執行 UI,以包含一個下拉選單,用於按配置檔案單獨開啟或關閉持續執行。選擇指示器將開啟或關閉上次使用的執行配置檔案集。

語言

TypeScript 5.7

我們的 JavaScript 和 TypeScript 支援現在使用 TypeScript 5.7。此重大更新包含許多語言和工具改進,以及重要的錯誤修復和效能最佳化。

您可以在TypeScript 部落格上閱讀有關 TypeScript 5.7 釋出的所有資訊。我們還在以下部分中包含了一些工具亮點。

JavaScript 和 TypeScript 的匯入貼上

厭倦了在檔案之間移動程式碼後必須新增匯入?試試 TypeScript 5.7+ 的匯入貼上功能。現在,無論何時您在 JavaScript 或 TypeScript 之間複製和貼上程式碼,VS Code 都可以為貼上的程式碼新增匯入。

請注意,不僅添加了匯入,甚至還為貼上程式碼中使用的區域性變數添加了新的匯出!

雖然我們認為此功能非常省時,但我們也對干擾您現有工作流程感到敏感。因此,預設情況下,我們將其保留為複製和貼上始終只插入貼上的文字。如果“貼上並匯入”編輯可用,您將看到貼上控制元件,它允許您選擇“貼上並匯入”編輯。

Paste control that shows options to insert plain text or paste with imports.

如果您更喜歡始終貼上並匯入,您可以使用新的editor.pasteAs.preferences 設定

"editor.pasteAs.preferences": [
    "text.updateImports"
]

如果編輯可用,這將始終嘗試貼上並匯入。

您還可以設定一個鍵繫結,如果可用,則貼上並匯入

{
  "key": "ctrl+shift+v",
  "command": "editor.action.pasteAs",
  "args": {
    "preferences": ["text.updateImports"]
  }
}

如果您願意,您甚至可以反向操作,將“貼上並匯入”設為預設值,並新增一個鍵繫結以貼上為純文字

"editor.pasteAs.preferences": [
    "text.updateImports"
]
{
  "key": "ctrl+shift+v",
  "command": "editor.action.pasteAs",
  "args": {
    "preferences": ["text.plain"]
  }
}

最後,如果您想完全停用 paste with imports,可以使用 typescript.updateImportsOnPaste.enabledjavascript.updateImportsOnPaste.enabled

遠端開發

遠端開發擴充套件允許您透過 SSH 或遠端隧道使用開發容器、遠端機器或適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。

亮點包括:

  • remote-ssh Copilot 聊天參與者
  • 增強的會話日誌記錄

您可以在遠端開發釋出說明中瞭解有關這些功能的更多資訊。

企業支援

配置允許的擴充套件

您現在可以使用 extensions.allowed 設定控制哪些擴充套件可以在 VS Code 中安裝。此設定允許您按釋出者、特定擴充套件和版本指定允許或阻止的擴充套件。如果擴充套件或版本被阻止,則如果已安裝,它將被停用。您可以指定以下型別的擴充套件選擇器:

  • 允許或阻止來自發布者的所有擴充套件
  • 允許或阻止特定擴充套件
  • 允許特定擴充套件版本
  • 允許特定擴充套件版本和平臺
  • 只允許擴充套件的穩定版本
  • 只允許釋出者的穩定擴充套件版本

以下 JSON 片段顯示了不同設定值的示例

"extensions.allowed": {
    // Allow all extensions from the 'microsoft' publisher. If the key does not have a '.', it means it is a publisher ID.
    "microsoft": true,

    // Allow all extensions from the 'github' publisher
    "github": true,

    // Allow prettier extension
    "esbenp.prettier-vscode": true,

    // Do not allow docker extension
    "ms-azuretools.vscode-docker": false,

    // Allow only version 3.0.0 of the eslint extension
    "dbaeumer.vscode-eslint": ["3.0.0"],

    // Allow multiple versions of the figma extension
    "figma.figma-vscode-extension": ["3.0.0", "4.2.3", "4.1.2"],

    // Allow version 5.0.0 of the rust extension on Windows and macOS
    "rust-lang.rust-analyzer": ["5.0.0@win32-x64", "5.0.0@darwin-x64"],

    // Allow only stable versions of the GitHub Pull Requests extension
    "github.vscode-pull-request-github": "stable",

    // Allow only stable versions from redhat publisher
    "redhat": "stable"
}

按釋出者 ID 指定釋出者。如果鍵不包含句點 (.),則將其視為釋出者 ID。如果鍵包含句點,則將其視為擴充套件 ID。目前不支援使用萬用字元。

您可以使用 microsoft 作為釋出者 ID 來引用 Microsoft 釋出的所有擴充套件,即使它們可能具有不同的釋出者 ID。

不支援版本範圍。如果要允許擴充套件的多個版本,則必須單獨指定每個版本。要透過平臺進一步限制版本,請使用 @ 符號指定平臺。例如,"rust-lang.rust-analyzer": ["5.0.0@win32-x64", "5.0.0@darwin-x64"]。有關更多詳細資訊,請參閱企業文件

管理員還可以透過 Windows 上的組策略配置此設定。有關更多資訊,請參閱企業文件中的Windows 上的組策略部分。

使用預安裝的擴充套件設定 VS Code

您可以使用一組預安裝的擴充套件(引導)設定 VS Code。此功能在您準備機器映像、虛擬機器或雲工作站(其中 VS Code 已預安裝且特定擴充套件可立即供使用者使用)的情況下非常有用。

注意:目前僅在 Windows 上支援預安裝擴充套件。

按照以下步驟引導擴充套件

  1. 在 VS Code 安裝目錄中建立 bootstrap\extensions 資料夾。

  2. 下載您要預安裝的擴充套件的 VSIX 檔案,並將它們放入 bootstrap\extensions 資料夾中。

  3. 當用戶首次啟動 VS Code 時,bootstrap\extensions 資料夾中的所有擴充套件都會在後臺靜默安裝。

使用者仍然可以解除安裝預安裝的擴充套件。解除安裝擴充套件後重新啟動 VS Code 不會重新安裝該擴充套件。

對擴充套件的貢獻

Python

Python 環境擴充套件

在此版本中,我們推出了 Python 環境擴充套件,現已在 Marketplace 上提供預覽版。

此擴充套件簡化了 Python 環境管理,提供了一個用於建立、刪除和管理環境的 UI,以及用於安裝和解除安裝包的包管理。

它旨在透過各種 API 與您首選的環境管理器無縫整合,預設支援全域性 Python 直譯器、venv 和 Conda。開發人員可以構建擴充套件以新增對其喜歡的 Python 環境管理器的支援,並與我們的擴充套件 UI 整合,從而增強功能和使用者體驗。

您可以在 Marketplace 中下載 Python 環境,並將其與 Python 擴充套件的預釋出版本一起使用。

Python 測試增強

  • pytest 的 --rootdir 引數現在根據您的工作區中是否存在 python.testing.cwd 設定進行動態調整。
  • 重啟測試除錯會話現在只重新執行指定的測試。
  • 覆蓋率支援已更新以處理 NoSource 異常。
  • pytest-describe 外掛在 UI 中支援測試檢測和執行。
  • 測試重寫現在利用 FIFO 而不是 UDS 進行程序間通訊,允許使用者在自己的測試設計中利用 pytest_socket 等 pytest 外掛。
  • 重寫即將成為預設狀態:此版本解決了測試重寫中的最後一個已知問題,除非出現更多問題,否則重寫實驗將在 2025 年初關閉,重寫將設為預設狀態。

Python REPL 增強

  • 智慧傳送到 Native REPL 後,焦點停留在編輯器上
  • Native REPL 重新載入後的改進處理
  • 修復 VS Code 終端中 Python 3.13 的縮排錯誤問題

Pylance“完整”語言伺服器模式

python.analysis.languageServerMode 設定現在還支援 full 模式,使您能夠利用 Pylance 的全部功能和最全面的 IntelliSense 體驗。值得注意的是,這會犧牲較低的效能,因為它可能會導致 Pylance 佔用大量資源,尤其是在大型程式碼庫中。

python.analysis.languageServerMode 設定現在根據其是否設定為 lightdefaultfull 來更改以下設定的預設值

設定 light default full
python.analysis.exclude ["**"] [] []
python.analysis.useLibraryCodeForTypes false true true
python.analysis.enablePytestSupport false true true
python.analysis.indexing false true true
python.analysis.autoImportCompletions false false true
python.analysis.showOnlyDirectDependenciesInAutoImport false false true
python.analysis.packageIndexDepths [ { "name": "sklearn", "depth": 2 }, { "name": "matplotlib", "depth": 2 }, { "name": "scipy", "depth": 2 }, { "name": "django", "depth": 2 }, { "name": "flask", "depth": 2 }, { "name": "fastapi", "depth": 2 } ] [ { "name": "sklearn", "depth": 2 }, { "name": "matplotlib", "depth": 2 }, { "name": "scipy", "depth": 2 }, { "name": "django", "depth": 2 }, { "name": "flask", "depth": 2 }, { "name": "fastapi", "depth": 2 } ] { "name": "", "depth": 4, "includeAllSymbols": true }
python.analysis.regenerateStdLibIndices false false true
python.analysis.userFileIndexingLimit 2000 2000 -1
python.analysis.includeAliasesFromUserFiles false false true
python.analysis.functionReturnTypes false false true
python.analysis.pytestParameters false false true
python.analysis.supportRestructuredText false false true
python.analysis.supportDocstringTemplate false false true

TypeScript

TypeScript 可擴充套件懸停(實驗性)

此里程碑,我們實現了從 TS 伺服器檢視展開/摺疊資訊的功能。該擴充套件使用可擴充套件懸停 API 在編輯器懸停中顯示 +- 標記以顯示更多或更少的資訊。

可以使用 typescript.experimental.expandableHover 啟用實驗性設定。此設定要生效,您必須使用 TypeScript 5.8 或更高版本。您可以使用 TypeScript: Select TypeScript Version... 命令更改 TypeScript 版本。

Microsoft 帳戶現在使用 MSAL(在 Windows 上支援 WAM)

為了確保 Microsoft 身份驗證的強大安全基線,我們已在 Microsoft 帳戶擴充套件中採用了Microsoft 身份驗證庫

這項工作的突出功能之一是 WAM(Web 帳戶管理器……也稱為代理)整合。簡而言之,我們現在不是去瀏覽器進行 Microsoft 身份驗證流,而是直接與作業系統通訊,這是獲取 Microsoft 身份驗證會話的推薦方式。此外,它更快,因為我們能夠利用您已登入到作業系統上的帳戶。

An authentication popup that the OS shows over VS Code.

如果您在此新流程中遇到任何問題,請告訴我們。如果您確實發現了一個重大問題並需要恢復到舊的 Microsoft 身份驗證行為,您可以使用 microsoft-authentication.implementation(將其設定為 classic 並重新啟動 VS Code)來執行此操作,但請記住此設定不會再存在很長時間。因此,如果您在使用 MSAL 流時遇到問題,請開啟一個問題。

擴充套件開發

@vscode/chat-extension-utils

我們已經提供了聊天語言模型擴充套件 API 幾個月了,讓擴充套件作者能夠與 GitHub Copilot 整合。但是我們發現使用 LLM 和構建高質量的聊天擴充套件本身就很複雜,特別是如果您想使用工具呼叫。

我們釋出了一個 npm 包 @vscode/chat-extension-utils,旨在儘可能輕鬆地啟動和執行聊天參與者。它接管了您原本必須自己做的幾件事,這樣您的聊天參與者只需幾行程式碼即可實現。該包還包含一系列有用的高質量元素,可與 @vscode/prompt-tsx 一起使用。

您可以在chat-extension-utils 倉庫中檢視完整的文件,並在示例聊天擴充套件中檢視其執行情況。我們新的LanguageModelTool API 文件也描述瞭如何使用它。

可歸因覆蓋率 API

測試覆蓋率 API 現在使擴充套件能夠提供基於每個測試的覆蓋率資訊。要實現此 API,請填充 FileCoverage 上的 includesTests?: TestItem[] 屬性以指示哪些測試執行了該檔案中的程式碼,並實現 TestRunProfile.loadDetailedCoverageForTest 以提供語句和宣告覆蓋率。

請參閱上面的可歸因覆蓋率部分,瞭解使用者介面示例。

貢獻 JavaScript 除錯終端

JavaScript 偵錯程式現在有一種機制,允許其他擴充套件參與建立 JavaScript 除錯終端。這使得框架或 Node.js 以外的執行時能夠在熟悉的相同位置進行除錯。有關更多資訊,請參閱JavaScript 偵錯程式文件

Node.js fetch API 的代理支援

全域性 fetch 函式現在已啟用代理支援 (http.fetchAdditionalSupport)。這類似於已經具有代理支援的 https 模組。

預覽功能

貼上程式碼以附加聊天上下文

以前,您已經可以將檔案作為上下文附加到 Copilot 聊天。為了更精細地控制上下文,您現在可以貼上程式碼片段以將其作為聊天上下文附加。這會新增必要的檔案資訊和相應的行號。您只能貼上來自當前工作區檔案中的程式碼。

要試用此功能,請複製一些程式碼並將其貼上到內聯聊天、快速聊天或聊天檢視中。選擇出現的貼上控制元件並選擇“貼上的程式碼附件”。或者,您可以設定 editor.pasteAs.preferences 設定

"editor.pasteAs.preferences": [
    "chat.attach.text"
]

Attaching code as context in Copilot Chat using the paste control.

更多 shell 的終端自動完成

我們先前已在 pwsh 中添加了終端自動完成的實驗性支援。在此版本中,我們已開始將其擴充套件到其他 shell。目前主要針對 bashzsh,但由於這種新方法由擴充套件主機 API 提供支援,我們計劃支援大多數 shell。

您可以透過設定 terminal.integrated.suggest.enabledterminal.integrated.suggest.enableExtensionCompletions 來試用當前正在進行的工作。目前僅支援 cdcodecode-insiders 引數。

The command  is typed on the terminal, which shows suggestions. Then  is typed and options are provided,  is selected. Completions are requested with ctrl+space and all locales are shown.  is typed and the list is filtered to  and .

提議的 API

快速選擇中的建議值選擇 API

對於 InputBox,您已能夠設定“值選擇”,這使您能夠以程式設計方式選擇部分或全部輸入。此里程碑,我們為 QuickPick 中的值選擇添加了一個建議 API。

下面是它可能看起來的一個示例:

const qp = vscode.window.createQuickPick();
qp.value = '12345678';
qp.valueSelection = [4, 6];
qp.items = [
  { label: '12345678', description: 'desc 1' },
  { label: '12345678', description: 'desc 2' },
  { label: '12345678', description: 'desc 3' }
];
qp.show();

A couple of characters are selected in the quick pick's input box.

嘗試valueSelectionInQuickPick 提案,並透過此 GitHub 問題告訴我們您的想法!

擬議的本地視窗控制代碼 API

此里程碑,我們添加了一個新的擬議 API 來檢索焦點視窗的本地視窗控制代碼。本地視窗控制代碼是一個作業系統概念,它本質上提供了一個指向特定視窗的指標。如果您正在與原生代碼互動並且需要(例如)在視窗頂部渲染本地對話方塊,這將非常有用。

declare module 'vscode' {
  export namespace window {
    /**
     * Retrieves the native window handle of the current active window.
     * This will be updated when the active window changes.
     */
    export const nativeHandle: Uint8Array | undefined;
  }
}

這是專門為 Microsoft 身份驗證採用 MSAL 而新增的,這樣我們就可以將本地控制代碼傳遞給作業系統,以便它可以在 VS Code 頂部渲染身份驗證對話方塊。

如果您有使用案例或對nativeWindowHandle 提案的反饋,請透過此 GitHub 問題告訴我們您的想法!

工程

使用 vscode-unpkg 服務最佳化擴充套件更新

為了減少 Marketplace 基礎設施的負載,VS Code 現在使用 vscode-unpkg 服務中新增的端點來檢查擴充套件更新。該服務實現了伺服器端快取,TTL 為 10 分鐘,這顯著減少了對 Marketplace 的直接請求數量。此最佳化透過 extensions.gallery.useUnpkgResourceApi 設定(預設啟用)進行控制。

如果您發現擴充套件更新存在問題,您可以透過 extensions.gallery.useUnpkgResourceApi 停用此功能,並恢復到直接的 Marketplace 版本檢查。

編輯器中 GPU 加速的基礎工作

我們很高興地宣佈,我們已開始著手在編輯器中啟用 GPU 加速,類似於終端。這項工作的目標主要是透過減少輸入延遲和提高滾動效能來改善整體編碼體驗。

這仍處於早期階段,尚未準備好進行測試,但我們想分享一些關於已取得進展的細節

  • GPU 渲染器在幕後使用 WebGPU。
  • 我們目前主要關注功能對等性和正確性,而非效能。
  • 當啟用 GPU 加速時,存在一個回退機制,允許當線條不完全支援時“回退”到 DOM 渲染。這意味著我們可以早期自託管,並且目前不相容的線條將使用 DOM 方法顯示。目前回退的線條示例包括:超過 200 個字元的線條、帶有某些 Monaco 裝飾的線條(例如,淡出未使用的變數)、換行符的線條等等。
  • Monaco 的內聯裝飾允許設定包含字元的實際元素的樣式,這對此功能構成了巨大挑戰,因為它們使用 CSS 設定樣式。我們用於支援大多數內聯裝飾而不破壞或更改 API 的方法是檢測附加到這些裝飾的 CSS,然後支援常見 CSS 屬性的一個子集,如果不是所有樣式都支援則回退。

這是該功能執行時的螢幕截圖。請注意,裝訂線中的黃線告訴我們哪些線條正在使用回退渲染。此特定情況由於 dontShow 引數具有內聯裝飾而使用回退渲染,因為它未使用

GPU rendering looks mostly the same as DOM rendering currently, a yellow line appears for lines rendered via the DOM

跟蹤此工作的 issue 是#221145,其中有頻繁的更新和更多關於進展的詳細資訊。

macOS 10.15 的 EOL 警告

VS Code 桌面版將在接下來的幾個里程碑中更新到 Electron 33。隨著 Electron 33 的更新,VS Code 桌面版將不再在 macOS Catalina 上執行。在此里程碑中,我們已為受影響平臺的使用者添加了棄用通知,以讓他們為遷移做準備。如果您是上述 OS 版本的使用者,請檢視我們的 FAQ 以獲取更多資訊。

值得注意的修復

  • 233915 透過“擴充套件”檢視中擴充套件上下文選單中的“複製連結”操作與他人共享擴充套件。
  • 231542 經常無法儲存檔案或檔案資料因錯誤 EBUSY 而被刪除
  • 233304 onDidChangeCheckboxState 在 1.95 中損壞
  • 232263 最佳化樹檢視,使跨程序呼叫批次處理
  • 156723 使用 wayland 執行時修復拖放支援

感謝

最後但同樣重要的是,向 VS Code 的貢獻者們致以衷心的感謝

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-emmet-helper 的貢獻

vscode-eslint 的貢獻

vscode-extension-samples 的貢獻

vscode-extension-telemetry 的貢獻

vscode-hexeditor 的貢獻

vscode-json-languageservice 的貢獻

vscode-jupyter 的貢獻

vscode-mypy 的貢獻

vscode-python-debugger 的貢獻

vscode-python-tools-extension-template 的貢獻

vscode-test-web 的貢獻

inno-updater 的貢獻

language-server-protocol 的貢獻