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

2023 年 1 月 (版本 1.75)

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

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


歡迎使用 Visual Studio Code 2023 年 1 月版。此版本中有許多我們希望您會喜歡的更新,主要亮點包括:

如果您想線上閱讀這些發行說明,請訪問 code.visualstudio.com 上的更新頁面。

內測版:想盡快嘗試新功能?您可以下載每晚的內測版構建,並儘快嘗試最新的更新。

內務管理

在以前的釋出說明中,團隊報告了我們的內務管理工作,我們希望在此處也這樣做。

正如我們在 2022 年 11 月宣佈的那樣,我們利用 12 月整理了我們的 GitHub 問題和拉取請求(請參閱我們的問題清理指南)。在所有儲存庫中,我們實現了開放問題和拉取請求淨減少 3637 個。不出所料,大部分減少發生在我們的前 5 個儲存庫中:microsoft/vscode (2520)、microsoft/vscode-jupyter (374)、microsoft/vscode-remote-release (278)、microsoft/vscode-python (220) 和 microsoft/vscode-pull-request-github (160)。

輔助功能

差異導航改進

轉到下一/上一更改”現在具有音訊提示,以指示行是否已插入、刪除或修改。此外,更改的行被選中,以便螢幕閱讀器可以讀取它。

終端輔助功能模式

終端:聚焦可訪問緩衝區”(⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2))命令允許螢幕閱讀器透過鍵盤導航終端緩衝區。

終端輔助功能幫助

與編輯器中的“顯示輔助功能幫助”命令類似,“終端:顯示終端輔助功能幫助”()命令為螢幕閱讀器使用者提供了重要資訊。

Terminal accessibility help is presented on top of the terminal

工作區信任編輯器快捷方式

為了改善工作區信任編輯器的鍵盤輔助功能(可透過“工作區:管理工作區信任”開啟),您現在可以使用鍵盤透過 Ctrl/Cmd+Enter 切換當前工作區的信任,或使用 Ctrl/Cmd+Shift+Enter 切換父資料夾的信任。

Workspace Trust Editor showing the trust buttons with their keyboard shortcuts

設定編輯器指示器上的鍵盤導航得到改進

對於具有多個指示器(例如“已在別處修改”指示器和“預設值已更改”指示器)的設定,現在使用左右箭頭鍵在指示器之間導航。此更改允許使用者透過單次按下 Tab 鍵退出指示器。

配置檔案

我們很高興地宣佈“配置檔案”功能現已在 VS Code 中普遍可用。配置檔案可以包含擴充套件、設定、鍵盤快捷方式、UI 狀態、任務和使用者程式碼片段。您可以為不同的開發場景自定義 VS Code,例如資料科學、文件編寫,或用於多種程式語言,例如 Python 或 Java。如果您有基於工作流(例如“工作”或“演示”)的不同 VS Code 設定,您也可以將它們儲存為不同的配置檔案。您可以同時開啟具有不同配置檔案的多個工作區(資料夾)。

下圖演示了一個使用為工作設定自定義的“工作”配置檔案開啟的資料夾。

Folder opened in Work profile

您還可以匯出和匯入配置檔案,以便與您的同事、朋友或學生共享,幫助他們開始使用 VS Code。

以下影片演示瞭如何使用 GitHub gist 匯出配置檔案以與他人共享。接收配置檔案連結的使用者可以在Web 版 VS Code 中預覽共享配置檔案,並將其匯入到其本地 VS Code 例項中。

Export and share profile

注意:配置檔案目前不適用於遠端場景,例如GitHub Codespaces,但我們正在努力啟用此功能。您可以在問題 #165247 中跟蹤進度。

工作臺

改進了多檢視調整大小支援

您現在可以透過拖動檢視的角點同時調整多個檢視的大小。

改進了網格佈局

如果編輯器被最小化,網格現在會在調整整個工作臺或側邊欄大小時保留該狀態。在下面的短影片中,右側最小化編輯器的寬度在整個編輯器區域展開時保持不變。

從“自定義佈局”命令恢復預設值

當您透過觸發命令或使用自定義標題欄中的佈局控制元件使用自定義“自定義佈局”命令時,您可以使用佈局控制元件右上角的恢復箭頭按鈕“恢復預設值”。

Customize layout control showing the new Restore Defaults button

從面板管理面板對齊

您現在可以直接從面板上下文選單調整面板對齊方式,就像調整面板位置一樣。

Panel context menu showing the panel alignment submenu

簡化的首選項選單

我們簡化了全域性設定的“首選項”選單,並以更符合邏輯的順序和分組組織了選項。

Global settings menu showing expanded Themes flyout

樹查詢歷史記錄

樹檢視中的“查詢”控制元件現在支援歷史記錄導航。您可以使用向上/向下箭頭鍵導航先前的搜尋歷史記錄。

樹查詢連續匹配

樹檢視“查詢”控制元件現在支援連續匹配以及現有的“模糊”匹配。在下面的影片中,最初搜尋“src”會得到“resource”等匹配項。當透過“模糊匹配”切換按鈕停用“模糊”匹配時,只會突出顯示包含連續文字“src”的文字。

列表按頁滾動

一個新的設定workbench.list.scrollByPage允許您配置在直接單擊捲軸時列表是否應按頁滾動。

列表型別導航模式

新的workbench.list.typeNavigationMode設定允許您配置列表的型別導航模式。預設情況下(設定值automatic),在您鍵入時會在列表和樹中進行導航。如果您希望僅在某些時候啟用導航,您可以將typeNavigationMode設定為trigger,並且列表只會在執行list.triggerTypeNavigation命令後進入型別導航模式。

命令list.triggerTypeNavigation預設沒有鍵盤繫結,但您可以新增自己的。例如,如果您想在按下/鍵後進入型別導航模式,您可以新增一個鍵盤繫結,例如

{
  "key": "/",
  "command": "list.toggleKeyboardNavigation",
  "when": "listFocus"
}

開啟大檔案的新確認

為了防止意外開啟非常大的檔案,尤其是在遠端環境中可能會因網路傳輸而產生實際成本時,在開啟檔案之前會顯示確認。該限制可以透過新的workbench.editorLargeFileConfirmation設定進行修改,並且根據開啟本地檔案和遠端檔案有不同的預設值。

Large file confirmation shown for a 2GB package.json file

檔案觀察器支援 files.watcherExclude glob 模式

files.watcherExclude 設定支援 glob 模式,用於檔案觀察器的強大排除規則。然而,用於檔案觀察的庫本身並不支援 glob 模式。在此里程碑中,我們貢獻了排除 glob 模式的支援,以提高資源使用效率,尤其是在 Linux 上。

對於 Linux,如果您遇到檔案監視問題,請參閱此常見問題條目以獲取更多資訊。

鍵盤快捷方式編輯器改進

顯示貢獻鍵盤繫結的擴充套件

鍵盤快捷方式編輯器現在在“來源”列中顯示貢獻鍵盤繫結的擴充套件。您可以選擇副檔名以開啟擴充套件的詳細資訊頁面。

Source column shows extensions contributing keybindings

您還可以使用擴充套件上下文選單中提供的“擴充套件鍵盤快捷方式”操作搜尋由擴充套件貢獻的任何鍵盤繫結。

Extension keyboard shortcuts action

顯示 when 子句屬性的上下文鍵建議

鍵盤快捷方式編輯器現在顯示when屬性的上下文鍵建議。您可以使用Ctrl+Space快捷方式觸發建議。

Context key suggestions for when clause property

搜尋帶有和絃的鍵盤繫結

鍵盤快捷方式編輯器現在支援搜尋帶有和絃的鍵盤繫結。例如,"Ctrl+K"也將顯示所有以Ctrl+K作為第一個和絃的鍵盤繫結。

配置 shell 環境解析超時時間的設定

一個新設定 application.shellEnvironmentResolutionTimeout (僅限 macOS 和 Linux) 允許您在需要時增加 shell 環境解析的超時時間。預設情況下,VS Code 將等待最多 10 秒來解析環境,但在某些更復雜的 shell 設定情況下,這可能不夠時間。

有關 VS Code 如何解析 shell 環境的更多資訊,請參閱此常見問題解答條目

新的 VSCODE_RESOLVING_ENVIRONMENT 環境變數

當 VS Code 正在解析使用者 shell 環境時,它現在會將一個新的環境變數 VSCODE_RESOLVING_ENVIRONMENT 設定為 1。這對於需要知道它們是否在解析 shell 環境的上下文中執行的使用者指令碼(例如,在 .bashrc 中)很有用。

更新後更輕鬆地選擇退出釋出說明

您現在可以直接從釋出說明編輯器選擇在每次更新後不閱讀釋出說明。這將反映並更新 update.showReleaseNotes 設定。

There's a checkbox inside the release notes editor that allows the user to opt out reading release notes after every update

編輯器

建議選擇模式

有一個新設定 (editor.suggest.selectionMode) 允許您配置在鍵入時或透過觸發字元是否自動選擇建議。

預設情況下,總是選擇最佳建議,以便按下 EnterTab 插入它。如果您不想選擇建議,請將值設定為 neverwhenQuickSuggestionwhenTriggerCharacter。使用這些設定值時,建議仍會顯示,但不會自動選擇,您可以使用箭頭鍵選擇一個。

請注意,此設定僅適用於自動建議,不適用於透過 Ctrl+Space 明確觸發的建議。

程式碼操作列表現在可以滾動

某些擴充套件會生成很長的程式碼操作列表。如果沒有足夠的空間來呈現所有程式碼操作,您現在可以滾動瀏覽列表。

顏色裝飾器限制

編輯器中顯示的顏色裝飾器數量限制為 500 個。這是為了防止在開啟包含大量顏色的檔案時出現效能問題。此限制現在可以透過 editor.colorDecoratorsLimit 設定進行配置。

CSS decorators shown in the editor

編輯器查詢轉到匹配

當查詢控制元件開啟時,新的“轉到匹配項...”命令允許您根據計數跳轉到檔案中的特定匹配項。當您有大量匹配項並希望跳轉到特定匹配項時,這很有用。

Go To Match... command

重新設計的行內建議工具欄

在此里程碑中,我們重新設計了行內建議工具欄,使其更緊湊,更易於使用。它具有用於快速迴圈瀏覽替代建議和完全或逐字接受建議的按鈕。

在下面的影片中,使用者查看了 GitHub Copilot 在註釋提示上提供的兩個建議,然後逐步接受了第一個 consoleconsole.log 的下一個詞。

The toolbar features buttons to quickly cycle through alternative suggestions and to accept a suggestion fully or word by word.

設定 "editor.inlineSuggest.showToolbar": "always" 可用於在有行內建議時始終顯示工具欄。

我們還添加了逐字接受/撤消建議的預設鍵繫結(Ctrl+左/右箭頭)。

終端

新的預設鍵盤繫結

已新增以下預設鍵盤繫結,以提高終端高階功能的發現性

開啟檢測到的連結”命令(⇧⌘O (Windows, Linux Ctrl+Shift+O))是開啟終端連結的鍵盤可訪問方式。該命令會開啟一個快速選擇器,其中包含終端視口中所有可用的連結。

Ctrl+Shift+O will open a Quick Pick with a categorized list of links found

⇧⌘O (Windows, Linux Ctrl+Shift+O) 鍵繫結被選中,因為它與“轉到編輯器中的符號”動作類似,但適用於終端。

轉到最近目錄 - Ctrl/Cmd+G

轉到最近目錄⌘G (Windows, Linux Ctrl+G))會開啟一個快速選擇器,其中包含由Shell 整合獲取的最近目錄。它支援固定和模糊匹配。

Directories are presented in a Quick Pick, split up by the current and previous sessions.

選擇此鍵繫結是因為 Ctrl+G 是一個使用率相對較低的 shell 鍵繫結。

傳送 Ctrl+G 到 shell - Ctrl+Alt+G

由於 Ctrl+G 現在用於“轉到最近目錄”,因此使用 Ctrl+Alt+G 是將 Ctrl+G 直接傳送到 shell 的新方法。

執行最近命令 - Ctrl+Alt+R

執行最近命令 (⌃⌥R (Windows, Linux Ctrl+Alt+R)) 開啟一個最近執行命令的快速選擇器,其模型基於大多數 shell 的反向索引搜尋 (Ctrl+R),但在更易於訪問和更實用的包中。它支援固定和模糊匹配。

Commands previously run are split up by current and previous sessions and also pulled in from the shell's history file

選擇鍵繫結 ⌃⌥R (Windows, Linux Ctrl+Alt+R) 是因為它是 Ctrl+R 的替代行為,但該鍵繫結太重要,無法覆蓋其預設行為。

輔助功能模式覆蓋

由於反向索引搜尋對螢幕閱讀器來說不太容易訪問,因此在輔助功能模式開啟時,Ctrl+R 將觸發執行最近命令,而Ctrl+Alt+R 將向 shell 傳送Ctrl+R

此版本對終端中的連結檢測進行了許多改進

  • 在某些情況下,包含空格的連結會被檢測到

    • 當整行都是連結時。
    • Python 風格的堆疊跟蹤連結:File "<path>", line <line>
    • 一些編譯器錯誤:<path>(<line>,<col>) : ...
    • 獨立樣式的文字部分都獨立檢測,因此如果路徑帶下劃線,即使它包含空格也應該被檢測到。
  • 包含 [] 字元的連結現在可以工作,它們甚至支援在這種困難的邊緣情況下的檢測:

    Links that end in the ] character will be detected, even when the whole link is wrapped in [ and ]

  • 現在可以檢測到 vscode:// 協議連結。

  • 在 Windows 上現在可以檢測到 /mnt/\\wsl$\\\wsl.localhost\ 連結。

  • OSC 超連結支援已在 v1.72 中新增,這些連結中常用的 file:// 協議現在也受支援(例如 ls --hyperlink)。

  • terminal.integrated.enableFileLinks 設定現在提供了 "notRemote" 選項,允許它僅在檔案存在檢查可能導致效能問題的遠端環境中條件性地停用。

大多數連結格式還一致地支援以下行和列格式

  • <檔案>:<行>
  • <檔案>:<行>:<列>
  • <檔案> <行>
  • <檔案> <行>:<列>
  • <檔案>(<行>)
  • <檔案>(<行>,<列>)
  • <檔案>(<行>, <列>)
  • <檔案> (<行>)
  • <檔案> (<行>,<列>)
  • <檔案> (<行>, <列>)
  • 單引號或無引號也適用於這些情況
    • "<檔案>",<行>
    • "<檔案>",<行>:<列>
    • "<檔案>", line <行>
    • "<檔案>", line <行>, col <列>
    • "<檔案>", line <行>, column <列>
    • "<檔案>":line <行>
    • "<檔案>":line <行>, col <列>
    • "<檔案>":line <行>, column <列>
    • "<檔案>": line <行>
    • "<檔案>": line <行>, col <列>
    • "<檔案>": line <行>, column <列>
    • "<檔案>" on line <行>
    • "<檔案>" on line <行>, col <列>
    • "<檔案>" on line <行>, column <列>

終端編輯器檔案拖放支援

終端編輯器現在支援在按住 Shift 的同時拖放,將檔案寫入終端而不是開啟編輯器。

Dragging a file into a terminal editor will show 'Hold Shift to drop into editor'

“不安全”配置檔案檢測

由於安全漏洞,最近取消了 Windows 上 Cygwin shell 的檢測。此版本我們以更安全的形式重新引入了此功能,並且還檢測了更多 shell 配置檔案,包括 Cygwin、Cmder 和 MSYS2。為了緩解安全問題,在使用這些配置檔案之前,必須透過“選擇預設配置檔案”命令進行配置。

Select Default Profile is available via the terminal view dropdown or the Command Palette

The newly detected profiles appear in a "detected" section at the bottom of the Quick Pick

選擇後,將在新增到您的 settings.json 檔案並像常規配置檔案一樣執行之前出現警告。

The notification explains the path is potentially unsafe as it could be modified by another user

如果計算機不是由多個使用者使用,例如在公司環境中,則可以安全地忽略此警告。

終端檢視中的切換命令

一個長期以來的請求是將“清除終端”命令新增到終端檢視操作中,但我們一直擔心 UI 的臃腫。得益於一項新的內部功能,我們現在有新的預設隱藏操作,它們出現在溢位選單中,但可以透過右鍵單擊來切換顯示。

Clear terminal, Run Active File, and Run Selected Text commands are now available in the terminal view's overflow menu

Right-click one of the view actions to toggle which ones are visible and which go into the overflow menu

在 Windows 上 Ctrl+C 會取消選擇

Windows 在複製選區和向 shell 傳送 SIGINT 之間共享 Ctrl+C,具體取決於是否存在選區。一個常見的煩惱是,如果您不小心做了選區,Ctrl+C 可能不會發送 SIGINT。為了緩解這個問題,Ctrl+C 複製選區現在也會清除選區,因此按兩次 Ctrl+C 將可靠地傳送 SIGINT 一次或兩次。

新增終端製表符大小設定

有一個新設定terminal.integrated.tabStopWidth,它配置終端的製表符寬度。當程式輸出\t字元而不是在其配置中配置製表符大小時,這很有用。

Powerline 三角形和斜線自定義字形

GPU 加速的終端現在為三角形和斜線 Powerline 額外符號字形(U+E0B8-U+E0BF)獲得畫素完美的自定義字形。這些字元在它們是單寬還是雙寬字元方面是模糊的,並且因所使用的字型而異,因此我們選擇將它們渲染為單寬。

之前

Triangles and diagonal line previously could display with bad anti-aliasing and odd borders

之後

Triangles and diagonal line glyphs are drawn pixel perfect

“在活動終端中執行選定文字”中使用的帶括號貼上模式

在活動終端中執行選定文字”命令現在將在支援的 shell 中使用“帶括號貼上模式”執行文字,因此多行選擇將被視為單個輸入,而不是多個命令。這使得執行實際指令碼更加直觀,並且錯誤更少。

之前

Previously, running two echo statements would be run one after the one with 2 separate prompts

之後

Running two echo statements will now run in a single prompt

Pwsh 預覽版反饋提供程式的快速修復

PowerShell 預覽版最近實現了一個新的可插拔反饋提供程式系統,該系統允許在命令失敗時列印建議。

Running 'gcc' in pwsh preview will present 3 suggestions, which VS Code will present as Quick Fixes

終端現在從 [General][cmd-not-found] 反饋提供程式中提取快速修復。快速修復對話方塊可以透過單擊燈泡或透過 Ctrl/Cmd+. 開啟。

原始碼管理

新命令

Git 2.35git stash 命令引入了一種新的 --staged 模式。這種新模式允許您輕鬆地僅暫存已暫存的更改。如果您有一個支援此新模式的 Git 版本,您可以使用新的“Git:暫存已暫存”命令來利用它。

VS Code 已經支援使用“Git:刪除標籤”命令刪除本地標籤。在此里程碑中,我們啟用了使用新的“Git:刪除遠端標籤”命令刪除遠端標籤。

父資料夾中的 Git 儲存庫

VS Code 使用 git rev-parse --show-toplevel 來確定 Git 儲存庫的根目錄。在大多數情況下,Git 儲存庫的根目錄在工作區內,但在某些情況下,Git 儲存庫的根目錄在工作區或開啟檔案(s) 的父資料夾中。雖然在工作區或開啟檔案的父資料夾中開啟 Git 儲存庫對高階使用者來說是一個很棒的功能,但它可能對新使用者造成混淆。我們看到過這種情況,這種混淆導致丟棄了這些 Git 儲存庫中的更改,從而導致資料丟失。

為了避免混淆並降低資料丟失的風險,從這個里程碑開始,VS Code 將在原始碼管理檢視中顯示通知和新的歡迎檢視,並且不會自動開啟工作區或開啟檔案父資料夾中的 Git 儲存庫。

Notification that there is a Git repository in parent folders

主題:Dark+ V2MacOS Modern 產品圖示

開啟儲存庫”按鈕將開啟一個快速選擇器,其中包含在工作區或開啟檔案的父資料夾中發現的所有 Git 儲存庫的列表。從父資料夾中開啟 Git 儲存庫的選擇將被記住。

使用者可以使用 git.openRepositoryInParentFolders 設定控制如何處理父資料夾中的 Git 儲存庫。希望恢復舊行為的使用者可以將 git.openRepositoryInParentFolders 設定為 always

命令停用

根據 Git 儲存庫的大小或各種 Git 鉤子的存在,某些 Git 操作可能需要很長時間才能完成。我們過去曾遇到過在先前命令仍在進行時啟動命令可能導致意外結果的情況(例如,在提交操作進行時丟棄檔案上的更改)。

為防止這種情況,我們將在以下操作進行時停用大多數 Git 命令:CheckoutCommitPushPull。這意味著在這些操作執行時,大多數 Git 命令將不會出現在命令面板中,並且將在原始碼管理檢視和狀態列中停用。

使用者介面改進

這個里程碑,我們完善了原始碼管理的使用者介面元素

  • 原始碼管理檢視中“提交”和“釋出分支”操作按鈕的工具提示現在包含分支名稱。
  • 簽出”狀態列項現在根據簽出的引用型別(分支、標籤或提交)使用不同的圖示。
  • 簽出”狀態列項現在在簽出操作進行中時顯示一個旋轉進度圖示。

Notebook

核心選擇器改進

我們繼續改進 MRU(最近使用)核心選擇器。可以透過將 notebook.kernelPicker.type 設定為 mru 來啟用它。未使用的核心會移動到輔助選擇器“選擇另一個核心...”中。當您安裝了最新的 JupyterPython 擴充套件時,此選擇器會將所有核心按其來源(例如:Jupyter 核心、Python 環境等)進行分組。

Notebook Kernel Picker

連線選定的單元格

有一個新命令“連線選定單元格”(kb(notebook.cell.joinSelected))可以合併多個選定的單元格到一個單元格中。

Join Selected Cells command

將輸出回退渲染到支援的 mime 型別

Jupyter Notebooks 中的富輸出(例如 IPyWidgets)僅在核心的生命週期內可見。這意味著當 Notebook 關閉並再次開啟時,輸出將不再可見。然而,在許多這些情況下,可以使用回退機制渲染輸出。例如,IPyWidget 在某些情況下(取決於所使用的 widget)可以渲染為靜態影像或 HTML 內容。

因此,開啟包含 matplotlib 小部件(或類似小部件)的現有筆記本的使用者現在無需重新執行程式碼即可檢視輸出。

Notebook Renderer fallback

新文件

有兩篇新主題可以幫助您在 VS Code 中使用 Jupyter Notebooks。

除錯

JavaScript 除錯

改進的 Node.js 啟動效能

用於 Node.js 除錯的“斷點預測器”已被重寫和改進,以大幅提高大型專案的速度。例如,除錯 TypeScript 倉庫中的單元測試時的啟動時間開銷減少了 62%,除錯和啟動 VS Code 倉庫中的構建時的開銷減少了 80%。

如果您遇到斷點未命中等問題,請提交問題。您可以透過在 launch.json 中設定 "enableTurboSourcemaps": false 來停用新行為,但此選項最終將被刪除,因為我們獲得了信心。

語言

JavaScript React 語言標籤現在是 JavaScript JSX

JavaScript React 語言模式已重新命名為 JavaScript JSX,以反映 JSX 語法不僅僅用於 React。TypeScript React 也已重新命名為 TypeScript JSX

請注意,只更改了 UI 中顯示的語言名稱。內部語言 ID(javascriptreacttypescriptreact)為了相容性原因保持不變。

新的 shellscript 語法

VS Code 現在使用來自 better-shell-syntax 的新語法進行 shellscript 語法高亮顯示。

擴充套件

VS Marketplace 擴充套件簽名

自 2022 年 11 月起上傳到 Visual Studio Marketplace 的每個擴充套件都由 VS Marketplace 進行程式碼簽名。當用戶透過 VS Code 的擴充套件檢視安裝已簽名擴充套件時,VS Code 將驗證簽名,從而證明該擴充套件確實來自 VS Marketplace 且擴充套件包未被修改。如果簽名驗證失敗,VS Code 將不會安裝該擴充套件。

VS Marketplace 正在為所有現有擴充套件(包括自 11 月以來未更新的擴充套件)進行簽名。一旦此過程在幾個月內完成,VS Code 將要求所有來自 VS Marketplace 的擴充套件都必須由 VS Marketplace 簽名。此要求將保證來自 VS Marketplace 的每個包的完整性,從而提高我們擴充套件生態系統的整體安全性。

注意:擴充套件作者無需做任何事情即可選擇加入 Marketplace 簽名。除了 Marketplace 簽名,我們目前正在研究釋出者簽名。有關釋出者簽名的更多資訊,請參見討論 #137

從 CLI 釘住擴充套件版本

當您從 CLI 安裝特定版本的擴充套件(code --install-extension {publisher}.{name}@{version})時,它現在將被釘住到該版本。這意味著當您啟用了自動更新時,該擴充套件將不會自動更新。

同步固定擴充套件版本

設定同步現在將同步固定擴充套件版本。這意味著當您在一臺機器上安裝特定版本的擴充套件時,它將在您同步到的所有其他機器上固定到該版本。

對擴充套件的貢獻

Python

從已啟用的終端啟動 VS Code 時自動選擇環境

如果使用者透過已啟用 conda 或虛擬環境的終端啟動 VS Code,Python 擴充套件現在會檢測到這一點,然後自動選擇環境本身,或者詢問使用者是否希望將該環境設定為選定環境;具體取決於環境。

建立環境時選擇 requirements 檔案

使用“Python:建立環境”命令建立虛擬環境時,Python 擴充套件現在會在工作區資料夾中查詢 requirements 檔案,並允許使用者多選任意數量的 requirements 進行安裝。

從 pyproject.toml 選擇可選依賴項

Python 擴充套件會檢測並載入 pyproject.toml 檔案中 [project.optional-dependencies] 部分提供的可選依賴項。如果檢測到工作區包含 pyproject.toml 以及任何選定的可選依賴項,我們使用 pip 可編輯安裝命令。

Pylance 自動縮排

當 Python 檔案的 editor.formatOnType 設定啟用時,Pylance 將在程式碼鍵入時自動縮排,讓您更專注於程式碼邏輯而不是格式化。

要試用它,請透過將以下內容新增到您的使用者 settings.json 檔案來為 Python 檔案啟用 formatOnType

 "[python]": {
        "editor.formatOnType": true,
    },

即時預覽

外部瀏覽器預覽設定

Live Preview 擴充套件現在允許您在預設瀏覽器之外的其他瀏覽器中開啟外部瀏覽器預覽。使用 livePreview.customExternalBrowser 設定,您可以將外部預覽設定為在以下瀏覽器中開啟:

  • Microsoft Edge
  • Google Chrome
  • Mozilla Firefox
  • 您的預設瀏覽器

Live Preview Custom External Browser setting

伺服器根路徑設定

您現在可以將伺服器的根路徑設定為工作區中的子資料夾。例如,您可以透過將 livePreview.serverRoot 設定為 "src",讓 Live Preview 從工作區中的 src 資料夾提供檔案。

ESLint

ESLint 擴充套件已更新至 2.4.0 版本。主要新功能有:

  • 支援新的實驗性扁平配置檔案。您需要使用設定eslint.experimental.useFlatConfig在 VS Code 中單獨啟用支援。需要 ESLint 8.21 或更高版本。

  • ESLint 狀態指示器已移至 VS Code 的語言狀態區域。因此,eslint.alwaysShowStatus 設定已刪除。請改用 VS Code 的固定功能。

    ESLint language status

    語言狀態項現在會在儲存時計算程式碼修復期間通知您驗證時間過長和 ESLint 執行時間過長。可用時間預算(以毫秒為單位)可透過兩個設定eslint.timeBudget.onValidationeslint.timeBudget.onFixes進行控制。

  • 可以使用新設定eslint.problems.shortenToSingleLine將長問題波浪線縮短為單行。

GitHub 拉取請求和議題

GitHub 拉取請求和問題擴充套件取得了更多進展,該擴充套件允許您處理、建立和管理拉取請求和問題。亮點包括

  • 支援建議和接受更改。
  • 評論中的 GitHub 控制代碼現在已連結。
  • 在建立時可以向 PR 新增標籤。
  • 實驗性設定 githubPullRequests.experimental.quickDiff 將在編輯器邊欄中顯示簽出 PR 中更改行的快速差異檢視。

請檢視擴充套件 0.58.0 版本的更新日誌,瞭解其他亮點。

GitHub Copilot

GitHub Copilot 擴充套件是一個由 AI 驅動的程式碼補全工具,可幫助您更快、更智慧地編寫程式碼。您可以使用 VS Code 中的 Copilot 擴充套件來生成程式碼,或從其生成的程式碼中學習。

GitHub Copilot 透過行內建議 UI 整合到 VS Code 編輯器中,讓您可以檢視各種建議並輕鬆接受生成程式碼的全部或部分。

GitHub Copilot 現已全面面向企業使用者開放,提供許可管理、組織範圍策略控制和隱私保護等功能。您可以在GitHub Copilot for Business 公告中瞭解更多資訊。

要開始使用,您可以在GitHub Copilot 網站上註冊免費試用。

我們還在 VS Code 文件中添加了一個新的VS Code 中的 GitHub Copilot 主題,將幫助您開始使用 Copilot。

遠端開發

遠端開發擴充套件允許您將容器、遠端機器或適用於 Linux 的 Windows 子系統 (WSL) 用作功能齊全的開發環境。此版本的亮點包括:

  • Dev Container 支援多個 devcontainers.json 檔案。
  • Docker 憑證轉發。
  • X11 & Wayland 轉發

您可以在遠端開發釋出說明中瞭解新的擴充套件功能和錯誤修復。

遠端隧道

防止睡眠

遠端隧道現在可以防止 Windows、macOS 和基於 systemd 的 Linux 系統上的計算機進入睡眠狀態。如果您離開桌面遠端工作並希望確保隧道保持可訪問,這會很有用。要使用此功能:

  • 當從 VS Code UI 開啟遠端隧道訪問時,將設定 remote.tunnels.access.preventSleep 更新為 true
  • 在 CLI 上使用 code tunnel 時,傳入 --no-sleep 標誌。

可靠性改進

遠端隧道中的幾個連線相關問題已修復,這將提高可靠性。

繼續工作

“繼續工作”功能支援在本地視窗中的 Git 儲存庫中啟動並在遠端視窗(如 GitHub Codespace)中繼續。如果您所在的分支尚未釋出到遠端,當您選擇在不同的開發環境中繼續工作時,系統將自動提示您釋出當前分支,以便您可以在其他地方訪問完整的分支上下文。

此外,當您在遠端視窗中的 Git 儲存庫時,您現在可以使用“繼續在新本地克隆中工作”命令在 VS Code 桌面上的新本地 Git 克隆中繼續工作。

最後,所有在本地、遠端或 Web 視窗中繼續工作的選項現在都方便地顯示在遠端指示器中。這些選項也可在命令面板中找到。

Continue Working On actions now available in the remote indicator

預覽功能

Dark+ V2 和 Light+ V2 實驗主題

兩個新的顏色主題,Dark+ V2 和 Light+ V2,現已可用。這些主題是現有 Dark+ 和 Light+ 主題的演進,旨在提高可訪問性並使 VS Code 看起來比以往任何時候都更好!這些主題仍標記為實驗性,我們正在尋求早期反饋。

Dark+ V2 and Light+ V2 experimental themes

您可以在顏色主題選擇器(首選項:顏色主題 ⌘K ⌘T (Windows, Linux Ctrl+K Ctrl+T))中找到名為“Light+ V2 (實驗性)”和“Dark+ V2 (實驗性)”的新主題。

TypeScript 5.0 支援

此更新包括對即將釋出的 TypeScript 5.0 版本的支援。有關 TypeScript 團隊目前正在進行的工作的更多詳細資訊,請參閱TypeScript 5.0 迭代計劃。一些編輯器工具亮點:

  • 新的switchcase補全功能可幫助您更快地填寫switch語句的兩個部分。
  • 致力於在 github.devvscode.dev 上啟用專案範圍的 IntelliSense。

要開始使用 TypeScript 5.0 每夜版,請安裝 TypeScript Nightly 擴充套件。

命令面板中的“常用”部分

此里程碑,我們在命令面板中添加了一個新的“常用”部分。此部分的目標是幫助新使用者更好地瞭解命令面板的用途及其功能。

commonly used section in the Command Palette

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

此部分將顯示在“最近使用”部分下方,以免打破肌肉記憶,並且隨著您執行越來越多的命令並熟悉 VS Code,此部分要麼消失(因為“常用”命令移至“最近使用”),要麼此部分位於摺疊線下方,超出視野。

commonly used section with recently used commands

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

目前,我們將此新體驗放在設定workbench.commandPalette.experimental.suggestCommands之後,但我們計劃在不久的將來將其設為預設行為。讓我們知道您的想法!

擴充套件創作

評論執行緒狀態

CommentThread state API 已最終確定。此 API 控制評論是否渲染為已解決或未解決,並可能影響評論檢視中的篩選。您可以在問題 #127473 中瞭解如何使用此 API。

忽略同步設定

您現在可以在註冊設定時使用 ignoreSync 屬性,預設情況下從設定同步中隱藏設定。這對於不應跨機器同步的設定很有用。

遙測

新的 TelemetryLogger API 已最終確定。此 API 旨在讓擴充套件作者更容易使用遙測,並對終端使用者更安全。該 API 啟用了內建的秘密清理、遙測輸出通道、錯誤處理程式和自動遙測級別管理等功能。這應該會帶來更具凝聚力的遙測體驗,並保證符合我們的要求。

提議的 API

每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試這些 API。一如既往,我們希望得到您的反饋。以下是嘗試提議 API 的步驟

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

您不能釋出使用提議 API 的擴充套件。下個版本中可能會有破壞性更改,我們絕不希望破壞現有擴充套件。

讓 Notebook 渲染器回退到不同的 mime 型別

有時,在渲染內容時,notebook 渲染器可能會發現它無法正確渲染該項。例如,渲染器可能要求核心處於特定狀態。

以前,對於此類情況,渲染器唯一的選擇是渲染錯誤訊息。我們添加了一個新的擬議 API,允許渲染器丟擲具有特殊名稱的錯誤,從而使 VS Code 靜默回退到渲染儲存在筆記本輸出項上的其他資料。例如,互動式圖表渲染器可以丟擲此錯誤,以使 VS Code 回退並渲染也儲存在當前輸出項上的影像資料。

要觸發此回退,請在 renderOutputItem 中丟擲名為 vscode.fallbackToNextRenderer 的錯誤。

throw new class extends Error {
    override name = 'vscode.fallbackToNextRenderer';
}();

這種特殊錯誤僅適用於預期在某些情況下渲染會失敗的情況。如果您的渲染器遇到意外錯誤,它應該繼續顯示錯誤訊息。

快速差異

快速差異,即編輯器中在新增、更改和刪除行上顯示的邊欄裝飾,目前僅可供 SCM 提供程式使用。擬議的快速差異 API 允許快速差異在 SCM 提供程式之外使用。以下示例來自 GitHub 拉取請求擴充套件,它使用快速差異 API 顯示 PR 中更改行的快速差異。

vscode.window.registerQuickDiffProvider(
  { scheme: 'file' },
  {
    provideOriginalResource: (uri: vscode.Uri) => {
      const changeNode = this.reviewModel.localFileChanges.find(
        changeNode => changeNode.changeModel.filePath.toString() === uri.toString()
      );
      if (changeNode) {
        return changeNode.changeModel.parentFilePath;
      }
    }
  },
  'GitHub Pull Request',
  this.repository.rootUri
);

完整提案可在quickDiffProvider.d.ts中檢視。

持續測試執行

持續測試執行允許測試擴充套件指示它們能夠在更改發生時監視並重新執行測試。支援此 API 的關鍵在於在您的測試執行配置檔案中指示支援...

const profile = controller.createRunProfile('Run', TestRunProfileKind.Run, runHandler);
+profile.supportsContinuousRun = true;

然後在 `runHandler` 中檢查它。

const runHandler = (request: TestRunRequest, token: CancellationToken) => {
+   if (request.continuous) {
+       return watchForFileChangesThenRunTests(request, token);
+   }
}

完整的提案在testContinuousRun.d.ts中。

工程

擴充套件主機實用程序

擴充套件主機所需的實用程序使用(用於程序沙盒)現在預設啟用。仍然有一個設定(extensions.experimental.useUtilityProcess),我們很快會將其刪除。

透過命令列進行效能測試

我們引入了以下節點模組,用於從命令列執行一組效能測試。

vscode-bisect - 此模組幫助我們快速測量效能迴歸。執行npx vscode-bisect --help以瞭解如何操作此工具。

vscode-perf - 此模組幫助我們測量 VS Code 的效能。npx vscode-perf --help描述瞭如何操作此工具。

GB18030 認證

VS Code 現已透過 GB18030 認證——這意味著中國政府的一個認證機構已確認 VS Code 能夠正確表示所有中文漢字。測試涵蓋了所有內建使用場景。隨著 VS Code 獲得認證,核心 Visual Studio 系列(包括 Visual Studio 和 Visual Studio for Mac)均已透過 GB18030 認證。

遷移到 ESM

我們已經踏上了將程式碼庫遷移到 ESM 的旅程。VS Code 專案早於原生模組 (ESM),我們一直暫時使用非同步模組系統 (AMD)。AMD 對我們很有用,但現在是時候繼續前進了。我們已經開始將程式碼庫遷移到 ESM,我們取得了良好的進展,並希望在接下來的幾個月內完成這項工作。

macOS 10.11 和 10.12 的生命週期結束警告

VS Code 桌面將在接下來的幾個里程碑中更新到 Electron 22。隨著 Electron 22 的更新,VS Code 桌面將不再在 OS X El CapitanmacOS Sierra 上執行。在此里程碑中,我們已為受影響平臺上的使用者添加了棄用通知,以幫助他們為遷移做準備。如果您是上述作業系統版本的使用者,請檢視我們的 常見問題解答 以獲取更多資訊。

改進了系統和應用程式語言變數的使用

在之前的版本中,我們開始將應用程式語言傳遞給 Electron,以便它可以正確佈局一些元件,例如視窗控制元件疊加 (WCO)。同時,語言推薦器依賴於系統語言,但 app.getLocale() 開始獲取應用程式語言而不是系統語言,因此我們使用了較新的 app.getPreferredSystemLanguages() Electron API 來檢索用於語言推薦器的系統語言。結果,出現了一個迴歸,即擴充套件檢視中的擴充套件無法渲染,因為新的 API 返回了一些 toLocaleString() 無法解析的值。

立即的解決方案,我們為恢復版本推送的,是恢復到 app.getLocale() 並暫時中斷語言推薦,但事實證明,程式碼庫的許多區域也應該使用應用程式語言變數而不是系統語言變數。

此版本將許多系統語言用法替換為應用程式語言。因此,日期現在應該以更符合應用程式語言而非系統語言的格式進行本地化。

值得注意的修復

  • 99878 在 macOS 上使用 environmentVariableCollection 預置 PATH 環境變數不起作用
  • 153786 有一個命令可以開啟差異編輯器的任一側
  • 165123 允許開啟帶有兩個無標題側的差異編輯器
  • 167004 輸出:顯示輸出通道 一個用於顯示輸出通道的命令
  • 167528 視窗重新載入後,擴充套件輸出通道的日誌級別仍然存在

感謝

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

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-hexeditor 的貢獻

vscode-json-languageservice 的貢獻

vscode-languageserver-node 的貢獻

vscode-pull-request-github 的貢獻

debug-adapter-protocol 的貢獻

monaco-editor 的貢獻