2024 年 11 月 (版本 1.96)
更新 1.96.1:此更新解決了這些 問題,並啟用了 GitHub Copilot 免費版。
更新 1.96.2:此更新解決了這些 問題。
更新 1.96.3:此更新解決了這些 問題。
更新 1.96.4:此更新解決了這些 問題。
下載:Windows:x64 Arm64 | Mac:通用版 Intel Silicon | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2024 年 11 月版本。此版本中有許多更新,我們希望您會喜歡,其中一些主要亮點包括:
- GitHub Copilot 免費版 - 使用 GitHub Copilot 免費版,免費使用 Copilot。
- 覆蓋模式 - 在編輯器中切換覆蓋或插入模式。
- 貼上時新增匯入 - 在貼上程式碼時自動新增缺少的 TS/JS 匯入。
- 測試覆蓋率 - 快速篩選出特定測試覆蓋的程式碼。
- 移動檢視 - 輕鬆地將檢視在主側邊欄和輔助側邊欄之間移動。
- 終端連字 - 在終端中使用連字。
- 允許的擴充套件列表 - 配置您的組織可以安裝哪些擴充套件。
- 使用 Copilot 除錯 - 使用
copilot-debug終端命令啟動除錯會話。 - 聊天上下文 - 將符號和資料夾新增為聊天和編輯的上下文。
- 從聊天轉移到 Copilot 編輯 - 切換到 Copilot 編輯以應用來自聊天的程式碼建議。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新。Insiders:想盡快嘗試新功能嗎?您可以下載每晚Insiders版本並儘快嘗試最新更新。
GitHub Copilot
GitHub Copilot 免費版
我們很高興地宣佈推出全新的 GitHub Copilot 免費套餐。註冊 GitHub Copilot 免費版,您只需要一個 GitHub 賬戶。您每月可獲得一定數量的補全和聊天互動次數,每月重置。
您可以直接從 VS Code 中註冊。請按照 Copilot 設定指南中的步驟操作。

詳細瞭解 Copilot 免費版的詳細資訊和條件。
Copilot 編輯
在上一個里程碑中,我們推出了 Copilot Edits(目前處於預覽狀態),它允許您使用自然語言一次性快速編輯多個檔案。從那時起,我們不斷迭代改進此體驗。您可以透過開啟命令中心中的 Copilot 選單,然後選擇“開啟 Copilot Edits”,或透過觸發 來嘗試 Copilot Edits。
進度和編輯器控制元件
Copilot Edits 可以對不同檔案進行多項更改。您現在可以更清晰地看到編輯流式傳輸時的進度。透過編輯器覆蓋控制元件,您可以輕鬆地在所有更改之間迴圈,並接受或拒絕它們。
將聊天會話轉移到 Copilot Edits
您可能會使用聊天檢視來探索一些有關修改程式碼的想法。現在,您可以將聊天會話轉移到 Copilot Edits,而不是應用單個程式碼塊,以應用會話中的所有程式碼建議。

工作集建議檔案
在 Copilot Edits 中,工作集決定了 Copilot Edits 可以建議更改的檔案。為了幫助您將相關檔案新增到工作集中,對於 Git 儲存庫,Copilot Edits 現在可以根據您已新增的檔案建議其他檔案。例如,Copilot Edits 會建議與您已新增的檔案經常一起更改的檔案。
Copilot 在“新增檔案”按鈕旁邊顯示建議檔案。您還可以選擇“新增檔案”,然後選擇“相關檔案”以從建議檔案列表中進行選擇。
重啟後恢復編輯會話
重啟 VS Code 後,編輯會話現在將完全恢復。這包括工作集、接受狀態以及所有過去編輯步驟的檔案狀態。
從資源管理器、搜尋和編輯器新增工作集
您可以透過在搜尋檢視中的搜尋結果以及資源管理器檢視中的檔案上使用新的“新增檔案到 Copilot Edits”上下文選單操作,將檔案新增到 Copilot Edits 工作集。此外,您還可以從編輯器上下文選單中將文字選擇附加到 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 Chat 和 Copilot Edits 中包含符號和資料夾作為上下文,從而更輕鬆地在工作流中引用相關資訊。
符號
現在可以透過從大綱檢視或麵包屑檢視將符號拖放到聊天檢視中,輕鬆地將符號新增到 Copilot Chat 和 Copilot Edits。
我們還引入了聊天輸入中的符號補全。透過輸入 # 後跟符號名稱,您將看到來自您最近處理過的檔案的符號建議。
要引用整個專案中的符號,您可以使用 #sym 開啟全域性符號選擇器。
資料夾
現在可以透過將資料夾從資源管理器、麵包屑或其他檢視拖放到 Copilot Chat 中,將其新增為上下文。
當資料夾被拖放到 Copilot Edits 中時,該資料夾中的所有檔案都將被包含在工作集中。
Copilot 使用圖表
VS Code 擴充套件可以使用 VS Code API 構建 Copilot 功能。您現在可以在執行時狀態檢視中看到擴充套件的 Copilot 使用情況圖表。此圖表顯示了擴充套件在過去 30 天內發出的聊天請求數量。

提交訊息生成的自定義說明
Copilot 可以幫助您根據所做的更改生成提交訊息。在此里程碑中,我們增加了對生成提交訊息時自定義說明的支援。例如,如果您的提交訊息需要遵循特定格式,您可以在自定義說明中進行描述。
您可以使用 github.copilot.chat.commitMessageGeneration.instructions 設定來指定自定義說明或指定包含自定義說明的工作區檔案。這些說明將被附加到用於生成提交訊息的提示中。瞭解如何使用自定義說明。
內聯聊天
在此里程碑中,我們進一步改進了行內聊天的使用者體驗:我們使進度報告更加微妙,流式傳輸更改時停用了波浪線,並且檢測到的命令渲染得更好了。
此外,我們繼續改進了虛擬碼檢測,現在會顯示一個提示,表明您可以在行內聊天時繼續,當一行大部分是自然語言時。此功能允許您在編輯器中輸入虛擬碼,然後將其用作行內聊天的提示。您也可以透過按 來觸發此流程。

此外,還有一個新的實驗性設定,可以在空行上顯示行內聊天提示。此設定可以透過 inlineChat.lineEmptyHint 啟用。預設情況下,此設定是停用的。
終端聊天
終端行內聊天煥然一新,使其外觀和感覺更接近編輯器行內聊天。

以下是我們在此期間進行的一些其他值得注意的改進:
- 小部件的佈局和定位得到了改進,並且總體上表現更好。
- 有一個模型選擇器。
- 底部的按鈕現在更加一致。
@workspace 的效能改進。
當您使用 @workspace 向 Copilot 詢問有關當前開啟的工作區的相關資訊時,我們首先需要將工作區縮小到一組相關的程式碼片段,然後將其作為上下文提供給 Copilot。如果您的工作區由 GitHub 儲存庫支援,我們可以透過使用 Github 程式碼搜尋快速找到這些相關的程式碼片段。但是,由於程式碼搜尋索引會跟蹤您儲存庫的主分支,因此我們無法依賴它來處理本地更改或分支。
在此里程碑中,我們致力於將 GitHub 搜尋的速度優勢擴充套件到分支和拉取請求。這意味著我們現在會搜尋基於您儲存庫主分支的遠端索引,以及搜尋任何本地更改的檔案。然後,我們將這些結果合併在一起,為 Copilot 提供一個快速且最新的程式碼片段集。您可以閱讀更多關於 Github 程式碼搜尋及其啟用方法的資訊。
輔助功能
程式碼操作可訪問性訊號
一些程式碼操作可能需要很長時間才能完成,例如一個呼叫外部服務來生成影像 alt 文字的快速修復。可能不容易知道何時觸發它們,或者何時完全應用它們。因此,我們添加了可訪問性訊號來指示已觸發或應用了程式碼操作。
您可以使用 accessibility.signals.codeActionTriggered 和 accessibility.signals.codeActionApplied 設定來啟用這些訊號。
REPL 中的自動焦點管理
我們引入了一個新設定,以提高在 REPL 中工作的可訪問性。透過 accessibility.replEditor.autoFocusReplExecution,您現在可以指定每次執行程式碼時焦點是保持不變(none)、移動到輸入框(input)還是移到最近執行的單元格(lastExecution)。預設情況下,焦點會移到輸入框。
工作臺
改進的擴充套件搜尋結果
當您在擴充套件檢視中使用自由文字搜尋擴充套件時,已安裝的擴充套件現在會顯示在搜尋結果的頂部。這使得在瀏覽 Marketplace 時更容易查詢和管理已安裝的擴充套件。

從擴充套件檢視下載擴充套件
您現在可以直接從 VS Code 下載擴充套件,方法是在擴充套件檢視中右鍵單擊擴充套件並選擇下載操作。如果您想下載擴充套件而不安裝它,這會很有用。

擴充套件磁碟空間
您現在可以在擴充套件編輯器中檢視擴充套件在磁碟上的記憶體使用情況。這有助於您瞭解擴充套件佔用的磁碟空間。

改進的資源管理器查詢功能
在九月釋出的版本中,我們引入了在資源管理器中跨整個專案查詢檔案的能力,這項功能以前是不可用的。然而,這次更新暫時移除了高亮模式並限制了某些操作。
在此版本中,我們重新引入了高亮模式。此功能允許您輕鬆地在工作區中查詢檔案和資料夾,並將匹配的結果高亮顯示以提高可見性。此外,我們還在摺疊的資料夾上引入了一個新的視覺指示器,顯示是否有匹配項隱藏在其中。
過濾器切換按鈕仍然可用,允許您透過隱藏不匹配的項來僅關注與您的查詢匹配的檔案和資料夾。我們還重新啟用了之前釋出版本中我們不得不停用的所有上下文選單操作。
我們還改進了使用查詢控制元件時的使用者體驗。當滾動到檔案資源管理器頂部時,頂部會建立額外的空間,以確保控制元件不會遮擋您的搜尋結果。

在主側邊欄和輔助側邊欄之間移動檢視
您已經可以透過拖放或使用“移動檢視”命令將檢視容器移動到其他位置。現在,您可以直接在檢視容器上使用“移至”上下文選單操作,將其在主側邊欄、輔助側邊欄或面板區域之間移動。
隱藏標題區域中的導航控制元件
有些人喜歡保持標題區域儘可能簡潔。我們添加了一個新設定 workbench.navigationControl.enabled,它使您可以隱藏標題區域中的後退/前進按鈕。
您還可以透過右鍵單擊標題區域並選擇“導航控制元件”來訪問此設定。

編輯器
配置貼上和拖放行為
當您將檔案拖放到文字編輯器或複製貼上檔案到文字編輯器時,VS Code 提供了多種插入方式。預設情況下,VS Code 嘗試插入檔案的相對於工作區的路徑。現在,您可以使用拖放/貼上控制元件切換資源插入方式。擴充套件也可以提供自定義編輯,例如在 Markdown 中,它提供插入 Markdown 連結的編輯。
使用新的 editor.pasteAs.preferences 和 editor.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 設定停用。
覆蓋模式
您知道 VS Code 以前不支援在編輯器中覆蓋文字,除非您安裝了 Vim 鍵對映嗎?根據使用者的廣泛要求,我們現在添加了覆蓋模式,在鍵入時覆蓋編輯器中的文字而不是插入文字。一個有用的場景是編輯 Markdown 表格,您希望保持表格單元格邊界的整齊對齊。
可以透過命令“檢視: 切換覆蓋/插入模式”或使用鍵盤上的 Insert 鍵切換此模式。當您處於覆蓋模式時,狀態列會顯示“OVR”指示符。
可以使用 editor.overtypeCursorStyle 設定在覆蓋模式下更改游標樣式。此外,還有一個 editor.overtypeOnPaste 設定,它決定在覆蓋模式下貼上時是覆蓋還是插入。預設行為是插入貼上的文字。
原始碼管理
Git blame 資訊(實驗性)
在此里程碑中,我們增加了實驗性支援,透過編輯器裝飾和狀態列項顯示 blame 資訊。您可以使用 git.blame.editorDecoration.enabled 和 git.blame.statusBarItem.enabled 設定來啟用此功能。您可以將滑鼠懸停在 blame 資訊上以檢視更多提交詳細資訊。
您可以使用 git.blame.editorDecoration.template 和 git.blame.statusBarItem.template 設定來定製編輯器和狀態列中顯示的模板訊息。您可以使用變數來獲取最常見的資訊。例如,以下模板顯示了提交的主題、作者姓名以及相對於現在的作者日期。
{
"git.blame.editorDecoration.template": "${subject}, ${authorName} (${authorDateAgo})"
}
如果您想調整編輯器裝飾的顏色,請使用 git.blame.editorDecorationForeground 主題顏色。
請嘗試此實驗性功能,並告訴我們您的想法。
原始碼管理圖示題操作
根據使用者反饋,我們將“拉取”和“推送”操作重新新增到原始碼管理圖檢視的標題欄。如果當前歷史記錄項引用顯示在原始碼管理圖中,則這些操作將處於啟用狀態。
如果您不想使用這些操作,或原始碼管理圖檢視標題欄中的任何其他操作,您可以右鍵單擊標題欄並隱藏它們。

Notebook
單元格之間的選擇高亮顯示
現在支援筆記本中的選擇高亮顯示,允許跨多個單元格進行基於文字的選擇高亮顯示。這可以透過現有的 editor.selectionHighlight 設定進行控制。
多游標:選擇查詢匹配的所有出現項
筆記本現在支援“選擇查詢匹配的所有出現項”的鍵盤快捷鍵。可以在命令 ID notebook.selectAllFindMatches 中找到它,並且預設可以使用按鍵 ⇧⌘L (Windows, Linux Ctrl+Shift+L)。
Markdown 的執行單元格(按部分)
筆記本現在具有“執行單元格(按部分)”操作,該操作已暴露給 Markdown 單元格的單元格工具欄。如果 Markdown 單元格具有標題,則會執行該部分及子部分中的所有單元格。如果沒有標題,則儘可能執行周圍部分中的所有單元格。
單元格執行時間詳細程度
單元格狀態列中的執行時間資訊現在提供了一個增加詳細程度的選項。可以透過 notebook.cellExecutionTimeVerbosity 設定開啟此功能,並且除了持續時間外,還可以顯示執行時間戳。

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

為了使用此功能,請確保您還使用支援連字的字型 terminal.integrated.fontFamily。
用於自定義終端標籤的新變數
終端標籤中顯示什麼文字由 terminal.integrated.tabs.title 和 terminal.integrated.tabs.description 設定決定,這些設定允許使用一組變數。我們現在支援以下新變數:
-
${shellType}- 檢測到的終端使用的 shell 型別。這類似於預設值,但它不會更改為例如執行 git 命令時的git。 -
${shellCommand}- 在終端中執行的命令。這需要 shell 整合。
-
${shellPromptInput}- 在終端中執行的命令或當前檢測到的提示輸入。這需要 shell 整合。
執行最近命令現在顯示歷史原始檔
run recent command(執行最近命令)shell 整合功能現在包括命令源的完整標題,包括相關的歷史記錄檔案和開啟它的便捷按鈕。

此命令的預設鍵繫結是 Ctrl+Alt+R。
新的支援的連結格式
格式為 /path/to/file.ext, <line> 的連結現在應在終端中被檢測為連結。
測試
可歸因的覆蓋率
在此里程碑中,我們完成了啟用擴充套件提供每個測試覆蓋率的 API,因此您可以確切地知道任何給定測試執行了哪些程式碼。當可歸因的覆蓋率可用時,在測試覆蓋率檢視、編輯器操作、切換開啟的測試覆蓋率工具欄(透過“測試: 測試覆蓋率工具欄”命令)中,或者簡單地使用“測試: 按測試過濾覆蓋率”命令時,會提供一個過濾器按鈕。
主題:Codesong(在vscode.dev上預覽)
重新設計的內聯故障訊息
我們重新設計了測試故障訊息,使其更加醒目且不易干擾。這對於忙碌的場景特別有用,例如 SCM 或 Copilot Edits 中的 diff。選擇故障訊息仍然會開啟一個檢視控制元件以顯示故障的完整詳細資訊。

持續執行 UI 的改進
以前,持續測試執行的全域性狀態(可透過測試資源管理器檢視中的“眼睛”圖示切換)會使用預設的執行配置檔案來切換持續執行的開啟或關閉。
我們重新設計了持續執行 UI,以包含一個下拉選單,用於為每個配置檔案單獨開啟或關閉持續執行。選擇指示器會切換最後使用的執行配置檔案集。
語言
TypeScript 5.7
我們的 JavaScript 和 TypeScript 支援現在使用 TypeScript 5.7。這次重大更新包括許多語言和工具改進,以及重要的錯誤修復和效能最佳化。
您可以在 TypeScript 部落格上閱讀有關 TypeScript 5.7 版本的所有資訊。我們還在以下部分包含了一些工具亮點。
JavaScript 和 TypeScript 的貼上匯入功能
厭倦了在檔案之間移動程式碼後必須新增匯入?嘗試使用 TypeScript 5.7+ 的貼上匯入功能。現在,當您在 JavaScript 或 TypeScript 之間複製和貼上程式碼時,VS Code 可以為貼上的程式碼新增匯入。
請注意,不僅添加了匯入,甚至為貼上程式碼中使用的本地變數添加了新的匯出!
雖然我們認為此功能可以節省大量時間,但我們也敏感於干擾您現有的工作流程。因此,預設情況下,我們仍然保留了複製和貼上始終只插入貼上文字的設定。如果存在“貼上匯入”編輯,您將看到貼上控制元件,它允許您選擇“貼上匯入”編輯。

如果您更喜歡始終貼上匯入,您可以使用新的 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"]
}
}
最後,如果您想完全停用“貼上匯入”,可以使用 typescript.updateImportsOnPaste.enabled 和 javascript.updateImportsOnPaste.enabled。
遠端開發
遠端開發擴充套件允許您透過 SSH 或遠端隧道使用開發容器、遠端機器或適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
亮點包括:
remote-sshCopilot 聊天參與者- 增強的會話日誌記錄
您可以在 遠端開發版本說明中瞭解有關這些功能的更多資訊。
企業支援
配置允許的擴充套件
您現在可以使用 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 上支援預安裝擴充套件。
按照以下步驟引導擴充套件:
-
在 VS Code 安裝目錄中建立一個
bootstrap\extensions資料夾。 -
下載您想要預安裝的擴充套件的 VSIX 檔案,並將它們放入
bootstrap\extensions資料夾。 -
當用戶首次啟動 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異常。 - 在 UI 中支援
pytest-describe外掛進行測試檢測和執行。 - 測試重寫現在利用 FIFO 而非 UDS 進行程序間通訊,使使用者能夠在其自己的測試設計中利用
pytest_socket等 pytest 外掛。 - 重寫接近預設狀態:此版本解決了測試重寫中的最後一個已知問題,除非出現進一步問題,否則重寫實驗將在 2025 年初關閉,重寫將設為預設。
Python REPL 增強功能
- 智慧傳送到原生 REPL 後,將焦點保留在編輯器中
- 改進了原生 REPL 載入後的處理
- 修復 VS Code 終端中 Python 3.13 的縮排錯誤問題
Pylance “完整”語言伺服器模式
python.analysis.languageServerMode 設定現在還支援 full 模式,使您能夠利用 Pylance 的全部功能和最全面的 IntelliSense 體驗。值得注意的是,這會以較低的效能為代價,因為它可能導致 Pylance 資源密集,尤其是在大型程式碼庫中。
python.analysis.languageServerMode 設定現在會根據其設定為 light、default 或 full 來更改以下設定的預設值
| 設定 | 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 身份驗證會話的推薦方式。此外,它的速度更快,因為我們可以利用您已登入到作業系統的帳戶。

如果您在此新流程中遇到任何問題,請告知我們。如果您遇到重大問題並需要恢復到舊的 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 Chat。為了更精細地控制上下文,現在您可以貼上程式碼片段並將其作為上下文附加到聊天中。這會新增必要的檔案資訊和相應的行號。您只能貼上當前工作區中檔案的程式碼。
要嘗試此功能,請複製一段程式碼並將其貼上到行內聊天、快速聊天或聊天檢視中。選擇出現的貼上控制元件,然後選擇 Pasted Code Attachment.。或者,您可以設定 editor.pasteAs.preferences 設定
"editor.pasteAs.preferences": [
"chat.attach.text"
]

更多 Shell 的終端補全
我們在之前的版本中為 pwsh 添加了實驗性的終端補全支援。在此版本中,我們已開始著手將其擴充套件到其他 Shell。目前主要針對 bash 和 zsh,但由於這種新方法由擴充套件主機 API 提供支援,我們計劃普遍支援大多數 Shell。
您可以透過設定 terminal.integrated.suggest.enabled 和 terminal.integrated.suggest.enableExtensionCompletions 來嘗試當前正在進行的工作。目前僅支援 cd、code 和 code-insiders 引數。

提議的 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();

請嘗試valueSelectionInQuickPick 建議,並在此 GitHub issue 中告訴我們您的想法!
建議的本機視窗控制代碼 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 issue 中告訴我們您的想法!
工程
透過 vscode-unpkg 服務最佳化擴充套件更新
為了減輕 Marketplace 基礎架構的負載,VS Code 現在使用 vscode-unpkg 服務新新增的終結點來檢查擴充套件更新。該服務實現了具有 10 分鐘 TTL 的伺服器端快取,這大大減少了直接請求到 Marketplace 的數量。此最佳化由 extensions.gallery.useUnpkgResourceApi 設定控制(預設啟用)。
如果您在擴充套件更新方面遇到問題,可以使用 extensions.gallery.useUnpkgResourceApi 停用此功能,並恢復到直接的 Marketplace 版本檢查。
編輯器 GPU 加速的基礎工作
我們很高興地宣佈,我們已經開始在編輯器中啟用 GPU 加速的工作,類似於終端。這項工作的目標主要是透過減少輸入延遲和提高滾動效能來改善整體編碼體驗。
這仍然處於早期階段,尚未準備好進行測試,但我們想分享一些關於已取得進展的細節
- GPU 渲染器在後臺使用 WebGPU。
- 我們目前專注於功能對等和正確性,而不是效能。
- 當啟用 GPU 加速時,有一個回退機制,允許行“回退”到 DOM 渲染,當它不完全支援時。這意味著我們可以早期自託管,並且當前不相容的行將使用 DOM 方法顯示。一些當前回退的行示例:超過 200 個字元的行、具有某些 Monaco 裝飾(例如,使未使用的變數淡化)的行、換行的行,依此類推。
- Monaco 的內聯裝飾允許對包含字元的實際元素進行樣式設定,這對該功能提出了巨大挑戰,因為它們是使用 CSS 進行樣式的。我們用於支援大多數內聯裝飾而不破壞或更改 API 的方法是檢測附加到這些裝飾的 CSS,然後支援一部分常用 CSS 屬性,如果不支援所有樣式則回退。
這是一張該功能執行時的截圖。請注意,排水溝中的黃線告訴我們哪些行正在使用回退渲染。此特定情況由於 dontShow 引數具有內聯裝飾(因為它未使用)而使用回退渲染。

跟蹤這項工作的 issue 是#221145,該 issue 有頻繁更新和更多進展細節。
macOS 10.15 的 EOL 警告
VS Code 桌面將在接下來的幾個里程碑中更新到Electron 33。隨著 Electron 33 的更新,VS Code 桌面將不再支援macOS Catalina。在此里程碑中,我們已為受影響平臺上的使用者添加了棄用通知,以讓他們做好遷移準備。如果您是上述作業系統版本的使用者,請檢視我們的FAQ 以獲取更多資訊。
值得注意的修復
- 233915 透過在擴充套件檢視中的擴充套件的上下文選單中使用複製連結操作,與其他使用者共享擴充套件。
- 231542 經常無法儲存檔案或檔案資料被擦除並出現 EBUSY 錯誤
- 233304
onDidChangeCheckboxState在 1.95 版本中已損壞 - 232263 最佳化樹檢視,以便對跨程序呼叫進行批處理
- 156723 在 Wayland 上執行時修復了拖放支援
感謝
最後但同樣重要的是,向 VS Code 的貢獻者們致以衷心的感謝。
問題跟蹤
對我們問題跟蹤的貢獻
拉取請求
對 vscode 的貢獻
- @a-stewart (Anthony Stewart):為側邊欄和麵板標題與檢視之間的邊框新增支援 PR #157318
- @aravind-n (Aravind Nidadavolu):修復 fish shell 整合執行順序 PR #226589
- @BABA983 (BABA):修正 markdownDescription 中的 ShellIntegrationDecorationsEnabled PR #233387
- @BenLocal (benshi):Cli serve_web 將路徑字首設定為 /
- ,提交值解析錯誤 PR #233986 - @BlackHole1 (Kevin Cui):修復:在 Windows 上使用 vscode-win32-x64 時無法開啟 vscode PR #233285
- @BugGambit (Fredrik Anfinsen):新增對連結 'foo, 的支援
' PR #231775 - @cachandlerdev:複製擴充套件連結 PR #234210
- @CrafterKolyan (Nikolai Korolev):為擴充套件 API 的 QuickPick 新增新增值選擇的介面 PR #233275
- @davidmartos96 (David Martos):修復使用 Fish 時 PATH 的字首新增 PR #232291
- @dibarbet (David Barbet):不在 C# 中將插值標記為字串 PR #232772
- @duncpro (Duncan):修復:新建檔案/資料夾按鈕的可點選性 PR #232130
- @elias-pap (Elias Papavasileiou):feat:為 Vite 新增圖示 PR #234620
- @gjsjohnmurray (John Murray)
- 新增
workbench.view.showQuietly設定物件以阻止擴充套件顯示隱藏的 Output 檢視(修復 #105270) PR #205225 - 修復
Go to Current History Item中斷(修復 #235063) PR #235067 - 在引用選擇器更改後正確啟用
Go to Current History Item(修復 #235132) PR #235134
- 新增
- @iisaduan (Isabel Duan):修復 typescript organizeImports 設定 PR #232676
- @jeanp413 (Jean Pierre):修復舊的 extensionHost 程序在重新載入 VS Code Web 選項卡後未立即終止的問題 PR #234944
- @Kannav02 (Kannav Sethi):將“Organize Imports”命令標籤更改為“Optimize Imports” PR #232869
- @LionelJouin (Lionel Jouin):修復:go 語法更新(#_232142) PR #232335
- @LitoMore (LitoMore):刪除與 Microsoft 相關的徽標 PR #215758
- @Logicer16 (Logicer):修復 activeOnStart 描述中的語法錯誤 PR #197536
- @RedCMD (RedCMD):將
.winget副檔名新增到 YAML PR #232218 - @ribru17 (Riley Bruins):將 JSDoc 示例呈現為 typescript 程式碼 PR #234143
- @sandersn (Nathan Shively-Sanders):將 copilotRelated 與 copilot 重新註冊 PR #233729
- @nickdiego (Nick Yamane):修復使用 Wayland 時的拖放支援 Chromium CL
對 vscode-emmet-helper 的貢獻
- @onlurking (Diogo Felix):向 Emmet 新增缺失的 HTML 標籤 PR #90
對 vscode-eslint 的貢獻
對 vscode-extension-samples 的貢獻
- @olguzzar (Olivia Guzzardo):更新聊天教程以使用 request.model PR #1125
- @phil294 (Philip Waritschlager):webview-codicons:將 codicons 依賴項從 devDependencies 移至 dependencies PR #1005
- @witsaint (gaodingqiang):修復:
lsp-embedded-language-servicecleaninterval 引數型別 PR #1126
對 vscode-extension-telemetry 的貢獻
- @kmagiera (Krzysztof Magiera):傳播會話 ID 元資料 PR #215
對 vscode-hexeditor 的貢獻
- @Antecer (Antecer):我們需要一個所見即所得的複製方法 PR #540
- @Hexa3333 (Alp Yılmaz):修復:DisplayContextSelection 讀取衝突(#_547) PR #548
- @jogo-:更新 CHANGELOG.md PR #549
- @tomilho (Tomás Silva):修復:大寫鎖定啟用時 Ctrl+F 失效 PR #555
對 vscode-json-languageservice 的貢獻
- @jeremyfiel (Jeremy Fiel):修復:
then描述中的拼寫錯誤 PR #251 - @Legend-Master (Tony):修復大型 oneof 驗證緩慢 PR #247
- @sumimakito (Makito):feat(completion):支援來自架構的詳細資訊 PR #243
對 vscode-jupyter 的貢獻
- @gjsjohnmurray (John Murray):新增
connor4312.esbuild-problem-matchers推薦 PR #16195 - @pwang347 (Paul):為核心後初始化新增公共 API 事件 PR #16214
對 vscode-mypy 的貢獻
- @hamirmahal (Hamir Mahal):修復:解決
npm audit報告的開發依賴項問題 PR #327 - @taesungh (Taesung Hwang):使用全域性設定作為
ignorePatterns預設值 PR #325
對 vscode-python-debugger 的貢獻
對 vscode-python-tools-extension-template 的貢獻
對 vscode-test-web 的貢獻
- @Aynıc0o0 (hj):VS Code 主程式已遷移回 npm,我們可以捕獲它 PR #148
對 inno-updater 的貢獻
- @BlackHole1 (Kevin Cui):修復:靜默模式為 true 時顯示對話方塊 PR #29
對 language-server-protocol 的貢獻
- @EwanDubashinski (Ivan Dubashinskii):添加了 PL/SQL 語言伺服器的連結 PR #2057
- @gquerret (Gilles Querret):在語言伺服器列表中新增 OpenEdge ABL PR #2056
- @orbitalquark:為 Textadept 添加了客戶端實現的連結。 PR #2058