現已釋出!閱讀關於 11 月新增功能和修復的內容。

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 月版。此版本中包含許多更新,我們希望您會喜歡,其中一些主要亮點包括:

如果您想線上閱讀這些發行說明,請訪問 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 設定值不匹配時,狀態列會顯示縮放級別指示器。選擇狀態列指示器可找到更改縮放級別、重置縮放級別或快速轉到相關設定的控制元件。

Zoom indicator and controls in the Status Bar.

自定義縮放級別的視窗會在重啟和工作區更改後保留該縮放級別。

注意:window.zoomPerWindow 配置為 false 以恢復之前的縮放級別行為。

更強大、更靈活的自動儲存選項

VS Code 長期以來一直提供自動儲存選項。在此版本中,我們使此功能更加強大。

為每個資源或語言配置自動儲存

所有自動儲存設定現在都可以按資料夾或語言進行配置,這允許您僅為特定語言或資料夾選擇性地啟用自動儲存。

在下面的示例中,設定配置如下:

{
  "[markdown]": {
    "files.autoSave": "afterDelay"
  }
}

正如您所見,已編輯的 Markdown 檔案立即儲存,而 TypeScript 檔案仍保持未儲存狀態。

出現錯誤時停用自動儲存

新的 files.autoSaveWhenNoErrors 設定允許您在自動儲存將正常儲存編輯器時檔案中存在錯誤標記的情況下停用自動儲存。

當您有外部工具監視檔案更改,並且希望避免這些工具對包含錯誤的檔案進行操作時,這可能很有用。

僅自動儲存工作區檔案

最後,一個新的設定 files.autoSaveWorkspaceFilesOnly,它將自動儲存限制為僅工作區內的檔案。

允許為每個擴充套件停用通知

我們現在提供更精細地控制停用擴充套件通知的選項。從通知提示中,您可以為該擴充套件停用通知。

Turn off notifications for an extension.

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

Manage notifications for extensions.

此新功能是對我們現有的“請勿打擾模式”的補充,該模式全域性停用所有通知。與全域性開關一樣,錯誤通知將始終出現且無法停用。

允許交換左右差異編輯器

當您比較兩個檔案時(例如從檔案資源管理器中),會出現一個新的操作來交換差異編輯器的左右兩側。

注意:比較兩個可編輯檔案允許您在任一側進行更改。

從命令列讀取 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" 選項允許您在全屏模式下隱藏自定義標題欄。此功能可確保更專注、無干擾的編碼環境,同時在非全屏模式下仍提供使用自定義標題欄功能的選項。

The 'Window: Custom Title Bar Visibility' setting in the Settings editor.

強制執行系統主題顏色的新設定

新的 window.systemColorTheme 設定允許您顯式覆蓋應用於 VS Code 原生元素的系統顏色主題,例如 macOS 上的選單或對話方塊。該設定支援以下值:

  • default:顏色主題與作業系統匹配(預設選項)。
  • auto:根據 VS Code 主題選擇 lightdark
  • light:選擇 light 系統主題。
  • dark:選擇 dark 系統主題。

以下是此設定如何應用於 macOS 上下文選單的示例,頂部顯示 light,底部顯示 dark

Showing both 'light' and 'dark' system theme applied to a context menu.

允許在不進行確認的情況下關閉未命名工作區

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

Untitled workspace confirmation dialog showing checkbox to always discard changes.

注意:我們的文件中瞭解有關未命名工作區的更多資訊。

切換輸出面板的自動換行

輸出面板現在支援使用 **檢視:切換自動換行** 命令來切換自動換行。這對於檢視輸出面板中的長行文字非常有用。

在新視窗中開啟輸出面板

輸出面板現在在面板標題選單中有一個 **在新視窗中開啟輸出** 操作,用於在單獨的視窗中檢視輸出面板。

從 CLI 更新擴充套件

您現在可以透過使用 --update-extensions 引數從命令列更新擴充套件。這將把所有已安裝的擴充套件更新到最新版本。

快速選擇中的懸停提示現在使用自定義懸停提示

我們將快速選擇中的幾個懸停提示移到了使用自定義懸停提示而不是原生渲染。這使得產品中的渲染更豐富,一致性更高。

Quick Pick hover rendered with custom hover instead of native.

在差異編輯器中審查多個檔案

在此版本中,多檔案差異編輯器現已為所有使用者啟用。多檔案差異編輯器允許您在一個可滾動檢視中檢視多個檔案的更改。

目前,多檔案差異編輯器可用於審查本地更改、暫存更改、傳入/傳出更改、stash 和來自拉取請求的更改。可以透過選擇各種新的 **檢視更改** 操作來開啟它,這些操作可以透過多檔案差異圖示識別。

當從原始碼管理檢視開啟差異編輯器時,它會隨著檔案的更改或暫存動態更新檢視。

多檔案差異編輯器仍處於開發中,因此請在接下來的版本中期待更多改進和錯誤修復。

GitHub 拉取請求擴充套件中的多檔案差異

當安裝了 GitHub Pull Requests and Issues 擴充套件時,您可以設定 "githubPullRequests.focusedMode": "multiDiff" 以在開啟拉取請求時自動開啟多檔案差異編輯器。

當您為 github.dev 設定好後,您可以在 GitHub 上的拉取請求上按 . 鍵,然後 github.dev 會以多檔案差異編輯器開啟以審查更改。

編輯器

貼上文字/HTML 內容

貼上為... 命令現在允許您貼上剪貼簿中的 text/html 內容。

Using 'Paste As' to paste HTML content.

例如,當您從網頁複製內容時,可以使用此功能貼上內容的 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 加速啟用時,具有非預設背景顏色的單元格現在將渲染在常規選擇顏色“下方”。

Cell background colors in the terminal are now retained, even when selected.

透過滑鼠滾輪縮放終端

在透過此設定啟用後,現在可以透過按住 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 中的選定配置檔案更新。

語言

想將您複製的連結轉換為 Markdown 連結嗎?當您在 Markdown 檔案中貼上 URL 並選中文字時,VS Code 現在會自動插入 Markdown 連結。

此功能由 markdown.editor.pasteUrlAsFormattedLink.enabled 設定控制。您可以更改它以自定義此行為:

  • smartWithSelection — 預設設定。當您選中了文字且不在程式碼塊等特殊元素內時,此設定會啟用該功能。
  • smart — 與 smartWithSelection 相同,但不需要選中文字。
  • always — 始終將 URL 貼上為 Markdown 連結。
  • never — 停用貼上為 Markdown 連結。

貼上值後,您始終可以透過“貼上”控制元件切換到以其他方式貼上內容。

配置 Markdown 的音訊/影片片段

新的 markdown.editor.filePaste.audioSnippetmarkdown.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 預設啟用。

Inline chat save consent message. _主題:GitHub Light Default(可在 vscode.dev 上預覽)_

啟用設定後,檔案儲存將等待使用者接受或放棄任何待處理的內聯聊天會話。這也適用於啟用自動儲存的情況,自動儲存將暫時停用,直到內聯聊天結束。

按住說話模式

不久前,我們為 VS Code 添加了語音支援。安裝 VS Code Speech 擴充套件,該擴充套件為聊天輸入欄位添加了語音到文字支援。

對於內聯聊天,我們現在添加了“按住說話”功能,其工作方式如下:

  • 按下 Cmd+ICtrl+I 以觸發內聯聊天。
  • 按住按鍵,您會注意到語音錄製自動開始。
  • 釋放按鍵以停止錄製並將您的請求傳送給 Copilot。

主題:GitHub Light Default(可在 vscode.dev 上預覽)

此新模式還帶有一個設定,該設定預設啟用,但可以透過 inlineChat.holdToSpeech 停用。

預覽:內聯聊天快速語音

除了“按住說話”之外,我們還在嘗試使用更輕量級的 UI 來實現此功能。透過按下 Cmd+KCtrl+K 然後按住 I 來啟用快速語音。在按住 I 的同時,會顯示一個更輕量級的錄製 UI。釋放後,請求即被髮送。

Quick Voice showing only a microphone indicator and the text of the recorded voice message.

內聯聊天即時模式

上個版本有一個新的實驗性內聯聊天模式,名為 live3。它提供了更流暢的流式傳輸體驗和更易於理解的差異檢視。這已正式釋出並取代了以前的 live 模式。預設值仍然是 livePreview,但我們鼓勵使用者嘗試 live。我們還正在進行一項實驗,以瞭解哪種模式效果最好。

AI 修復燈泡(閃光)

要呼叫 Copilot,您還可以使用編輯器中的燈泡指示器。選擇文字或將游標移到新行,選擇燈泡,然後選擇 **使用 Copilot 修改** 或 **使用 Copilot 生成**。

如果沒有其他程式碼操作,燈泡會顯示為閃光燈,並直接開啟內聯聊天。

Inline chat opened from the sparkle.

#file 上下文變數

您可以透過在聊天輸入中鍵入 # 來使用幾個上下文變數,我們已新增 #file 以允許您將工作區中的指定檔案作為上下文包含在聊天提示中。從輸入中的建議控制元件中選擇 #file,然後從出現的快速選擇中選擇一個檔案。

如果可能,將包含檔案的全部內容。如果內容太大而無法放入上下文視窗,將包含檔案的輪廓,其中包括函式及其描述(無實現)。如果輪廓也太大,則檔案將不會包含在提示中。

File context example in the Copilot Chat View.

聊天中的預設上下文

以前,我們預設會從活動程式碼編輯器中包含兩種型別的上下文到您的聊天請求中:

  1. 如果存在文字選擇,則會包含該選擇
  2. 如果不存在選擇,則會包含活動編輯器可見視口中的程式碼範圍

我們發現第二種型別可能導致混淆,當您想提出一個通用問題時,但大型語言模型將其解釋為關於您編輯器中作為上下文包含的程式碼的問題。我們正在嘗試預設不包含視口中的程式碼,而只包含選定的程式碼。

當然,您通常想詢問編輯器中可見的程式碼,因此我們添加了一個新的上下文變數:#editor

Editor context example in the Copilot Chat View.

添加了“清除所有工作區聊天”命令

每次使用 + 按鈕開始新聊天時,您之前的聊天都會儲存在工作區聊天曆史記錄中,您可以透過聊天檢視標題中的時鐘圖示進行訪問。為了方便起見,我們添加了 清除所有工作區聊天 命令來清除您過去的所有聊天曆史記錄。

提交訊息語言

生成 git 提交訊息的程式碼現在使用 github.copilot.chat.localeOverride 設定來生成特定語言的提交訊息。

為私有儲存庫請求額外許可權

為了啟用私有儲存庫的額外工作區搜尋功能,我們需要額外許可權。如果我們檢測到我們尚未擁有這些許可權,我們將在啟動時請求它們。一旦獲得,我們將安全地儲存會話以備將來使用。

Modal window asking for additional authentication for a private repository.

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 選項為您的專案建立新的虛擬環境。

在 Python 直譯器快速選擇中建立環境選項。 主題:Catppuccin Mocha(在 vscode.dev 上預覽)

改進了工作區 conda 環境的顯示

Python 直譯器快速選擇現在顯示工作區中 conda 環境的名稱,以便於識別它們。

Workspace conda environment names displayed in the Python interpreter Quick Pick.

支援多級 pytest 類

在使用多級 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 的步驟

  1. 查詢您要嘗試的提議並將其名稱新增到 package.json#enabledApiProposals
  2. 使用最新的 @vscode/dts 並執行 npx @vscode/dts dev。它會將相應的 d.ts 檔案下載到您的工作區。
  3. 您現在可以根據該提議進行程式設計。

您不能釋出使用提議 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 進行的小增補,允許 IssueUriRequestHandlerIssueDataProvider 一起使用。

此外,對 vscode.commands.openIssueReporter 命令的改進,該命令現在可以貢獻額外的擴充套件資料並修改 GitHub 問題指向的 URL。

訂閱 issue #197863 以獲取 API 和 openIssueReporter 命令的更新或更改。

評論反應參與者 API

CommentReaction 介面有一個新的 reactors 屬性,以便擴充套件可以指示誰對評論進行了反應。這些 reactors 目前在評論反應的懸停提示中顯示。

請參閱 issue #201131 來跟蹤此 API 的進度。

最終確定的 API

新的 workspace.saveworkspace.saveAs API

新最終確定的 API workspace.saveworkspace.saveAs 允許擴充套件觸發儲存編輯器的流程,可以是儲存到其資源,也可以是要求使用者提供一個資源。

所有儲存方法都返回結果 Uri,如果操作被取消則返回 undefined。未命名檔案將始終要求使用者提供目標,除非已關聯路徑。

FileSystemProvider API 的只讀訊息

當使用 registerFileSystemProvider 註冊 FileSystemProvider 時,可以設定 options 來將整個檔案系統標記為只讀。現在,如果 isReadonly 選項設定為 MarkdownString,則當用戶嘗試在檔案系統中編輯檔案時,將在編輯器中顯示該訊息。

Example of readonly message showing in the editor.

工程

內務管理

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

Chart of issue counts over the last years

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 的貢獻者們致以衷心的感謝

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-flake8 的貢獻

vscode-hexeditor 的貢獻

vscode-languageserver-node 的貢獻

vscode-pull-request-github 的貢獻

vscode-vsce 的貢獻

language-server-protocol 的貢獻

monaco-editor 的貢獻

node-jsonc-parser 的貢獻

© . This site is unofficial and not affiliated with Microsoft.