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
終端機命令啟動偵錯工作階段 - 新增內容 - 將符號和資料夾新增為 Chat 和 Edits 的內容
- 將聊天工作階段移至 Copilot Edits - 切換至 Copilot Edits 以套用來自 Chat 的程式碼建議
如果您想線上閱讀這些版本資訊,請前往 code.visualstudio.com 上的更新。Insiders: 想要盡快試用新功能嗎?您可以下載每晚組建的 Insiders 版本,並在最新更新可用時立即試用。
GitHub Copilot
GitHub Copilot 免費方案
我們很高興宣布全新的 GitHub Copilot 免費層級。註冊 GitHub Copilot 免費方案,您只需要一個 GitHub 帳戶。您每月可享有一定數量的完成次數和聊天互動次數,每月重設。
您可以直接從 VS Code 內註冊。請依照 Copilot 設定指南 中的步驟進行。
深入瞭解 Copilot 免費方案詳細資訊和條件。
Copilot Edits
在上一個里程碑中,我們推出了 Copilot Edits (目前為預覽版),可讓您使用自然語言快速一次編輯多個檔案。從那時起,我們持續迭代此體驗。您可以透過開啟命令中心的 Copilot 功能表,然後選取 [開啟 Copilot Edits],或透過觸發 ⇧⌘I (Windows Ctrl+Shift+I,Linux Ctrl+Shift+Alt+I) 來試用 Copilot Edits。
進度和編輯器控制項
Copilot Edits 可以跨多個不同檔案進行多項變更。您現在可以更清楚地看到編輯串流時的進度。透過編輯器覆疊控制項,您可以輕鬆循環瀏覽所有變更並接受或捨棄它們。
將聊天工作階段移至 Copilot Edits
您可能會使用 Chat 檢視來探索變更程式碼的一些想法。現在您可以將聊天工作階段移至 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,方法是將符號從 [大綱] 檢視或 [階層連結] 拖放到 Chat 檢視中。
我們也在聊天輸入中推出了符號完成。輸入 #
,然後輸入符號名稱,您就會看到您最近處理過的檔案中的符號建議。
若要參考整個專案中的符號,您可以使用 #sym
開啟全域符號選取器。
資料夾
現在可以將資料夾拖曳到 Copilot Chat,從 [檔案總管]、[階層連結] 或其他檢視中新增為內容。
當資料夾拖曳到 Copilot Edits 時,資料夾中的所有檔案都會包含在工作集中。
Copilot 使用量圖表
VS Code 擴充功能可以使用 VS Code API 來 建置 Copilot 的功能。您現在可以在 [執行階段狀態] 檢視中看到擴充功能 Copilot 使用量的圖表。此圖表顯示過去 30 天內擴充功能提出的聊天請求數。
自訂指示以產生認可訊息
Copilot 可以協助您根據您所做的變更產生認可訊息。在此里程碑中,我們新增了在產生認可訊息時支援自訂指示的功能。例如,如果您的認可訊息需要遵循特定格式,您可以在自訂指示中描述此格式。
您可以使用 github.copilot.chat.commitMessageGeneration.instructions 設定來指定自訂指示,或指定工作區中包含自訂指示的檔案。這些指示會附加到用於產生認可訊息的提示。深入瞭解如何使用自訂指示。
內嵌聊天
在此里程碑中,我們進一步改善了內嵌聊天的使用者體驗:我們讓進度報告更細微,同時串流變更時停用波浪線,並使偵測到的命令呈現得更精美。
此外,我們持續改善虛擬程式碼偵測,現在當某行主要是自然語言時,會顯示提示,您可以繼續使用內嵌聊天。此功能可讓您在編輯器中輸入虛擬程式碼,然後將其用作內嵌聊天的提示。您也可以按下 ⌘I (Windows、Linux Ctrl+I) 來觸發此流程。
此外,還有一個新的實驗性設定,可在空白行上顯示內嵌聊天提示。此設定可以透過 inlineChat.lineEmptyHint 啟用。預設情況下,此設定已停用。
終端機聊天
終端機內嵌聊天具有全新的外觀,讓外觀和風格更接近編輯器內嵌聊天
以下是一些其他值得注意的改進
- Widget 的版面配置和位置已改善,且整體行為更佳
- 有一個模型選取器
- 底部的按鈕現在更一致
@workspace
的效能改進
當您使用 @workspace
向 Copilot 詢問您目前開啟的工作區時,我們首先需要將工作區縮小為一組相關的程式碼片段,我們可以將這些程式碼片段交給 Copilot 作為內容。如果您的工作區由 GitHub 存放庫支援,我們可以透過使用 Github 程式碼搜尋快速找到這些相關片段。但是,由於程式碼搜尋索引會追蹤存放庫的主要分支,因此我們無法依賴它來進行本機變更或在分支上時。
在此里程碑中,我們努力將 Github 搜尋的速度優勢帶給分支和提取要求。這表示我們現在同時搜尋以存放庫主要分支為基礎的遠端索引,以及搜尋任何本機變更的檔案。然後我們會將這些結果合併在一起,為 Copilot 提供一組快速且最新的程式碼片段來使用。您可以深入瞭解 Github 程式碼搜尋以及如何啟用它。
協助工具
程式碼動作協助工具訊號
某些程式碼動作可能需要很長時間才能完成,例如呼叫外部服務以產生影像替代文字的快速修正。可能不明顯它們何時觸發或何時完全套用。因此,我們新增了協助工具訊號來指示已觸發或套用程式碼動作。
您可以使用 accessibility.signals.codeActionTriggered 和 accessibility.signals.codeActionApplied 設定來啟用這些訊號。
REPL 中的自動焦點管理
我們推出了一個新設定來改善在 REPL 中工作時的協助工具。使用 accessibility.replEditor.autoFocusReplExecution,您現在可以指定在每次執行程式碼時,焦點是否保持不變 (none
)、移動到輸入方塊 (input
),或移動到最近執行的儲存格 (lastExecution
)。依預設,焦點會移動到輸入方塊。
工作台
改善的擴充功能搜尋結果
當您在 [擴充功能] 檢視中使用自由格式文字搜尋擴充功能時,已安裝的擴充功能現在會顯示在搜尋結果的頂端。這讓您在搜尋 Marketplace 時,更容易尋找和管理已安裝的擴充功能。
從 [擴充功能] 檢視下載擴充功能
您現在可以使用 [擴充功能] 檢視中擴充功能的快速鍵功能表中的下載動作,直接從 VS Code 下載擴充功能。如果您想要下載擴充功能而不安裝它,這會很有用。
擴充功能磁碟空間
您現在可以在 [擴充功能] 編輯器中看到擴充功能在磁碟上的記憶體使用量。這可以協助您瞭解擴充功能正在使用多少磁碟空間。
在 [檔案總管] 中尋找的改進
在 9 月版本中,我們推出了在整個專案的 [檔案總管] 中尋找檔案的功能,這是先前無法使用的功能。但是,此更新暫時移除了醒目提示模式,並限制了某些動作。
在此版本中,我們將恢復醒目提示模式。此功能可讓您輕鬆地在工作區中尋找檔案和資料夾,並醒目提示相符的結果以提高可見度。此外,我們在摺疊的資料夾上新增了新的視覺指示器,顯示其中是否隱藏了相符項目。
篩選切換仍然可用,讓您可以只專注於與您的查詢相符的檔案和資料夾,方法是隱藏不相符的項目。我們也重新啟用了在上一個版本中必須停用的所有快速鍵功能表動作。
我們也改善了使用尋找控制項時的使用者體驗。當捲動到檔案總管的頂端時,會在頂端建立額外的空間,確保控制項不會遮蔽您的搜尋結果。
在主要和次要側邊欄之間移動檢視
您已經可以透過拖放或使用 [移動檢視] 命令,將檢視容器移動到另一個位置。您現在可以直接在檢視容器上使用 [移動至] 快速鍵功能表動作,以在主要側邊欄、次要側邊欄或面板區域之間移動它。
隱藏標題區域中的導覽控制項
有些人偏好盡可能保持標題區域的乾淨。我們新增了一個新的設定 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 檔案複製和貼上程式碼時,此功能會自動新增匯入。為了避免中斷您的工作流程,依預設,我們決定貼上只會插入純文字,而 paste with imports
會作為貼上控制項中的選項提供。但是,如果您希望 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
佈景主題色彩。
試用此實驗性功能,並告訴我們您的想法。
原始檔控制圖表標題動作
根據使用者意見反應,我們已將 [提取] 和 [推送] 動作帶回原始檔控制圖表檢視標題列。如果目前歷程記錄項目參考顯示在原始檔控制圖表中,則會啟用這些動作。
如果您不想使用這些動作,或原始檔控制圖表檢視標題列中的任何其他動作,您可以在標題列上按一下滑鼠右鍵並隱藏它們。
筆記本
跨儲存格選取醒目提示
筆記本現在支援選取醒目提示,允許跨多個儲存格以文字選取為基礎進行醒目提示。這由預先存在的設定 editor.selectionHighlight 控制。
多重游標:選取所有尋找相符項目
筆記本現在支援 [選取所有尋找相符項目] 的鍵盤快速鍵。這可以在命令識別碼 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}
- 終端機中使用的殼層偵測到的類型。這類似於預設值,但當執行 git 命令時,它不會變更為git
,例如。 -
${shellCommand}
- 終端機中執行的命令。這需要殼層整合。 -
${shellPromptInput}
- 終端機中執行的命令或目前偵測到的提示輸入。這需要殼層整合。
執行最近的命令現在會顯示歷程記錄來源檔案
執行最近的命令 殼層整合功能現在包含命令來源的完整大小標頭,包括相關的歷程記錄檔案和方便開啟它的按鈕。
此命令的預設快速鍵是 Ctrl+Alt+R
。
新的支援連結格式
格式為 /path/to/file.ext, <line>
的連結現在應偵測為終端機中的連結。
測試
可歸屬的覆蓋率
在此里程碑中,我們最終確定了一個 API,使擴充功能能夠在每個測試的基礎上提供覆蓋率,因此您可以準確地看到任何給定測試執行的程式碼。當可歸屬的覆蓋率可用時,篩選按鈕會在 [測試覆蓋率] 檢視、編輯器動作、開啟時的 [測試覆蓋率] 工具列中提供 ([透過 測試:測試覆蓋率工具列 命令]),或僅透過使用 測試:依測試篩選覆蓋率 命令。
佈景主題:Codesong (vscode.dev 上的預覽)
重新設計的內嵌失敗訊息
我們重新設計了測試失敗訊息,使其更醒目且不那麼突兀。這對於忙碌的案例特別有用,例如來自 SCM 或 Copilot Edits 的差異。選取失敗訊息仍然會開啟預覽控制項,以顯示失敗的完整詳細資訊。
持續執行 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 或 遠端通道 連線的遠端機器,或 Windows Subsystem for Linux (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 上提供預先安裝擴充功能的功能。
請依照下列步驟來啟動引導擴充功能
-
在 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
例外狀況。 pytest-describe
外掛程式在 UI 中支援測試偵測和執行。- 測試重寫現在利用 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: 選取 TypeScript 版本...
命令來變更 TypeScript 版本。
Microsoft 帳戶現在使用 MSAL (在 Windows 上支援 WAM)
為了確保 Microsoft 驗證的強大安全性基準,我們在 Microsoft 帳戶擴充功能中採用了 Microsoft Authentication Library。
這項工作的一大亮點是 WAM (Web Account Manager... 也稱為 Broker) 整合。簡而言之,我們現在不再前往瀏覽器進行 Microsoft 驗證流程,而是直接與作業系統通訊,這是取得 Microsoft 驗證會話的建議方式。此外,由於我們可以利用您已在作業系統上登入的帳戶,因此速度更快。
如果您發現此新流程有任何問題,請告訴我們。如果您確實發現重大問題,且需要還原回舊的 Microsoft 驗證行為,您可以使用 microsoft-authentication.implementation (將其設定為 classic
,並重新啟動 VS Code) 來還原,但請記住,此設定不會存在太久。因此,如果您在使用 MSAL 流程時遇到問題,請開啟 Issue。
擴充功能撰寫
@vscode/chat-extension-utils
我們的 chat 和 語言模型 擴充功能 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 的 Proxy 支援
全域 fetch
函式現在隨附已啟用的 Proxy 支援 (http.fetchAdditionalSupport)。這與已具備 Proxy 支援的 https
模組類似。
預覽功能
貼上程式碼以附加聊天內容
先前,您已經可以將檔案附加為 Copilot Chat 的內容。為了更精細地控制內容,您現在可以貼上程式碼片段,以將其附加為聊天的內容。這會新增必要的檔案資訊和對應的行號。您只能貼上來自目前工作區中檔案的程式碼。
若要試用此功能,請複製一些程式碼並將其貼到內嵌聊天、快速聊天或聊天檢視中。選取顯示的貼上控制項,然後選取 貼上程式碼附件
。或者,您可以設定 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,其中包含頻繁的更新和更多關於進度的詳細資訊。
macOS 10.15 的終止支援警告
VS Code 桌面版將在接下來的幾個里程碑中更新至 Electron 33。隨著 Electron 33 更新,VS Code 桌面版將不再於 macOS Catalina 上執行。在此里程碑中,我們已針對受影響平台上的使用者新增淘汰通知,以讓他們為移轉做好準備。如果您是上述 OS 版本的使用者,請參閱我們的 FAQ 以取得其他資訊。
值得注意的修正
- 233915 在「擴充功能」檢視中,使用擴充功能內容功能表中的 複製連結 動作與其他人共用擴充功能。
- 231542 經常無法儲存檔案或檔案資料遭到清除,並出現 EBUSY 錯誤
- 233304
onDidChangeCheckboxState
在 1.95 版中已損壞 - 232263 最佳化樹狀檢視,以便批次處理跨程序呼叫
- 156723 在使用 wayland 執行時,已修正拖放支援
感謝您
最後但同樣重要的是,非常感謝 VS Code 的貢獻者。
Issue 追蹤
對 Issue 追蹤的貢獻
提取請求
對 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 將路徑前置詞設定為 /
- /,commit 值剖析錯誤 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):功能:新增 Vite 的圖示 PR #234620
- @gjsjohnmurray (John Murray)
- 新增
workbench.view.showQuietly
設定物件,以停止擴充功能顯示隱藏的「輸出」檢視 (修正 #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):修正瀏覽器中重新載入 vscode Web 索引標籤後,舊的 extensionHost 程序不會立即終止的問題 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):還原使用 copilot 註冊 copilotRelated PR #233729
- @nickdiego (Nick Yamane):修正使用 wayland 時的拖放支援問題 Chromium CL
對 vscode-emmet-helper
的貢獻
- @onlurking (Diogo Felix):將遺失的 HTML 標籤新增至 emmet 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-service
cleaninterval args type 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):功能 (完成項目):支援來自結構描述的詳細資訊 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
的貢獻
- @Cecil0o0 (hj):VS Code main 已移回 npm,我們可以趕上它 PR #148
對 inno-updater
的貢獻
- @BlackHole1 (Kevin Cui):修正:當 silent 為 true 時,對話方塊仍會顯示 PR #29
對 language-server-protocol
的貢獻
- @EwanDubashinski (Ivan Dubashinskii):新增 PL/SQL 語言伺服器的連結 PR #2057
- @gquerret (Gilles Querret):在語言伺服器清單中新增 OpenEdge ABL PR #2056
- @orbitalquark:新增 Textadept 的用戶端實作連結。 PR #2058