🚀 在 VS Code 中

2022 年 10 月 (版本 1.73)

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

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


歡迎使用 Visual Studio Code 2022 年 10 月版發行。此版本有許多更新,我們希望您會喜歡,其中一些主要重點包括

如果您想在線上閱讀這些發行說明,請前往 更新,網址為 code.visualstudio.com

Insiders: 想要盡快試用新功能嗎?您可以下載每晚組建的 Insiders 版本,並在最新更新可用時立即試用。

協助工具

新的音訊提示

現在有新的音訊提示可協助處理工作和終端機。

  • 工作已完成 - 表示工作已完成的聲音 (由 audioCues.taskCompleted 設定控制)。
  • 工作失敗 - 工作失敗時發出的聲音 (audioCues.taskFailed)。
  • 終端機快速修復 - 如果在目前行上有可用的快速修復 (audioCues.terminalQuickFix)。

螢幕閱讀器模式中的文字換行

螢幕閱讀器模式中執行 VS Code 時,文字換行功能已停用,以防止螢幕閱讀器體驗降級。此問題已修正,並且可以透過 editor.wordWrap 啟用。

協助工具設定標籤

現在提供 accessibility 標籤,以改善協助工具相關設定的可探索性。

喜好設定:開啟協助工具設定 命令會開啟設定編輯器,並使用 @tag:accessibility 篩選器。

工作台

當在搜尋檢視的結果樹狀檢視中,以滑鼠右鍵按一下資料夾時,內容功能表現在有兩個新選項。

  • 選取將搜尋限制於資料夾,會將選取的資料夾路徑新增至要包含的檔案文字方塊。將路徑新增至此文字方塊,會將搜尋結果限制為符合所列路徑或模式的結果。

    Using Restrict Search to Folder

    佈景主題:GitHub Dark Dimmed (vscode.dev 上的預覽)

  • 選取從搜尋中排除資料夾,會將選取的資料夾路徑新增至要排除的檔案文字方塊。在此處新增路徑會排除任何符合所列路徑或模式的搜尋結果。

    Using Exclude Folder from Search

    佈景主題:GitHub Dark Dimmed (vscode.dev 上的預覽)

命令中心模式捷徑

命令中心新增了一個頂端區段,讓您可以輕鬆探索如何瀏覽至檔案、執行命令等等。

此簡短的模式清單也提供按鍵繫結提示,讓您可以直接跳到最常用的模式 (例如前往檔案),而無需經過命令中心。

命令中心 UI 預設不會顯示在標題列中,但您可以透過視窗:命令中心 (window.commandCenter) 設定啟用,或以滑鼠右鍵按一下標題列並勾選命令中心

設定編輯器工作區信任和原則指示器

由於受限制模式工作區或由於在組織原則下管理而未套用的設定,現在會使用指示器來顯示其狀態。使用者即使在受限制模式工作區中 (一直以來都可以使用 settings.json 檔案),也可以讀取和寫入工作區設定,但在受限制的工作區中計算要使用的設定最終值時,將不會考慮工作區設定值。

預設淺色佈景主題也進行了一些調整,在指示器區域中具有更清晰的 codicon 呈現方式,以及更緊密的焦點邊框。

Restricted workspace settings demo showing keyboard navigation and toggling a checkbox even when the setting is restricted

大綱預設摺疊狀態

有一個新的設定 outline.collapseItems,可控制 大綱檢視中項目的預設摺疊狀態。預設值為 false,這表示大綱項目預設為展開。將其設定為 true 可讓大綱項目預設為摺疊。此設定可以針對每個語言進行設定,也適用於筆記本。

重新排列「檢視」功能表

在 VS Code 功能表的「檢視」功能表中,最後一個群組是不斷成長的編輯器動作清單。為了平衡功能表和功能的成長,我們已將主要與外觀相關的項目移至 外觀 子功能表下。文字換行固定捲動選項已保留在功能表底部的原始位置。

Updated View menu with Appearance submenu expanded

佈景主題:GitHub Light Default (vscode.dev 上的預覽)

輸入 UI 上的圓角

文字輸入、文字區域和下拉式清單現在都顯示圓角,以符合先前版本中套用至按鈕的相同樣式。

Text input with rounded corners in the Search input box

快速選取清單樣式更新

快速選取 UI 中使用的清單樣式已稍微重新整理,具有圓角和增加的左右邊界。

已更新清單檢視的 codicon

平面清單和樹狀清單檢視現在使用更清晰的 codicon 來表示清單類型。

輔助側邊欄前景色彩

輔助側邊欄通常會模仿主要側邊欄的佈景主題,但並非所有佈景主題金鑰都已正確挑選。輔助側邊欄現在正確地使用 "sideBar.foreground" 佈景主題金鑰。

在右側的主要側邊欄 (具有檔案總管) 和左側的輔助側邊欄 (具有大綱檢視) 下方,都使用相同的粉紅色前景色彩。

Secondary Side Bar with a pink foreground color matching the Primary Side Bar

佈景主題:GitHub Light Default (vscode.dev 上的預覽)

不再有「摺疊範圍過多」通知

基於效能考量,我們將編輯器中顯示的摺疊範圍數目限制為 5000 個。此限制可以透過設定 editor.foldingMaximumRegions 進行設定。當超過限制時,VS Code 過去會顯示通知。現在,狀態列中的語言狀態浮動視窗會顯示該資訊。

Folding limit warning in the language status

預設摺疊提供者

通常,當某個語言有多個作用中的摺疊提供者時,VS Core 會嘗試合併結果。如果存在衝突範圍,則會捨棄某些範圍。此外,並非所有摺疊提供者都可以與其他提供者合併。

新的 editor.defaultFoldingProvider 設定可讓您選取要使用的摺疊提供者。提供者的名稱是貢獻它的擴充功能之擴充功能識別碼 ({publisher}.{extension})。

下列範例將 (假設的) 擴充功能 aeschli.better-folding 的摺疊提供者設定為 JavaScript 的預設提供者。

    "[javascript]": {
            "editor.defaultFoldingRangeProvider": "aeschli.better-folding"
    }

設定每個輸出通道的記錄層級

您現在可以使用開發人員:設定記錄層級... 命令,設定每個記錄輸出通道的記錄層級。當您只想查看來自特定記錄輸出通道的更多記錄時,這非常有用。此命令會先顯示輸出通道清單,選取一個之後,系統會提示您設定記錄層級。

Developer: Set Log Level command dropdown list of output channels

您也可以從命令列設定每個擴充功能的記錄層級。當您想要查看來自特定擴充功能的更多記錄時,這非常有用。例如,下列指令碼可讓您啟動 VS Code,並將來自 Git 擴充功能的記錄輸出通道的預設記錄層級設定為 debug

code --log vscode.git:debug

新的 list.collapseAllToFocus 樹狀檢視命令

新的命令 list.collapseAllToFocus 可讓您以遞迴方式摺疊目前焦點樹狀項目。當您想要摺疊非根目錄的樹狀項目的所有子系時,這非常有用。此命令沒有預設按鍵繫結,但您可以透過鍵盤快速鍵編輯器 (⌘K ⌘S (Windows、Linux Ctrl+K Ctrl+S)) 新增您自己的鍵盤快速鍵。

合併編輯器

在此里程碑中,我們繼續潤飾合併編輯器,而此更新包含數個錯誤修正和一些新功能。

接受雙方會附加衝突

在此版本中,一律可以選取接受傳入接受目前。當同時採用這兩個選項時,合併編輯器會附加對應的變更行。

在下方簡短的影片中,RelativePattern 會匯入兩次,因為兩行都已接受

A screen recording of how both sides are accepted

當可以在字元層級沒有衝突的情況下解決衝突時,會顯示接受組合選項,而且可以用來自動解決衝突。

在下方影片中,這兩個符號都會匯入到相同的匯入陳述式中

A screen recording of how a combination is accepted

與基準的差異裝飾

當基準檢視開啟時,會在目前焦點側和基準之間顯示差異。此差異檢視可用於更佳地了解傳入目前中的變更。

A screen recording of how a diff between incoming, current, and base is shown

差異演算法改進

合併編輯器的預設差異演算法已變更。新的差異演算法已針對合併案例進行最佳化。在常見案例中,已將區塊數目最小化,並最佳化插入位置。如果新的演算法造成問題,則可以使用設定 "mergeEditor.diffAlgorithm": "smart" 切換回先前的演算法 (預設值現在為 experimental)。

下列螢幕擷取畫面示範了插入的改進。請注意,這兩個差異都是正確的,但新的行為更清楚地突顯了插入的文字

舊行為

The old behavior highlights across both the new and existing text

新行為

The new behavior highlights just the new text

新的差異演算法目前僅在合併編輯器中預設啟用。如果您希望一般差異編輯器也使用新的差異演算法,則可以設定 "diffEditor.diffAlgorithm": "experimental"

瀏覽衝突

您現在可以按一下衝突計數器,跳到下一個未處理的衝突

Clicking the conflict counter jumps to the next conflict

語言

是否厭倦了在移動或重新命名檔案時,意外中斷 Markdown 中的連結或影像?試試新的 markdown.updateLinksOnFileMove.enabled 設定!

啟用此新設定後,當檔案在 VS Code 檔案總管中移動或重新命名時,VS Code 會自動更新 Markdown 中的連結和影像

Markdown file links are updated on file move and rename

您可以使用 markdown.updateLinksOnFileMove.include 控制受影響的檔案類型。預設情況下,會針對所有 Markdown 檔案和常見影像檔案格式啟用。

新的Markdown:在工作區中插入檔案連結Markdown:從工作區插入影像命令可讓您使用檔案選取器,快速將連結和影像插入 Markdown

請記住,這些命令只是將連結和影像新增至 Markdown 檔案的其中一種選項。您也可以使用 Markdown 路徑完成來執行此動作,甚至可以從 VS Code 檔案總管拖放檔案以插入連結或影像。

我們的內建 Markdown 驗證現在可以提醒您未使用或重複的連結定義。您可以使用 markdown.validate.enabled 啟用此功能

An warning about a duplicate link definition

如果您想要更精細地控制這些錯誤,可以使用這些 markdown.validate 設定來停用這些錯誤 (ignore) 或變更其嚴重性 (warningerror)

  • markdown.validate.duplicateLinkDefinitions.enabled
  • markdown.validate.unusedLinkDefinitions.enabled

還有一個快速修復功能,可移除重複或未使用的連結定義。

Markdown 中的連結出現次數醒目提示會顯示目前文件中游標下方的連結所使用的所有位置

Highlighting all occurrences of a link

請注意,當游標位於文件中的第一個連結時,文件中所有指向 First Header 的連結,以及標題本身都會在文件中醒目提示,並在文件右側的邊界中醒目提示。

此功能預設為關閉。若要啟用此功能,請開啟 markdown.occurrencesHighlight.enabled 設定。

新的 Razor 語法醒目提示文法

VS Code 有一個新的、維護得更好的 Razor 文法,用於 Razor 檔案的語法醒目提示。新的文法會主動維護,並修正舊文法中存在的問題。

適用於網頁的 VS Code

已改進分支建立和保護工作流程

當您在適用於網頁的 VS Code 上的 GitHub 或 Azure Repos 存放庫中時,提交至受保護的分支現在會通知您目前分支受到保護,並提示您建立新的分支。

此流程也會遵循下列設定

  • git.branchPrefix 可讓您使用已設定的前置詞預先填入分支名稱快速輸入。
  • "git.branchProtectionPrompt": "alwaysCommitToNewBranch" 可讓您在嘗試提交至受保護的分支時略過提示,並直接前往快速輸入以建立新的分支。

此外,當您建立新的分支時,您可以設定 "remoteHub.switchToCreatedBranch": "always",以略過關於是否切換至新建立分支的提示。

當在桌面上的 VS Code 上使用 GitHub 存放庫Azure Repos擴充功能時,上述所有項目也適用。

網頁中的當地語系化改進

幾個月前,我們開始在適用於網頁的 VS Code 上進行當地語系化。到目前為止,VS Code 核心和擴充功能 (在其擴充功能資訊清單中具有靜態宣告的字串) 都能夠進行當地語系化。在此反覆運算中,我們已完成最後一塊拼圖:擴充功能程式碼中的字串。這是因為我們上個月建議的當地語系化 API 已定案而勾選完成。

當我們繼續在所有擴充功能中採用此新的 API 時,請注意 VS Code 會變得更加當地語系化。如果您是擴充功能作者,可以在 vscode-l10n 存放庫中深入了解新的 API。

擴充功能貢獻

Python

移轉至 isort 擴充功能

在我們的 2022 年 5 月版本中,我們宣佈了新的 isort 擴充功能,其與 Python 擴充功能搭配運作以排序匯入。例如,當您開啟檔案且匯入不符合 isort 標準時,它會顯示錯誤診斷,並提供程式碼動作來修正匯入順序。在此版本中,我們正在移轉以使用獨立的 isort 擴充功能,而不是 Python 擴充功能中內建的 isort 支援,方法是與 Python 擴充功能一起自動安裝它。

使用 Pylance 時,自動匯入預設為關閉

自從自動匯入首次在 Pylance 中實作以來,我們收到了許多關於自動將匯入新增至檔案的混淆和有時令人惱火之處的回饋,例如,當意外接受建議時。從此版本開始,使用 Pylance 時,套件預設不再自動匯入。如果您想要為 Python 專案重新啟用自動匯入,您可以透過設定 "python.analysis.autoImportCompletions": true 來執行此動作。

Pylint 和 Flake8 擴充功能建議

在我們的先前版本中,我們宣佈了新的 PylintFlake8 擴充功能,其透過 語言伺服器通訊協定 (LSP) 與 Python 擴充功能搭配運作,以提供程式碼檢查。在此版本中,如果您仍在使用 Python 擴充功能中內建的 Pylint 和 Flake8 功能,我們會顯示通知,提示您安裝這些新的擴充功能。

A notification recommending the Pylint extension with a button to install it

遠端開發

遠端開發擴充功能可讓您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為全功能開發環境。此版本的重點包括

  • 開發容器範本 - 根據現有範本快速建立開發容器。
  • 開發容器功能 - 透過包含預先封裝的功能,將功能新增至開發容器 (或建立您自己的功能!)
  • 建立新的開發容器,而無需啟始資料夾。

您可以在遠端開發發行說明中,深入了解新的擴充功能功能和錯誤修正。

GitHub Pull Requests 和 Issues

持續開發 GitHub Pull Requests 和 Issues 擴充功能,可讓您處理、建立和管理提取要求和問題。查看擴充功能 0.54.0 版本的變更記錄,以查看其他重點。

預覽功能

TypeScript 4.9

此更新包含對即將推出的 TypeScript 4.9 版本的支援。請參閱 TypeScript 4.9 反覆運算計劃,以深入了解 TypeScript 團隊目前正在處理的工作。一些編輯器工具重點

若要開始使用 TypeScript 4.9 每晚組建,請安裝 TypeScript Nightly 擴充功能。

設定設定檔

在過去幾個月中,我們一直在努力支援 VS Code 中的設定設定檔,這是社群中最受歡迎的要求之一。此功能可透過 workbench.experimental.settingsProfiles.enabled 設定以預覽方式提供。試用看看,並在 vscode 存放庫中建立問題,或在 問題 #116740 中留言,向我們提供您的意見反應。

顯示同步設定檔資料

您現在可以在同步活動 (遠端) 檢視中,查看每個設定檔同步的資料。這有助於了解每個設定檔同步的資料。

Sync Activity (Remote) view showing history of Profiles

注意: 此功能目前僅在 VS Code 的 Insiders 版本中提供。

擴充功能撰寫

為工作區編輯提供中繼資料

現在,套用工作區編輯的 API 可讓擴充功能提供中繼資料,例如將編輯標示為重構。編輯器和重構後的自動儲存 (設定:files.refactoring.autoSave) 將會遵循此額外中繼資料。

限制哪些命令可以由 MarkdownString 和 Web 檢視執行

MarkdownString 中的命令連結是在 VS Code 的浮動訊息或 IntelliSense 詳細資料中建立自訂互動的實用方式。Web 檢視也可以使用命令連結,直接從 Web 檢視觸發 VS Code 命令。但是,命令連結也可能很危險,因為它們可用於執行任何命令,包括許多並非為了安全性而設計的命令。基於此原因,命令連結預設為停用,而且必須由擴充功能明確啟用。

雖然這種全有或全無的方法可行,但我們也發現它將過多的安全性負擔放在擴充功能作者身上。需要使用命令連結的擴充功能必須驗證,只有安全命令包含在其轉譯的內容中。這既容易忘記,也容易出錯。

為了改進這一點,我們正在推出新的命令連結啟用 API,可讓擴充功能僅啟用受信任的命令子集。

對於 MarkdownStringisTrusted 屬性現在採用可執行的命令允許清單 (所有其他命令都會被封鎖)

const md = new vscode.MarkdownString(
  `A command link: [Open setting](command:workbench.action.openSettings)`
);

// Set trusted commands instead of enabling all commands
md.isTrusted = { enabledCommands: ['workbench.action.openSettings'] };

對於 Web 檢視,WebviewOptions.enableCommandUris 屬性現在可以是已啟用命令的清單,而不是簡單的 true/false

const options: vscode.WebviewOptions = {
  enableCommandUris: ['workbench.action.openSettings']
};

我們強烈建議所有使用命令連結的擴充功能都採用此新的、更嚴格的 API,以提高安全性。

Web 檢視和 Web 檢視檢視的一致來源

為了縮短 Web 檢視的載入時間,我們現在嘗試為給定類型的 Web 檢視的所有執行個體維護一致的來源。這有兩個主要優點

  • Web 檢視可以更好地利用快取。這表示本機資源應該載入得更快。

  • Web 檢視可以使用本機儲存空間和其他依來源分割的 Web API。

    請記住,Web 檢視的所有執行個體現在都會在相同的來源上執行,因此如果它們使用本機儲存空間等 API,請務必分割每個資源的任何資料/狀態。例如,localStorage.setItem('scrollPosition', 100) 會將所有 Web 檢視執行個體中的 scrollPosition 設定為 100。如果您想要為個別資源設定捲動位置,您也需要在金鑰中包含資源 ID:localStorage.setItem(myDocUri, JSON.stringify({scrollPosition: 100 }))

    您也絕不應使用 localStorage 或類似的 API 來儲存重要資料,例如文件內容。雖然 VS Code 會盡最大努力為 Web 檢視維護一致的來源,但我們無法保證來源不會變更。

    在許多情況下,您應該使用 Web 檢視狀態 API,因為這些 API 可以為您處理上述兩個問題。

來源是針對每個擴充功能和 Web 檢視類型隨機產生。相同的來源會跨 Web 檢視的所有執行個體使用。

目前,一般 Web 檢視Web 檢視檢視 都嘗試維護一致的來源。我們計劃在下一個反覆運算中針對自訂編輯器和筆記本 Web 檢視採用此功能。

偵錯配接器協定

新的 'startDebugging' 反向要求

今天,VS Code 支援多個並行偵錯工作階段,但 偵錯配接器協定 (DAP) 僅涵蓋單一工作階段。這表示以程式設計方式建立新的偵錯工作階段並非 DAP 的一部分,而且只能在 DAP 或偵錯配接器外部完成,通常在包含偵錯配接器的偵錯擴充功能中。因此,多工作階段功能 (例如自動偵錯子進程) 並不容易供非 VS Code DAP 用戶端使用,因為它們通常只使用偵錯配接器,而不使用 VS Code 特定偵錯擴充功能。

為了改善這種情況,我們已將新的反向要求 startDebugging 新增至 DAP,可讓擴充功能從偵錯配接器內部建立新的偵錯工作階段 (與呼叫端類型相同)。用戶端功能 supportsStartDebuggingRequest 向偵錯配接器指示用戶端支援 startDebugging

在 10 月版本中,VS Code 已實作 startDebugging

建議的 API

每個里程碑都隨附新的建議 API,擴充功能作者可以試用。與往常一樣,我們希望收到您的意見反應。以下是試用建議 API 的步驟

  1. 尋找您想要試用的建議,並將其名稱新增至 package.json#enabledApiProposals
  2. 使用最新的 vscode-dts 並執行 vscode-dts dev。它會將對應的 d.ts 檔案下載到您的工作區。
  3. 您現在可以針對建議進行程式設計。

您無法發佈使用建議 API 的擴充功能。下一個版本中可能會出現重大變更,而且我們絕不希望中斷現有的擴充功能。

靜態筆記本預先載入

新的 notebookPreload 建議貢獻點可讓擴充功能貢獻載入到特定類型筆記本中的指令碼。

{
    "contributes": {
        "notebookPreload": [
            {
                "type": "jupyter-notebook", // Type of notebook for the preload script
                "entrypoint": "./path/to/preload.js"
            }
        ]
    }
}

此貢獻點由 contribNotebookStaticPreloads API 建議控制。擴充功能可以使用預先載入,在筆記本 JavaScript 環境中載入或定義全域變數。

預先載入指令碼必須是匯出 activate 函式的 JavaScript 模組。所有預先載入都會在任何轉譯器指令碼之前評估。

筆記本轉譯器可以存取所有輸出項目

自訂筆記本轉譯器現在可以存取其轉譯之輸出項目的所有 MIME 資料。如果轉譯器判斷它無法正確轉譯主要輸出項目,此 API 建議可讓它退回轉譯其他 MIME 類型之一。

此提案的重點是一個新的 OutputItem._allOutputItems 屬性。此屬性是一個排序列表,列出目前輸出項目包含的所有 MIME 類型。列表中的每個項目都具有 { mime, getItem() } 的形狀。mime 是 MIME 類型,例如 text/htmlimage/png,而 getItem() 函數會返回一個 Promise,以取得該 MIME 類型的 OutputItem

以下是渲染器如何使用這個新 API 的範例

async function renderOutputItem(outputInfo, element, signal) {
  const didRender = tryRenderMainItem(outputInfo, element);

  if (!didRender) {
    // Fallback to render `text/html`
    const htmlItem = await outputInfo._allOutputItems
      .find(item => item.mime === 'text/html')
      ?.getItem();
    if (htmlItem) {
      // Here we can either render the 'text/html' item ourselves
      // or delegate to another renderer.
      const renderer = await ctx.getRenderer('vscode.builtin-renderer');
      if (renderer) {
        return renderer.renderOutputItem(htmlItem, element, signal);
      }
    }
  }
}

試用這個提案,並告訴我們您的想法!

擴充功能遙測 API

為了進一步推動遙測最佳實踐並增強擴充功能已提供的遙測功能,此迭代引入了提議的 telemetryLogger API。這個 API 允許擴充功能提供一個 TelemetryAppender,它作為核心傳送邏輯(實作時會使用 Application Insights 或其他資料記錄服務)。然後,這個 TelemetryAppender 會被用來實例化一個 TelemetryLogger,而這個類別是您應該用來記錄遙測的。

TelemetryLogger 提供了一個共用的輸出通道,以查看已傳送的遙測事件、適當的遙測設定檢查和個人身分識別資訊的清理。此外,任何因使用 VS Code API 而拋出的錯誤,都將被記錄到您的 appender 中,以便更好地進行錯誤診斷。

遙測範例中有一個簡單的範例,您可以在issue #160090中提供意見回饋。

記錄輸出通道

在上一個里程碑中,我們推出了 LogOutputChannel API 提案,用於建立僅用於記錄的輸出通道。在這個迭代中,我們為它添加了 logLevel 屬性和 onDidChangeLogLevel 事件。logLevel 屬性代表輸出通道目前的日誌層級,而當輸出通道的日誌層級變更時,會觸發 onDidChangeLogLevel 事件。

/**
 * A channel for containing log output.
 */
export interface LogOutputChannel extends OutputChannel {

    /**
     * The current log level of the channel.
     * Defaults to application {@link env.logLevel application log level}.
     */
    readonly logLevel: LogLevel;

    /**
     * An {@link Event} which fires when the log level of the channel changes.
     */
    readonly onDidChangeLogLevel: Event<LogLevel>;
    ...
    ...
}

我們也在 env 命名空間中添加了 logLevel 屬性和 onDidChangeLogLevel 事件,以代表應用程式目前的日誌層級,並且當應用程式的日誌層級變更時,會觸發該事件。

export namespace env {
  /**
   * The current log level of the application.
   */
  export const logLevel: LogLevel;

  /**
   * An {@link Event} which fires when the log level of the application changes.
   */
  export const onDidChangeLogLevel: Event<LogLevel>;
}

工程

針對輸入延遲進行最佳化

隨著 VS Code 的規模擴大,按下按鍵時的活動量也隨之增加。在這個迭代中,我們退後一步,徹底調查當您在編輯器中輸入時究竟發生了什麼,以及哪些可以延遲到按鍵在螢幕上呈現之後再進行。這次探索的主要成果如下:

  • 進行了幾項變更,盡可能將更多工作延遲到編輯器中的按鍵在螢幕上呈現之後再進行。粗略估計,這樣做的影響是在未顯示 IntelliSense 時,輸入延遲減少約 15%,而在重新篩選 IntelliSense 時,減少幅度甚至更高。
  • 我們現在擁有更精細的技術,可以手動測量輸入延遲,並在這個亞毫秒*級別進行最佳化。
  • 有一個正在進行中的變更將幫助我們追蹤和報告輸入延遲的樣本。這將為我們提供一些具體的數字,以便維護和改進。

這僅僅是這項工作的開始,我們還有更多變更應該會在下個版本中推出。

* 這些數字非常依賴於用於測試的硬體。在效能強大的硬體上 0.5 毫秒的改進,在更普通的硬體上最終可能變成 2 毫秒。

自動渲染器效能分析

VS Code 的渲染器進程負責其 UI;它確保游標閃爍、能夠輸入和儲存。渲染器進程中的任何效能問題都將對使用者可見,並導致糟糕的體驗。為了幫助我們識別和修復渲染器進程中的效能問題,我們新增了一個新的設定 application.experimental.rendererProfiling,可用於自動分析渲染器進程的效能。該設定可以設定為 on 以啟用效能分析,以及 off 以停用效能分析。啟用後,每當渲染器進程「看起來有壓力」時,它將被分析效能幾秒鐘,然後分析效能檔案,進行匿名化,並發送以供檢查。您可以使用視窗日誌來追蹤效能分析的過程。

請注意,此功能目前預設為關閉,因為我們仍在學習和調整。請試用看看,並告訴我們您的想法。

Windows 11 內容選單

在此版本中,VS Code 安裝程式預設會為 Insiders 在 Windows 11 內容選單 中新增一個使用 Code - Insiders 開啟的內容選單項目。對於先前在安裝 Insiders 時選擇加入內容選單的使用者,當更新到最新的 Insiders 時,舊式選單 Shift + F10 中顯示的項目現在將被更新的項目取代。對於其他使用者,您需要重新安裝 Insiders 並在安裝精靈中選擇加入以啟用此選單項目。由於我們在開發選單項目時遇到了一些問題,我們計劃將此功能限制在 Insiders 中幾個里程碑,以在將其推廣到所有 Windows 11 使用者的穩定版本之前獲得信心。

VS Code Install dialog with option to add Open with Code - Insiders action

然後,使用 Code Insiders 開啟動作將在 Windows 檔案總管的資料夾和檔案內容選單中可用。

Windows 11 folder context menu

值得注意的修正

  • 151019 除錯懸停在懸停時隱藏
  • 153852 提案:移除 ES5 類別相容性以加速擴充功能 API
  • 156104 如果已靜態轉發,則不要在 URL 連結點擊時自動轉發連接埠
  • 158921 在其他地方修改的設定指示器懸停內容溢出

感謝您

最後但同樣重要的是,非常感謝 VS Code 的貢獻者。

Issue 追蹤

對我們的 Issue 追蹤的貢獻

vscode 的貢獻

vscode-pull-request-github 的貢獻

vscode-dev-chrome-launcher 的貢獻