2024 年 1 月(版本 1.86)
更新 1.86.2:此更新解決了這些 問題。
更新 1.86.1:此更新解決了這些 問題。
下載:Windows:x64 Arm64 | Mac:通用 Intel silicon | Linux:deb rpm tarball Arm snap
歡迎使用 Visual Studio Code 2024 年 1 月版。此版本中包含許多更新,我們希望您會喜歡,其中一些主要亮點包括:
- 每個視窗的縮放級別 - 單獨調整每個視窗的縮放級別。
- Hey Code 語音命令 - 使用語音命令開始聊天會話。
- 多檔案差異編輯器 - 在差異編輯器中快速檢視多個檔案的差異。
- 觸發式斷點 - 透過斷點依賴關係實現高效除錯。
- 擴充套件的粘滯滾動支援 - 在樹檢視和筆記本中支援粘滯滾動。
- Markdown 貼上選項 - 支援富貼上,包括連結、影片和音訊元素。
- 更強大、更靈活的自動儲存選項 - 出現錯誤時跳過自動儲存,或僅為特定檔案型別儲存。
- 原始碼管理輸入 - 自定義提交輸入和每種語言的編輯器設定。
- 擴充套件通知 - 精細控制每個擴充套件的通知停用。
- GitHub Copilot 更新 - 改進了預設上下文,將檔案新增為上下文,AI 修復。
如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。
內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。
輔助功能
警報
螢幕閱讀器和盲文使用者現在擁有更多可配置的警報,例如在命中除錯斷點時、當前行有錯誤時等。這些可以透過以 accessibility.alert 開頭的設定進行配置,或透過 **幫助:列出警報** 命令進行探索和配置。
使用“Hey Code”語音命令
藉助新的 accessibility.voice.keywordActivation 設定,您可以啟用 VS Code 以聆聽“Hey Code”語音命令來啟動與 Copilot Chat 的語音會話。語音識別在您的計算機本地進行計算,並且永遠不會發送到任何伺服器。
可用選項包括:
chatInView:從聊天檢視啟動語音聊天quickChat:從快速聊天控制元件啟動快速語音聊天inlineChat:從編輯器中的內聯聊天啟動語音聊天chatInContext:如果焦點在編輯器中,則從內聯聊天啟動語音聊天,否則從聊天檢視啟動語音聊天
以下示例顯示了使用配置了 inlineChat 選項的“Hey Code”
狀態列中的一個小型麥克風圖標表示 VS Code 正在使用麥克風識別“Hey Code”。
語音聊天會話完成後,VS Code 將再次監聽“Hey Code”以重新啟動它。
要使用此新功能,需要以下擴充套件:
注意:語音識別在您的計算機本地執行,並且永遠不會發送到任何伺服器。
工作臺
恢復輔助視窗
在此版本中,所有與主視窗關聯的已開啟的浮動視窗將在您重新啟動應用程式時恢復。這包括開啟的編輯器以及輔助視窗的大小和位置。
樹檢視中的粘滯滾動
在編輯器中成功應用粘滯滾動的基礎上,我們將此功能擴充套件到了所有樹檢視,使使用者能夠更輕鬆地導航專案樹。可以透過 workbench.tree.enableStickyScroll 設定啟用或停用樹檢視的粘滯滾動。
為確保粘滯滾動不會佔用過多空間,其最大高度限制為檢視高度的 40%。此外,使用者可以透過配置 workbench.tree.stickyScrollMaxItemCount(預設為 7)來自定義粘滯元素的最多數量。如果粘滯元素的數量超過可顯示的數量,則粘滯滾動會將最後一些粘滯元素合併在一起,前提是樹檢視支援此功能。
為了改善樹導航體驗,您可以選擇一個粘滯元素以直接跳轉到樹中的該元素。或者,按住父元素的箭頭以隱藏其所有子元素。此外,啟用粘滯滾動後,可以更輕鬆地訪問複選框和操作項。
配置每個視窗的縮放級別
新的 window.zoomPerWindow 設定(預設啟用)允許您將縮放命令(放大、縮小、重置縮放)僅應用於活動視窗,而不應用於所有開啟的視窗。以前使用這些命令不僅會將其應用於所有開啟的視窗,還會更新 window.zoomLevel 設定。
我們認為使用這些命令更多的是一種臨時性的手勢,例如在演示時,因此它們應該只應用於呼叫它們的視窗。
從這個示例中可以看出,只有活動視窗的縮放級別會發生變化,而其他視窗則不會。
當視窗的自定義縮放級別與 window.zoomLevel 設定值不匹配時,狀態列會顯示縮放級別指示器。選擇狀態列指示器可找到更改縮放級別、重置縮放級別或快速轉到相關設定的控制元件。

自定義縮放級別的視窗會在重啟和工作區更改後保留該縮放級別。
注意:將
window.zoomPerWindow配置為false以恢復之前的縮放級別行為。
更強大、更靈活的自動儲存選項
VS Code 長期以來一直提供自動儲存選項。在此版本中,我們使此功能更加強大。
為每個資源或語言配置自動儲存
所有自動儲存設定現在都可以按資料夾或語言進行配置,這允許您僅為特定語言或資料夾選擇性地啟用自動儲存。
在下面的示例中,設定配置如下:
{
"[markdown]": {
"files.autoSave": "afterDelay"
}
}
正如您所見,已編輯的 Markdown 檔案立即儲存,而 TypeScript 檔案仍保持未儲存狀態。
出現錯誤時停用自動儲存
新的 files.autoSaveWhenNoErrors 設定允許您在自動儲存將正常儲存編輯器時檔案中存在錯誤標記的情況下停用自動儲存。
當您有外部工具監視檔案更改,並且希望避免這些工具對包含錯誤的檔案進行操作時,這可能很有用。
僅自動儲存工作區檔案
最後,一個新的設定 files.autoSaveWorkspaceFilesOnly,它將自動儲存限制為僅工作區內的檔案。
允許為每個擴充套件停用通知
我們現在提供更精細地控制停用擴充套件通知的選項。從通知提示中,您可以為該擴充套件停用通知。

在通知中心,有一箇中央位置可管理已觸發通知的所有擴充套件的通知啟用情況。

此新功能是對我們現有的“請勿打擾模式”的補充,該模式全域性停用所有通知。與全域性開關一樣,錯誤通知將始終出現且無法停用。
允許交換左右差異編輯器
當您比較兩個檔案時(例如從檔案資源管理器中),會出現一個新的操作來交換差異編輯器的左右兩側。
注意:比較兩個可編輯檔案允許您在任一側進行更改。
從命令列讀取 stdin 時不強制執行 --wait
當使用終端時,您可以將程序的輸出直接傳遞到 VS Code 以編輯器形式開啟,例如:
- 在 Linux 或 macOS 上使用
ps aux | grep code | code - - 在 Windows 上使用
echo Hello World | code -
到目前為止,這也意味著 --wait 標誌,即您在關閉編輯器視窗或 VS Code 之前不會返回到終端提示符。在此里程碑中,我們不再從 stdin 讀取時強制執行 --wait,因此您可以立即返回到終端提示符。
注意:要恢復到之前的行為,只需在命令列呼叫中附加
--wait。
支援帶原生標題欄的自定義標題欄
我們引入了 window.customTitleBarVisibility 設定,它允許在使用原生標題欄時顯示自定義標題欄。這對於偏愛原生標籤頁的 macOS 使用者尤其有益。透過此新設定,原生標題欄使用者現在可以訪問自定義標題欄功能,例如:
- 命令中心:直接從自定義標題欄輕鬆訪問命令中心。
- 佈局控制元件:更靈活地自定義工作區佈局。
- 活動欄自定義:將活動欄操作移到頂部。
- 編輯器操作自定義:將編輯器操作重新定位到自定義標題欄。
此外,對於喜歡全屏模式下整潔檢視的使用者,window.customTitleBarVisibility: "windowed" 選項允許您在全屏模式下隱藏自定義標題欄。此功能可確保更專注、無干擾的編碼環境,同時在非全屏模式下仍提供使用自定義標題欄功能的選項。

強制執行系統主題顏色的新設定
新的 window.systemColorTheme 設定允許您顯式覆蓋應用於 VS Code 原生元素的系統顏色主題,例如 macOS 上的選單或對話方塊。該設定支援以下值:
default:顏色主題與作業系統匹配(預設選項)。auto:根據 VS Code 主題選擇light或dark。light:選擇light系統主題。dark:選擇dark系統主題。
以下是此設定如何應用於 macOS 上下文選單的示例,頂部顯示 light,底部顯示 dark。

允許在不進行確認的情況下關閉未命名工作區
新的 window.confirmSaveUntitledWorkspace 設定允許您在關閉帶有未命名工作區的視窗時停用顯示確認對話方塊。現在對話方塊上還有一個複選框可以停用顯示它。window.confirmSaveUntitledWorkspace 設定預設啟用,以保持當前行為。

注意:在我們的文件中瞭解有關未命名工作區的更多資訊。
切換輸出面板的自動換行
輸出面板現在支援使用 **檢視:切換自動換行** 命令來切換自動換行。這對於檢視輸出面板中的長行文字非常有用。
在新視窗中開啟輸出面板
輸出面板現在在面板標題選單中有一個 **在新視窗中開啟輸出** 操作,用於在單獨的視窗中檢視輸出面板。
從 CLI 更新擴充套件
您現在可以透過使用 --update-extensions 引數從命令列更新擴充套件。這將把所有已安裝的擴充套件更新到最新版本。
快速選擇中的懸停提示現在使用自定義懸停提示
我們將快速選擇中的幾個懸停提示移到了使用自定義懸停提示而不是原生渲染。這使得產品中的渲染更豐富,一致性更高。

在差異編輯器中審查多個檔案
在此版本中,多檔案差異編輯器現已為所有使用者啟用。多檔案差異編輯器允許您在一個可滾動檢視中檢視多個檔案的更改。
目前,多檔案差異編輯器可用於審查本地更改、暫存更改、傳入/傳出更改、stash 和來自拉取請求的更改。可以透過選擇各種新的 **檢視更改** 操作來開啟它,這些操作可以透過多檔案差異圖示識別。
當從原始碼管理檢視開啟差異編輯器時,它會隨著檔案的更改或暫存動態更新檢視。
多檔案差異編輯器仍處於開發中,因此請在接下來的版本中期待更多改進和錯誤修復。
GitHub 拉取請求擴充套件中的多檔案差異
當安裝了 GitHub Pull Requests and Issues 擴充套件時,您可以設定 "githubPullRequests.focusedMode": "multiDiff" 以在開啟拉取請求時自動開啟多檔案差異編輯器。
當您為 github.dev 設定好後,您可以在 GitHub 上的拉取請求上按 . 鍵,然後 github.dev 會以多檔案差異編輯器開啟以審查更改。
編輯器
貼上文字/HTML 內容
貼上為... 命令現在允許您貼上剪貼簿中的 text/html 內容。

例如,當您從網頁複製內容時,可以使用此功能貼上內容的 HTML 而不是純文字。
原始碼管理
提交輸入自定義
在此里程碑中,我們添加了一個新設定 scm.inputMinLineCount,可用於控制提交輸入欄位的初始高度。控制提交輸入欄位最大大小的設定已從 scm.inputMaxLines 重新命名為 scm.inputMaxLineCount,以便與類似設定的命名約定保持一致。
使用者現在可以使用特定於語言的編輯器設定來進一步自定義提交輸入欄位。特定於語言的編輯器設定可用於定義編輯器規則和停用自動換行。
"[scminput]": {
"editor.rulers": [
50,
72
],
"editor.wordWrap": "off"
}
原始碼管理儲存庫檢視改進
為了更好地管理具有大量儲存庫的工作區,我們在儲存庫上下文選單中添加了一個新命令:**關閉其他儲存庫**。我們還為 **關閉儲存庫** 和 **關閉其他儲存庫** 命令添加了多選支援,因此使用者可以一次關閉多個儲存庫,或關閉除少數幾個之外的所有儲存庫。
由於擴充套件貢獻的操作,原始碼管理儲存庫檢視可能會變得擁擠。為了解決這個問題,我們透過右鍵單擊操作並選擇 **隱藏** 來新增隱藏已貢獻操作的功能。隱藏的操作會移到 **...** 選單中。除 **簽出** 和 **同步** 外,所有操作都可以隱藏。
傳入/傳出更改改進
我們繼續最佳化原始碼管理檢視中的傳入/傳出更改部分。在此里程碑中,我們進行了更改,以便僅在當前分支具有跟蹤的遠端分支時才顯示 **傳入更改** 節點。
我們在 **傳入更改** 節點中添加了 **獲取** 和 **拉取** 操作,在 **傳出更改** 節點中添加了 **推送** 操作。
我們添加了操作以檢視每個單獨的提交,以及所有利用多檔案差異編輯器的傳入/傳出更改。
使用者現在可以使用新設定 scm.showChangesSummary 來隱藏 **所有更改** 條目。
合併標籤的能力
我們透過新增合併標籤的功能,解決了長期存在的特性請求。命令面板中添加了一個新命令 **Git: Merge...**,它取代了 **Git: Merge Branch...** 命令。呼叫 **Git: Merge...** 命令將顯示一個快速選擇控制元件,其中列出了分支和標籤。
檢視 stash 命令
我們添加了一個新命令 **Git: View Stash...**,它使使用者能夠透過多檔案差異編輯器檢視儲存庫中的任何 stash。檢視 git stash 時,編輯器標題選單將包含應用/彈出或刪除 stash 的操作。
使用 SSH 金鑰進行提交簽名
在此里程碑中,我們添加了使用帶密碼的 SSH 金鑰對提交進行簽名的功能。當使用 SSH 金鑰簽名提交時,VS Code 將在螢幕頂部顯示一個快速選擇控制元件,用於提示輸入密碼。VS Code 不快取密碼,每次簽名提交時都會提示輸入。
Notebook
浮動視窗支援
筆記本編輯器現在可以在浮動視窗中開啟。您可以將筆記本選項卡從主視窗拖出以在新視窗中開啟它,或使用 **檢視:將編輯器移動到新視窗** 命令。
內建變數檢視
我們在“執行和除錯”檢視中添加了一個實驗性的變數檢視,可用於檢視筆記本核心的變數(如果擴充套件提供了它們)。此功能可以透過以下設定啟用:
"notebook.experimental.variablesView": true
筆記本粘滯滾動
筆記本編輯器的粘滯滾動功能已得到大量最佳化,以使其樣式與工作區的其餘部分保持一致,併為每個 Markdown 元素新增摺疊控制元件。
終端
所選內容下的背景顯示
當 GPU 加速啟用時,具有非預設背景顏色的單元格現在將渲染在常規選擇顏色“下方”。

透過滑鼠滾輪縮放終端
在透過此設定啟用後,現在可以透過按住 Ctrl 鍵並使用滑鼠滾輪來放大和縮小終端。
"terminal.integrated.mouseWheelZoom": true
多行貼上警告改進
在以前的版本中,terminal.integrated.enableMultiLinePasteWarning 接受 true(預設)或 false。當 true 處於活動狀態時,它將始終顯示警告,除非啟用了括號貼上模式或行以 \n 字元結尾。此設定現在接受一個包含以下選項的字串:
auto:以前的 true 行為always:始終顯示警告never:從不顯示警告
此外,對話方塊中還有一個新按鈕,可以將字串貼上為單行,從而刪除所有 \r 和 \n 字元。
連結改進
檔案協議 URI (file://) 現在支援行號和列號擴充套件,就像大多數其他連結一樣。新格式 #<line> 也得到了支援。
終端語音命令
新的 **終端:啟動終端語音** 和 **終端:停止終端語音** 命令可在終端中啟動語音到文字會話。
要使用此新功能,請安裝 VS Code Speech 擴充套件。
任務
路徑分隔符變數的簡寫
新的 ${/} 變數可用作現有 ${pathSeparator} 變數的簡寫。
除錯
觸發斷點
您現在可以設定在另一個斷點命中後自動啟用的斷點。例如,這在診斷僅在某個前置條件之後發生的程式碼失敗情況時非常有用。觸發式斷點適用於所有語言,條件斷點也可用作觸發器。
可以透過右鍵單擊字形邊距,選擇 **新增觸發式斷點...**,然後選擇哪個其他斷點啟用此斷點來設定觸發式斷點。
主題:Codesong(在vscode.dev上預覽)
會話結束時關閉只讀檔案
當附加到偵錯程式時,可能存在不存在於磁碟上的內部或虛擬原始檔,這些檔案以只讀方式開啟。有一個新設定 debug.closeReadonlyTabsOnEnd,它會導致 VS Code 在除錯會話結束時自動關閉從除錯會話中開啟的任何只讀檔案。
測試
執行測試的更多方法
按住 Alt 鍵同時單擊測試裝飾器(如果可用)將在除錯模式下執行該測試。
資源管理器檢視中現在有上下文選單操作,可用於執行檔案中或資料夾中宣告的所有測試。
為擴充套件作者最終確定了 TestRunProfile.isDefault/onDidChangeDefault API
以前,TestRunProfile.isDefault 僅控制測試執行配置檔案的初始預設狀態,在此之後不再更改或讀取。
在此版本中,使用者更改其選定的配置檔案將反映在 TestRunProfile.isDefault 屬性中,並觸發相應的 TestRunProfile.onDidChangeDefault 事件。同樣,當擴充套件更改 isDefault 時,這將導致 UI 中的選定配置檔案更新。
語言
貼上 URL 以自動建立 Markdown 連結
想將您複製的連結轉換為 Markdown 連結嗎?當您在 Markdown 檔案中貼上 URL 並選中文字時,VS Code 現在會自動插入 Markdown 連結。
此功能由 markdown.editor.pasteUrlAsFormattedLink.enabled 設定控制。您可以更改它以自定義此行為:
smartWithSelection— 預設設定。當您選中了文字且不在程式碼塊等特殊元素內時,此設定會啟用該功能。smart— 與smartWithSelection相同,但不需要選中文字。always— 始終將 URL 貼上為 Markdown 連結。never— 停用貼上為 Markdown 連結。
貼上值後,您始終可以透過“貼上”控制元件切換到以其他方式貼上內容。
配置 Markdown 的音訊/影片片段
新的 markdown.editor.filePaste.audioSnippet 和 markdown.editor.filePaste.videoSnippet 設定允許您自定義在 Markdown 中拖放或貼上音訊和影片檔案的方式。片段可以使用以下變數:
${src}— 音訊/影片檔案的解析路徑。${title}— 音訊/影片使用的標題。將為此變數自動建立片段佔位符。
新的 Less 語法
以前的 Less 語法已被存檔,VS Code 現在使用 Better-Less 的語法進行 Less 語法高亮。
新的 Go 語法
Go 語法高亮語法已更改為使用 Go Syntax,它比以前的語法維護更積極。
遠端開發
遠端開發擴充套件允許您透過 SSH 或遠端隧道使用開發容器、遠端機器或適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。
亮點包括:
- 在您的使用者資料資料夾中建立一個
devcontainer.json。 - 使用 Dockerfile 時,在
devcontainer.json中指定構建選項。
您可以在 遠端開發釋出說明中瞭解有關這些功能的更多資訊。
對擴充套件的貢獻
GitHub Copilot
現在可以使用 editor.inlineSuggest.fontFamily 設定來更改內聯建議的字體系列。
在儲存前確認內聯聊天
我們強調負責任地使用 AI,尤其是在涉及原始碼時。因此,我們添加了一個新設定,在儲存 Copilot 生成的程式碼之前會要求使用者進行確認。此設定 inlineChat.acceptedOrDiscardBeforeSave 預設啟用。
_主題:GitHub Light Default(可在 vscode.dev 上預覽)_
啟用設定後,檔案儲存將等待使用者接受或放棄任何待處理的內聯聊天會話。這也適用於啟用自動儲存的情況,自動儲存將暫時停用,直到內聯聊天結束。
按住說話模式
不久前,我們為 VS Code 添加了語音支援。安裝 VS Code Speech 擴充套件,該擴充套件為聊天輸入欄位添加了語音到文字支援。
對於內聯聊天,我們現在添加了“按住說話”功能,其工作方式如下:
- 按下 Cmd+I 或 Ctrl+I 以觸發內聯聊天。
- 按住按鍵,您會注意到語音錄製自動開始。
- 釋放按鍵以停止錄製並將您的請求傳送給 Copilot。
主題:GitHub Light Default(可在 vscode.dev 上預覽)
此新模式還帶有一個設定,該設定預設啟用,但可以透過 inlineChat.holdToSpeech 停用。
預覽:內聯聊天快速語音
除了“按住說話”之外,我們還在嘗試使用更輕量級的 UI 來實現此功能。透過按下 Cmd+K 或 Ctrl+K 然後按住 I 來啟用快速語音。在按住 I 的同時,會顯示一個更輕量級的錄製 UI。釋放後,請求即被髮送。

內聯聊天即時模式
上個版本有一個新的實驗性內聯聊天模式,名為 live3。它提供了更流暢的流式傳輸體驗和更易於理解的差異檢視。這已正式釋出並取代了以前的 live 模式。預設值仍然是 livePreview,但我們鼓勵使用者嘗試 live。我們還正在進行一項實驗,以瞭解哪種模式效果最好。
AI 修復燈泡(閃光)
要呼叫 Copilot,您還可以使用編輯器中的燈泡指示器。選擇文字或將游標移到新行,選擇燈泡,然後選擇 **使用 Copilot 修改** 或 **使用 Copilot 生成**。
如果沒有其他程式碼操作,燈泡會顯示為閃光燈,並直接開啟內聯聊天。

#file 上下文變數
您可以透過在聊天輸入中鍵入 # 來使用幾個上下文變數,我們已新增 #file 以允許您將工作區中的指定檔案作為上下文包含在聊天提示中。從輸入中的建議控制元件中選擇 #file,然後從出現的快速選擇中選擇一個檔案。
如果可能,將包含檔案的全部內容。如果內容太大而無法放入上下文視窗,將包含檔案的輪廓,其中包括函式及其描述(無實現)。如果輪廓也太大,則檔案將不會包含在提示中。

聊天中的預設上下文
以前,我們預設會從活動程式碼編輯器中包含兩種型別的上下文到您的聊天請求中:
- 如果存在文字選擇,則會包含該選擇
- 如果不存在選擇,則會包含活動編輯器可見視口中的程式碼範圍
我們發現第二種型別可能導致混淆,當您想提出一個通用問題時,但大型語言模型將其解釋為關於您編輯器中作為上下文包含的程式碼的問題。我們正在嘗試預設不包含視口中的程式碼,而只包含選定的程式碼。
當然,您通常想詢問編輯器中可見的程式碼,因此我們添加了一個新的上下文變數:#editor。

添加了“清除所有工作區聊天”命令
每次使用 + 按鈕開始新聊天時,您之前的聊天都會儲存在工作區聊天曆史記錄中,您可以透過聊天檢視標題中的時鐘圖示進行訪問。為了方便起見,我們添加了 清除所有工作區聊天 命令來清除您過去的所有聊天曆史記錄。
提交訊息語言
生成 git 提交訊息的程式碼現在使用 github.copilot.chat.localeOverride 設定來生成特定語言的提交訊息。
為私有儲存庫請求額外許可權
為了啟用私有儲存庫的額外工作區搜尋功能,我們需要額外許可權。如果我們檢測到我們尚未擁有這些許可權,我們將在啟動時請求它們。一旦獲得,我們將安全地儲存會話以備將來使用。

Python
預設安裝 Python Debugger 擴充套件
現在,Python Debugger 擴充套件與 Python 擴充套件一起預設安裝。
Python Debugger 擴充套件旨在將除錯功能與主 Python 擴充套件分離,以防止相容性問題。這確保了即使 Python 擴充套件放棄對舊 Python 版本(例如 Python 3.7)的支援,您也可以繼續除錯這些版本的專案,而無需降級您的 Python 擴充套件。它還提供特定於平臺的構建,確保您只收到與您的特定作業系統相關的元件,從而減少下載時間和不必要的開銷。
這個新擴充套件複製了主 Python 擴充套件中的所有可用功能,甚至更多。
為了確保您正在使用新的 Python Debugger 擴充套件,請將您的 launch.json 配置檔案中的 "type": "python" 替換為 "type": "debugpy"。將來,Python 擴充套件將不再提供除錯支援,我們將把所有除錯支援遷移到 Python Debugger 擴充套件以獲得所有除錯功能。
在 Python 直譯器快速選擇中建立環境選項
您現在可以更方便地從 Python 直譯器快速選擇中建立 Python 環境。執行 Python: Select Interpreter 命令,然後選擇 Create Environment 選項為您的專案建立新的虛擬環境。
主題:Catppuccin Mocha(在 vscode.dev 上預覽)
改進了工作區 conda 環境的顯示
Python 直譯器快速選擇現在顯示工作區中 conda 環境的名稱,以便於識別它們。

支援多級 pytest 類
在使用多級 pytest 類時,頂級類現在會在測試資源管理器中顯示。以前,只顯示較低級別的類。
主題:Catppuccin Mocha(在 vscode.dev 上預覽)
Jupyter
最終確定了面向擴充套件作者的 Jupyter Kernel Execution API
Jupyter 擴充套件的執行 Jupyter 核心程式碼的 API 已最終確定。擴充套件可以使用該 API 來執行 Jupyter 核心程式碼。
API 用法的示例可以在 Jupyter Kernel Execution Sample 中找到。
npm 包 @vscode/jupyter-extension 包含所有 TypeScript 型別定義。
當擴充套件嘗試訪問 Jupyter 核心時,使用者會被提示授予或撤銷對核心的訪問許可權。對 Jupyter 核心的訪問是使用者按擴充套件授予的。這意味著使用者可以授予對擴充套件 A 的訪問許可權,並撤銷對擴充套件 B 的訪問許可權。
使用者可以透過命令 Jupyter: Manage Access To Jupyter Kernels 來按擴充套件管理(授予/撤銷)對 Jupyter 核心的訪問。
GitHub 拉取請求和議題
在 GitHub Pull Requests and Issues 擴充套件方面取得了更多進展,該擴充套件允許您處理、建立和管理拉取請求和問題。新功能包括
- 解決當前簽出的 PR 的衝突。
- 問題查詢的
groupBy屬性。 - 點選簽出的 PR 中的永久連結將會在編輯器中開啟檔案。
- 懸停在評論反應上會顯示誰進行了反應。
- 設定
"githubPullRequests.focusedMode": "multiDiff"將在簽出時使用多 diff 編輯器開啟 PR 中的所有檔案。
請檢視擴充套件的 0.80.0 版本 發行說明,瞭解其他亮點。
預覽功能
TypeScript 5.4 Beta 支援
我們現在支援 TypeScript 5.4 的 Beta 版本。有關此版本的詳細資訊,請檢視 TypeScript 5.4 Beta 博文和迭代計劃。亮點包括
- AI 驅動的重構的初步工作。
- 一個新的
NoInfer內建函式,可以幫助庫和型別作者阻止不正確的型別推斷。 - 對型別細化和型別檢查的改進。
要開始使用 TypeScript 5.4 Beta,只需安裝 TypeScript Nightly 擴充套件。請分享您的反饋,並告訴我們您在使用 TypeScript 5.4 時是否遇到任何 bug。
快速搜尋改進
在 1.82 版本中,我們推出了 快速訪問文字搜尋(“快速搜尋”),它允許使用者從一個選擇器中進行搜尋。🔎
快速搜尋現在具有以下功能:
- 編輯器預覽在活動選擇中。在瀏覽時,您可以在編輯器的上下文中檢視結果。
- 從快速搜尋導航到搜尋檢視更加容易。選擇輸入框旁邊的按鈕或選擇一個結果,即可將結果傳輸到搜尋檢視。
主題:Night Owl(在 vscode.dev 上預覽)
提議的 API
每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試這些 API。一如既往,我們希望得到您的反饋。以下是嘗試提議 API 的步驟
- 查詢您要嘗試的提議並將其名稱新增到
package.json#enabledApiProposals。 - 使用最新的 @vscode/dts 並執行
npx @vscode/dts dev。它會將相應的d.ts檔案下載到您的工作區。 - 您現在可以根據該提議進行程式設計。
您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。
測試覆蓋率 API
在此里程碑中,測試覆蓋率 API 和編輯器內體驗已達到功能完備狀態。我們鼓勵擴充套件作者試用它們,並在其預計在 VS Code 1.87 版本中最終定稿之前提供反饋。
雖然 API 內容太多無法在此處包含,但我們相信它相當簡單,並歡迎您在 issue #123713 中就此提案提供意見。
聊天代理 API
我們一直在開發一個 API,使擴充套件作者能夠將他們自己的聊天代理貢獻到 VS Code 中的聊天檢視。我們對 API 進行了一些更改,包括:
- 傳遞給聊天代理的歷史記錄上下文現在正確地表示了給定訊息所呼叫的聊天代理和命令、歷史記錄訊息中變數的值以及結果是什麼。
ChatAgentTask已被移除,現在可以在響應流的中間使用ChatProgressMessage來涵蓋相同場景。- 所有“slashCommand”相關的術語已重新命名為“subCommand”。
如果您想嘗試該 API,可以從我們的 示例聊天代理擴充套件開始,並訂閱 issue #199908 以獲取 API 更新。
程式碼操作亮點 API
對於“提取方法”或“移動到檔案”等重構,並不總是清楚操作將應用於哪些程式碼。對於 TypeScript 等語言來說尤其如此,這些語言會智慧地擴充套件使用者當前的選區。
此 API 允許程式碼操作提供一個或多個範圍(Range[])以應用於。當用戶懸停或透過程式碼操作列表瀏覽時,該範圍將被高亮顯示。
- 對於重構,此範圍將是當前檔案中將受重構影響的程式碼。
- 對於快速修復,您可以高亮顯示相關的診斷。對於透過
editor.codeActionWidget.includeNearbyQuickFixes呼叫的快速修復,這已經完成。
問題報告者 API
對建議的 API 進行的小增補,允許 IssueUriRequestHandler 和 IssueDataProvider 一起使用。
此外,對 vscode.commands.openIssueReporter 命令的改進,該命令現在可以貢獻額外的擴充套件資料並修改 GitHub 問題指向的 URL。
訂閱 issue #197863 以獲取 API 和 openIssueReporter 命令的更新或更改。
評論反應參與者 API
CommentReaction 介面有一個新的 reactors 屬性,以便擴充套件可以指示誰對評論進行了反應。這些 reactors 目前在評論反應的懸停提示中顯示。
請參閱 issue #201131 來跟蹤此 API 的進度。
最終確定的 API
新的 workspace.save 和 workspace.saveAs API
新最終確定的 API workspace.save 和 workspace.saveAs 允許擴充套件觸發儲存編輯器的流程,可以是儲存到其資源,也可以是要求使用者提供一個資源。
所有儲存方法都返回結果 Uri,如果操作被取消則返回 undefined。未命名檔案將始終要求使用者提供目標,除非已關聯路徑。
FileSystemProvider API 的只讀訊息
當使用 registerFileSystemProvider 註冊 FileSystemProvider 時,可以設定 options 來將整個檔案系統標記為只讀。現在,如果 isReadonly 選項設定為 MarkdownString,則當用戶嘗試在檔案系統中編輯檔案時,將在編輯器中顯示該訊息。

工程
內務管理
我們在十二月初進行了年度例行維護。我們在各儲存庫中淨減少了 1891 個 issue。下圖很好地說明了我們年度例行維護的必要性和影響。

Markdown Language Service 0.4 釋出
Markdown Language Service 包為 VS Code 內建的 Markdown 支援提供支援。新的 0.4 版本捆綁了我們過去半年所做的許多改進,其他工具和編輯器可以從中受益。以下是一些亮點:
- 為 Markdown 中的 HTML 片段啟用文件連結、引用和重新命名。
- 修復正則表示式中潛在的災難性回溯。
- 避免在完成時新增額外的編碼。
- 為工作區符號搜尋使用模糊匹配。
- 修復了連結檢測/驗證中的一些情況。
新的 localize2 函式,可更輕鬆地建立 ILocalizedString
在 VS Code 的核心程式碼庫中,我們使用一種稱為 ILocalizedString 的型別來並排渲染本地化字串和英文字串。如果您使用了語言包並打開了命令面板,您可能已經見過它。
以前,我們必須這樣編寫這些表示式:
const str = { value: localize('id', 'Hello World'), original: 'Hello World' };
現在可以這樣表達:
const str = localize2('id', 'Hello World');
然後,我們的本地化管道將拾取這些 localize2 的出現。
Electron 27 更新
在此里程碑中,我們將 Electron 27 更新推廣到穩定版使用者。此次更新帶來了 Chromium 118.0.5993.159 和 Node.js 18.17.1。我們要感謝所有在 Insiders 版本上進行自我託管並提供早期反饋的人。
Linux 最低要求更新
在此里程碑中,我們更新了構建桌面客戶端的工具鏈。從本版本開始,VS Code 桌面僅相容基於 glibc 2.28 或更高版本以及 glibcxx 3.4.25 或更高版本的 Linux 發行版,例如 Debian 10、RHEL 8 或 Ubuntu 20.04。
如果您無法升級您的 Linux 發行版,推薦的替代方案是使用我們的Web 客戶端。如果您想使用桌面版本,則可以下載 VS Code 1.85 版本。根據您的平臺,請確保停用更新以保持在該版本。一個好的建議是使用便攜模式進行安裝。
值得注意的修復
感謝
最後但同樣重要的是,向 VS Code 的貢獻者們致以衷心的感謝。
問題跟蹤
對我們問題跟蹤的貢獻
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @starball5 (starball)
- @RedCMD (RedCMD)
- @okineadev (Okinea Dev)
拉取請求
對 vscode 的貢獻
- @a-stewart (Anthony Stewart)
- 在
editor.action.clipboardPasteAction上觸發輸入事件 PR #198822 - 在
getCustomBuiltinExtensionsFromLocations的錯誤訊息中記錄extensionLocation而不是locationPR #200748
- 在
- @Ajaykumbhare (Ajay Kumbhare): fix: 終端在編輯器區域重新命名功能不正常 PR #202270
- @andrewbranch (Andrew Branch): Fix preferTypeOnlyAutoImports preference getter PR #201376
- @aramikuto (Aleksandr Kondrashov): Update IExplorerView interface PR #201992
- @audreygao (Audrey Ya Gao): Fix #193468 - Fix bug with error notification when pressing "l" on non-expandable reference item. PR #199996
- @bricker (Bryan Ricker): doc typo fix PR #202429
- @callumok2004 (Callum OKane): Add
bun.lockbto default file nesting under package.json PR #201065 - @CGNonofr (Loïc Mangeonjean): Take into account models created beforehand PR #199652
- @chartrandf (Francis Chartrand): timeline: use follow option so timeline follow file beyond renames PR #187174
- @conwnet (netcon): fix:
workbench.editorAssociationsnot work in workbench configurationDefaults PR #194087 - @cpendery (Chapman Pendery)
- fix: terminal suggestion positioning PR #199420
- fix: accepting terminal completions cursor positions PR #199706
- build: enable suggestions when 'shellIntegration.suggestEnabled' is true PR #199821
- refactor: xterm suggestion addon into terminalContrib PR #200107
- @DiscreteTom (DiscreteTom): fix #193746 PR #197523
- @effectivecui: avoid to enter the infinite loop when item.children is empty. PR #201701
- @Flanker32 (Hanxiao Liu): Update java workspace tags PR #197729
- @gayanper (Gayan Perera): Add support for breakpoint dependencies PR #166202
- @GenericTSDeveloper: Fixed issue Misalignment of suggestion details widget (https://github.com/microsoft/monaco-editor/issues/3373) PR #198730
- @gjsjohnmurray (John Murray)
- Implement keyboard navigation between list find/filter matches PR #180078
- Preserve sort order when filtering Git branch / tag quickpicks (fix #199471) PR #199473
Git: Merge Branch...picker duplicates branch name in description (fix #199562) PR #199742- Fix
Customize Layoutbugs related to Activity Bar (fix #200571) PR #200572
- @gregvanl (Greg Van Liew): Add missing commas PR #201137
- @harbin1053020115 (ermin.zem): fix: select theme according to current color theme in dev mode PR #190035
- @hsfzxjy (Xie Jingyi): Defer onDidStyleChange to Repl being visible PR #200473
- @iisaduan (Isabel Duan): fix typescript/54492: check if file rename changes extension PR #200220
- @impressivewebs (Louis Lazaris)
- Fixed some CSS terminology PR #202125
- Corrected CSS Hover Documentation text PR #202142
- @irgendwr (Jonas Bögle): Add: "Close Other Repositories" in git scm menu PR #130931
- @jacekkopecky (Jacek Kopecký): Fixes #198566: ellipsize left-cut search preview PR #198567
- @jaraco (Jason R. Coombs): Add support for extracting environment from xonsh. PR #201036
- @jeanp413 (Jean Pierre)
- Fix vscode.tasks.executeTask error Unexpected: Task does not exist after task.terminate() PR #200872
- Fix single tab context menu actions sometimes don't work PR #201021
- Fix task progress indicator does not appear after the first time PR #201064
- Fix single terminal tab rename action does not work PR #201128
- @johnsoncodehk (Johnson Chu): Fix optionalReplacementSpan not being applied to completion entries PR #200945
- @JoyceGu (Joyce Gu): add JS Vector DB libraries PR #199980
- @jtbandes (Jacob Bandes-Storch): Update Swift.tmLanguage PR #200698
- @keerthivasansa (Keerthi Vasan S A): Workbench actions for Tree Fuzzy Search Toggle PR #175137
- @khreenberg (Kim Reenberg): fix: fallback to strings for non-executable libc.so.6 PR #202581
- @kkocdko (kkocdko): Fix platform detection after Node.js 21 PR #200935
- @ksg97031 (KSG): docs: Fix typos in description of multiple argument for Go To commands PR #201122
- @Leask (Sixia "Leask" Huang): fix: tweak check-requirements for calling ldconfig PR #202645
- @loganrosen (Logan Rosen): Update Stack Overflow tag in CONTRIBUTING.md PR #126199
- @mahmoudsalah1993 (Mahmoud Salah): For open diff editors, resolve the underlying original editor to set … PR #201597
- @Malix-off (Malix): Remove unused import in
extensions/git/src/api/git.d.tsPR #200797 - @marrej (Marcus Revaj): # Fix dropping of partialAccepts PR #199663
- @MaxBR97: Added scm.inputMinLines configuration PR #200551
- @mohammadamin16 (Mohammad Amin): debug: close read-only tabs on end debug session PR #199898
- @mrienstra (Michael Rienstra): docs: document new
configuration.markdown.copyFiles.destinationoptions PR #203391 - @MrJithil (Jithil P Ponnan): chore: replace deprecated octal escape sequences with hex PR #197518
- @ngarside (Nathan Garside): Add syntax highlighting for
*.repofiles PR #199859 - @nrayburn-tech (Nicholas Rayburn): npm extension - check for root package.json before findFiles PR #124803
- @poeck (Paul Köck): chore: update copyright year PR #202344
- @r3m0t (Tomer Chachamu): Wait for paste to finish in paste command (fixes #196161) PR #196516
- @RedCMD (RedCMD)
- Change lowercase
lto uppercaseL.asp-vb-net.tmLanguage.jsonPR #201981 onDidChangeEmmiterfires constantly when it shouldn't PR #202198
- Change lowercase
- @remcohaszing (Remco Haszing): Remove bigNumbersDelta PR #194712
- @RobbyCBennett (Robby Bennett): make gotoErrorWidget styling of relatedInformation more consistent with that of markerHoverParticipant PR #195409
- @robertohuertasm (Roberto Huertas): feat(stash): return the stash result PR #177732
- @ronakj (Ronak Jain): Fix tsserver crashing when using custom node path PR #201966
- @russelldavis (Russell Davis): Fix race condition with restoration of problems when closing a file PR #183271
- @samhanic: [CLI] extension update command PR #199893
- @shubhisroking (Shubh): Replace the deprecated canceled with Cancellation Error. PR #197605
- @SimonSiefke (Simon Siefke)
- fix: memory leak in menubar PR #198052
- fix: memory leak in defaultWorkerFactory PR #198710
- @sparxooo (sparxooo): Fix for #200257 plus existing trailing non-numerics regex fix PR #200919
- @Splizard (Quentin Quaadgras): Mobile/Android: support text selection with a pen/stylus. PR #198578
- @susiwen8 (susiwen8)
- fix: #200046 PR #200485
- fix:
installinnpm scriptshouldn't be opened PR #201082
- @VDisawal: #198975: saveValue => historyNavigator.add PR #199142
- @wenfangdu (Wenfang Du): feat(git): added
autoClosingPairsin language configuration files PR #131403 - @Yesterday17 (Yesterday17): fix ExtHostLabelService typo PR #198855
- @yiliang114 (易良): fix: console format of fetchUrl PR #198909
- @zWingz (zWing): fix registerProfileContentHandler typos PR #183197
對 vscode-flake8 的貢獻
- @maxg203 (Max Goodridge): Fix link in README.md PR #269
對 vscode-hexeditor 的貢獻
- @IngilizAdam (Hasan Tuna): Select between offsets PR #470
對 vscode-languageserver-node 的貢獻
- @debonte (Erik De Bonte): Support
WorkspaceEditMetadatainworkspace/applyEditPR #1390 - @MariaSolOs (Maria José Solano)
- @rroessler (Reuben Roessler): Changed Successful Exit Notification for Node Client PR #1404
- @sh-cho (Seonghyeon Cho): Update build status badge with Azure pipeline PR #1392
- @werat (Andy Hippo): Always delete feature providers in
unregister()PR #1380
對 vscode-pull-request-github 的貢獻
- @Balastrong (Leonardo Montini): Create issue from markdown template PR #5503
- @joshuaobrien
- @pouyakary (Pouya Kary ✨): Fixes #5620 PR #5621
對 vscode-vsce 的貢獻
- @sebas2day (Sebastiaan Brouwer): feat: 支援 yarn workspaces PR #493
- @whosafe: 從其他平臺過濾資料 PR #912
對 language-server-protocol 的貢獻
- @alcarney (Alex Carney)
- @asukaminato0721 (Asuka Minato): add-vscoq PR #1869
- @BeardedFish (Darian Benam): 將 Apache Dispatcher Config 新增到 Language Server Implementations 列表 PR #1875
- @DanTup (Danny Tuppeny): 澄清 snippet 轉義規則 PR #1868
- @Fomys (Louis Chauvet): 澄清 CompletionItem.textEdit 說明 PR #1722
- @mhanberg (Mitchell Hanberg): 修復 workspace/configuration 中的拼寫錯誤 PR #1823
對 monaco-editor 的貢獻
- @kokovtsev (Dmitry Kokovtsev): fix: 啟用 JSON 補全詳情中的 markdown PR #4210
- @mevisioam: 暴露 JSON worker PR #4299
- @nora-soderlund (Nora Söderlund): chore(docs): 修復 monaco.d.ts 連結 PR #4243
- @OfekShilon (Ofek)
- @soof-golan (Soof Golan): feat: 支援 Python 3.12 關鍵字 PR #4212
- @tamayika: 將 JSON 符號資訊更改為文件符號 PR #3894
對 node-jsonc-parser 的貢獻
- @H4ad (Vinicius Lourenço): perf(format): 儘可能快取換行符和空格 PR #81