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

2023 年 8 月 (版本 1.82)

更新 1.82.1:此更新解決了此安全 問題

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

更新 1.82.3:此更新解決了此安全 問題

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


歡迎使用 Visual Studio Code 2023 年 8 月釋出版本。此版本包含許多更新,希望您喜歡,其中一些主要亮點包括:

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

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

輔助功能

視窗標題中的聚焦檢視

window.title 設定現在有一個 ${focusedView} 變數,如果當前有檢視聚焦,則在標題欄中顯示該檢視的名稱。

行內完成的無障礙檢視

行內完成(例如,來自 GitHub Copilot 擴充套件的)現在可以在 無障礙檢視中檢查。

改進了工作區之間的導航一致性

上一次迭代中,我們使輸入控制元件(例如搜尋或篩選輸入)與其結果之間的導航體驗在擴充套件檢視、鍵盤快捷鍵編輯器等元件中保持一致,使用了 ⌘↓ (Windows、Linux Ctrl+Down)⌘↑ (Windows、Linux Ctrl+Up)。這已擴充套件到設定編輯器和 GitHub Pull Request 評論控制元件。

這對於在終端和終端無障礙緩衝區之間導航也同樣適用。

更新了終端無障礙緩衝區鍵盤繫結

以前,終端無障礙緩衝區是透過 Shift+Tab 開啟的。這與某些 shell 中已有的鍵盤快捷鍵衝突。因此,我們已刪除該鍵盤繫結,改為使用 ⌘↓ (Windows、Linux Ctrl+Down)⌥F2 (Windows Alt+F2、Linux Shift+Alt+F2),以與其他無障礙檢視保持一致。

無障礙檢視中的操作

無障礙檢視中的操作允許螢幕閱讀器使用者導航到“下一個/上一個”,停用輔助功能詳細程度等,以用於給定功能。這些操作位於檢視上的便捷工具欄中,以便保留當前上下文。

在無障礙檢視中轉到符號

輔助功能幫助對話方塊和某些無障礙檢視現在具有轉到符號 (⇧⌘O (Windows、Linux Ctrl+Shift+O)) 操作,以允許更快速地導航內容。

執行後聚焦終端無障礙緩衝區

終端現在有一個 terminal.integrated.focusAfterRun 設定,使用者可以指定在呼叫終端:在活動終端中執行選定文字時,應聚焦終端的無障礙緩衝區(accessible-buffer)、終端本身(terminal)還是不聚焦(none)。

工作臺

內建埠轉發

VS Code 現在擁有內建的埠轉發系統。此功能允許您透過 Internet 與其他人和其他裝置共享本地執行的服務。要使用它,請選擇“面板”區域中可用的檢視中的轉發埠按鈕(埠:聚焦到埠檢視)。

Forward a Port button displayed in the Ports view

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

埠轉發使用者指南中閱讀有關埠轉發的更多資訊。

命令中心現已預設啟用

命令中心是在幾個月前推出的,作為一種快速發現和與 VS Code 互動的方式。您可以使用它作為查詢命令面板中的命令、執行任務和其他快速體驗的啟動板。我們一直在進行一項實驗,在標題欄中顯示命令中心,並獲得了積極的反饋,因此我們認為現在是預設啟用它的時機了。

這是使用命令中心以及後退和前進按鈕的影片。

我們認為命令中心在查詢 VS Code 中的任何內容方面都具有巨大的潛力,因此請留意未來的更多改進!

注意:如果您不希望顯示命令中心,可以右鍵單擊標題欄,然後在下拉選單中取消選中命令中心條目以隱藏它。

控制固定編輯器如何關閉(透過鍵盤或滑鼠)

有一個新設定 workbench.editor.preventPinnedEditorClose,用於更精確地控制固定選項卡如何響應用於關閉編輯器的鍵盤快捷鍵或滑鼠中鍵單擊。預設情況下,固定選項卡不會因鍵盤或滑鼠互動而關閉(預設值為 keyboardAndMouse)。您可以相應地更改此設定。

  • keyboardAndMouse - 固定選項卡不會因鍵盤快捷鍵或滑鼠中鍵單擊而關閉(自 1.82.x 起為預設值)。
  • keyboard - 固定選項卡不會透過鍵盤快捷鍵關閉(直到 1.81.x 為預設值)。
  • mouse - 固定選項卡不會透過滑鼠中鍵單擊關閉。
  • never - 固定選項卡將始終透過鍵盤快捷鍵或滑鼠中鍵單擊關閉。

狀態列的新的和更新的可主題顏色

狀態列已提供其專案的許多可主題顏色。現在有更多顏色可用於主題化懸停前景和背景顏色。

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

以下兩個顏色名稱已更新,因為顏色不再適用於整個狀態列,而僅適用於遠端指示器。

  • statusBar.offlineBackground 已重新命名為 statusBarItem.offlineBackground
  • statusBar.offlineForeground 已重新命名為 statusBarItem.offlineForeground

編輯器

粘滯滾動

此迭代中,粘滯滾動 UI(位於編輯器頂部,可透過檢視:切換粘滯滾動訪問)進行了一些改進。

  • 現在,預設情況下,當編輯器水平捲軸滾動時,粘滯滾動也會橫向滾動。可以透過停用 editor.stickyScroll.scrollWithEditor 來關閉此功能。
  • 透過按住 Shift 鍵並懸停在粘滯滾動行上,可以檢視作用域的最後一行。按住 Shift 鍵單擊一行會將編輯器游標移動到作用域的最後一行。
  • 已將摺疊圖示新增到粘滯滾動槽。這些圖示的渲染遵循 editor.showFoldingControls 設定,該設定控制編輯器槽中摺疊圖示的渲染。

儲存時排序 JSON

現在可以在儲存時對 JSON 或 JSONC(帶註釋的 JSON)檔案進行排序。使用 json.sortOnSave.enable 設定來啟用此功能。

透過鍵盤進行程式碼操作和快速修復導航

您現在可以透過鍵入與可用選單選項對應的任何關鍵字或字母來快速導航快速修復、程式碼操作或原始碼管理選單(它們使用“操作”控制元件)。篩選器利用模糊匹配,搜尋不限於首字母或字首,還包括整個標籤文字。

Example of searching "Surround" or "Read" in the Refactor menu

Diff 編輯器

在此版本中,我們預設啟用了新的 diff 編輯器。我們還改進了一些新的 diff 編輯器功能並修復了許多錯誤。

已移動程式碼檢測

本次迭代我們完善了移動程式碼檢測功能。它可以透過 "diffEditor.experimental.showMoves": true 或在 diff 編輯器上下文選單中啟用。啟用後,將檢測到從同一檔案的一個位置移動到另一個位置的程式碼塊,並繪製箭頭指示程式碼塊移動到的位置。

在程式碼略有修改時也會檢測到程式碼移動。可以使用比較按鈕來比較移動前後的程式碼塊。

Moved code detection demo

摺疊未更改的程式碼標題

使用 "diffEditor.hideUnchangedRegions.enabled": true 或在編輯器上下文選單中選擇地圖圖示來啟用摺疊未更改的程式碼塊。

在此版本中,現在摺疊程式碼塊的名稱路徑(breadcrumbs)指示了哪些符號已被摺疊。單擊名稱路徑項將顯示所選項。

Collapsed code headers

動態佈局

如果 diff 編輯器的寬度太小,編輯器會自動切換到行內檢視。如果編輯器的寬度足夠,將恢復以前的佈局。設定 "diffEditor.useInlineViewWhenSpaceIsLimited": false 來停用此行為。

按鈕切換狀態

我們更新了 diff 編輯器中按鈕的切換樣式,使其更醒目。

舊的切換樣式(未切換和已切換),未切換的按鈕較暗

Old, untoggled dim buttons, Old, toggled

新的切換樣式(未切換和已切換),已切換的背景有陰影

New, untoggled visible buttons, New, toggled with shaded background

終端

控制終端啟動時的恢復方式

新設定 terminal.integrated.hideOnStartup 控制在應用程式啟動時是否自動建立終端。有以下選項可用:

  • never (預設): 啟動時從不隱藏終端檢視。
  • whenEmpty: 僅在沒有持久化會話恢復時隱藏終端。
  • always: 始終隱藏終端,即使在恢復持久化會話時也是如此。

停用方括號貼上模式

方括號貼上模式是終端中的一項功能,它將貼上的文字包裝在特殊序列中,以便 shell 可以使用這些資訊。啟用此功能的 shell 旨在正確支援這一點,但可能存在它失效的原因,此時您可能會意外看到文字,如 [201~。現在可以顯式停用此功能,即使 shell 請求它也會停用該功能。

執行後終端聚焦設定

終端現在有一個 terminal.integrated.focusAfterRun 設定,使用者可以指定在呼叫終端:在活動終端中執行選定文字時是否應聚焦終端。其他選項是聚焦終端的無障礙緩衝區(accessible-buffer)或不聚焦(none)。

可調整大小的查詢

終端的查詢控制元件現在可以使用左側的滑塊進行調整大小,類似於編輯器。

Hover the left border of the Find control to see the resize handle

將滑鼠懸停在滑塊上或拖動滑塊以調整查詢控制元件大小時,滑塊會高亮顯示。

停用 GPU 加速時的更快渲染

“DOM 渲染器”(在停用 GPU 加速時使用)的效能得到了顯著改進,這得益於對該元件的重寫。重寫側重於減少 DOM 元素的使用量,並且節省量在終端越大時縮放效果越好。

在測試一臺 117 列 36 行的終端的典型渲染呼叫時,之前大約需要 10 毫秒,之後大約需要 2 毫秒。將終端大小增加到 300x100 時,測試機記錄的渲染時間從之前的約 25-35 毫秒減少到之後的約 4-5 毫秒。

更好的選擇渲染

當 GPU 加速關閉時,選擇渲染現在與 webgl 渲染器相同,所有背景都更改為主題的選擇背景顏色,以確保良好的對比度和一致性。

The background when selected will now be the same as the rest of the selection

對調暗文字遵守一半的最低對比度比

最低對比度比功能允許終端更主動地控制終端中的前景色,以確保它們以特定的對比度比顯示。過去此功能的一個問題是,調暗文字(CSI 2 m)也會遵守對比度比,這意味著它可能與常規文字一樣突出。PowerShell 的自動完成幽靈文字就是一個不相容的例子。

現在,調暗文字將只需要一半的對比度要求。雖然這意味著文字可能不再滿足最低對比度比,但它現在與常規文字明顯不同,這一點更重要。

Now dimmed text should be visually different for typical minimum contrast ratios

配置非聚焦時的游標外觀

現在可以使用 terminal.integrated.cursorStyleInactive 配置終端未聚焦時的游標外觀。這支援現有 terminal.integrated.cursorStyle 的所有樣式,以及 outline(預設)和 none

The new inactive cursor styles are underline, block, line, outline and none

開啟檢測到的連結命令(⇧⌘O (Windows、Linux Ctrl+Shift+O))的行為已更改,以保持高效能,同時更容易搜尋整個終端緩衝區中的連結。以前,它只提供視口上方一點點的連結,並在末尾有一個笨拙的顯示更多連結按鈕來搜尋緩衝區其餘部分。

Previously the last entry must have been selected to search everything

現在會立即顯示視口中的連結,因此快速選擇(Quick Pick)可以儘快顯示。

Now initial results are restricted to the initial viewport

顯示快速選擇後,將在後臺檢測其餘終端緩衝區中的連結。鍵入以篩選時,VS Code 會等待所有結果並將其包含在篩選結果中。

Results from the entire buffer are included in the search when filtering begins

請注意,CodeQL.yml 直到鍵入篩選條件後才包含,因為它超出了視口。

終端現在可以檢測到以下 GNU 風格的連結格式:

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

除錯

JavaScript 偵錯程式

WebAssembly 除錯

JavaScript 偵錯程式現在會自動將 WebAssembly 模組反編譯為 WebAssembly 文字格式,並允許您在反編譯的模組中進行單步除錯和設定斷點。

Breakpoint hit during a WebAssembly debug session

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

源對映載入改進

在此版本中,我們在源對映的載入方式上做了許多改進。

  • 在一些常見情況下(例如使用 tsc 命令列編譯的應用程式),源對映的載入速度提高了 3-5 倍。
  • 現在支援來自 Vite 開發伺服器的熱模組重新載入。
  • 現在可以從已認證的終結點自動載入源對映。

測試

改進的狀態區域

測試檢視中篩選框下方的“狀態區域”現在更加簡潔,並且還提供了一個可點選的操作來重新執行最近執行的測試。按住 Alt 鍵單擊重新執行按鈕將改為除錯這些測試。

Testing view status area displaying test result count, test timing, and rerun button

連結檢測現在將在顯示測試輸出的終端中執行。檔名、路徑和 URI 現在都是可點選的。

改進了與測試相關的輸出體驗

測試擴充套件可以將控制檯輸出與特定的測試或位置相關聯。以前,以這種方式建立的每個輸出都會在“測試結果”檢視中顯示為自己的條目,並在選中時在文字編輯器中開啟。

現在,它們顯示在正確的終端中,導航到輸出訊息會開啟該測試輸出的終端並選中該訊息。

Notebook

複製單元格輸出

單元格輸出選單現在包含一個將輸出複製到系統剪貼簿的選項。透過右鍵單擊影像並選擇複製輸出命令,還可以使用上下文選單處理影像輸出。

主題:Bearded Theme feat. Gold D Raynh(在 vscode.dev 上預覽)

語言

TypeScript 5.2

VS Code 現在自帶 TypeScript 5.2.2。此主要更新帶來了新的 TypeScript 語言功能、更好的效能以及許多重要的改進和錯誤修復。您可以在TypeScript 部落格上閱讀有關 TypeScript 5.2 的資訊。

移動到檔案重構

JavaScript 和 TypeScript 的移動到檔案重構允許您將類、函式或常量移動到現有檔案中。這還將自動更新符號的所有引用,並根據需要更新匯入。

當您選擇移動到檔案時,VS Code 會顯示當前 TypeScript 或 JavaScript 專案中的所有檔案列表。您可以開始鍵入以快速篩選到所需檔案。

或者,您可以使用選擇現有檔案...使用常規檔案選擇器選擇檔案,或者使用輸入新檔案路徑...指定要建立的新檔案。

內聯變數重構

JavaScript 和 TypeScript 的內聯變數重構會將變數的所有出現替換為其常量值。

此重構通常在重寫現有程式碼時最有用。例如,當一個變數被宣告然後立即返回時,您可以使用內聯變數來刪除額外的宣告並直接返回該值。

function add(a, b) {
  const result = a + b;
  return result;
}

在對 result 執行 inline variable

function add(a, b) {
  return a + b;
}

可點選的引數提示

您現在可以單擊引數提示以快速跳轉到引數宣告。啟用內嵌提示後,

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

按住 Ctrl/Cmd 鍵並單擊引數名稱即可跳轉到該引數的宣告。

我們計劃在即將釋出的版本中為其他 JavaScript 和 TypeScript 內嵌提示啟用轉到定義

遠端開發

遠端開發擴充套件允許您透過 SSH 或遠端隧道使用開發容器、遠端機器或適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。

亮點包括:

  • 提高遠端連線 - 隧道連線的可靠性。
  • 新的在 WSL 中安裝 Docker命令。
  • 預構建開發容器說明指南。

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

對擴充套件的貢獻

GitHub Copilot

從聊天檢視建立工作區

您現在可以使用 /createWorkspace 命令,在 GitHub Copilot Chat 擴充套件的穩定版本中使用自然語言描述建立工作區。

我們還進行了以下改進:

  1. 建議的工作區現在將呈現為聊天響應中的檔案樹。
  2. 您可以點選檔案以在編輯器中開啟只讀預覽。
  3. 如果 Copilot 的初始建議不完全正確,您可以提出後續問題以幫助 Copilot 進行迭代和改進。

在無標題編輯器中使用內聯聊天開始編碼

現在,當您開啟無標題文字編輯器時,會有一個提示如何透過 ⌘I (Windows、Linux Ctrl+I) 啟動內聯聊天會話。螢幕閱讀器使用者可以聽到此提示,並可以選擇使用 accessibility.verbosity.untitledHint 設定停用它。

對快速聊天(Quick Chat)的改進

我們在幾個月前引入了快速聊天(Quick Chat),並一直在快速迭代,以提供一種適合 VS Code 的體驗。

本次迭代的亮點:

  • 更緊湊的使用者體驗。
  • 焦點丟失時,快速聊天(Quick Chat)現在仍保持開啟狀態。
  • 透過滑塊和“滾動以展開”行為調整視窗大小。
  • 現在可以在命令中心中開啟快速聊天

The Quick Chat window with a question and answer displayed

總的來說,使用者體驗更加緊湊,以匹配其他“快速開啟”體驗,如命令面板(所有地方的填充更少,使用者和 Copilot 圖示更小,按鈕內嵌而不是在標題欄中)。

預設情況下,當您提出問題時,快速聊天(Quick Chat)會調整大小以專注於該問題和答案,從而最大程度地利用螢幕空間。我們也認為這有助於關注您可能想問 Copilot 的快速問題。您的對話歷史記錄仍然可用,您可以向上滾動以回溯。

由於這種動態高度,我們還希望提供一種調整視窗大小的方法,如果您需要更多或更少的空間。有兩種選項可用於調整視窗大小。第一種是我們稱之為“滾動以展開”的功能。如果您的快速聊天(Quick Chat)視窗因答案較短而很小,但您想檢視之前的長答案,當您向上滾動時,快速聊天(Quick Chat)會展開到最大高度。

您可以透過執行以下任一操作將快速聊天(Quick Chat)的高度重置為僅顯示最後一個問題和答案:

  • 關閉快速聊天(Quick Chat)並等待 30 秒。
  • 提出另一個問題或執行 /clear(請記住,/clear 將永久清除您的聊天記錄)。
  • 雙擊底部的滑塊。

說到滑塊……我們在快速聊天(Quick Chat)的底部還有一個滑塊,可用於手動調整快速聊天(Quick Chat)的高度。當您使用滑塊時,您就退出了預設的動態行為,並表示“我希望此高度固定在此處,直到重置”。

注意:如果您想恢復到動態行為,請雙擊滑塊或在聊天中輸入 /clear/clear 會清除您的聊天記錄)。

最後但並非最不重要的是,您可以透過“開啟快速聊天”選項從命令中心啟動快速聊天。

Open Quick Chat command in the Command Center

解釋終端選擇

Copilot 現在可以透過在終端的上下文選單中選擇Copilot:解釋此內容(根據平臺不同,為右鍵單擊Shift+右鍵單擊)來解釋當前終端選擇。

The terminal context menu's first entry is Copilot: Explain This

Copilot:解釋此內容命令將調出聊天檢視,Copilot 將在其中返回詳細的解釋。

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

設定的自然語言搜尋

設定編輯器現在允許使用 GitHub Copilot Chat 進行自然語言搜尋。

自然語言搜尋結果目前放在關鍵字匹配結果下方,並按相似度分數降序排列,但我們計劃在下個月修復排序,以便搜尋結果繼續按其目錄分組排列。

自然語言搜尋目前依賴於 Copilot 嵌入。因此,在嵌入可用之前(即 GitHub Copilot Chat 擴充套件啟用後幾秒鐘),搜尋結果將不會顯示在設定編輯器中。

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

主題:淺粉色(在 vscode.dev 上預覽)

Python

新的 Python 格式化文章

有一個新的專用主題關於Python 格式化,您將在其中學習如何設定預設格式化程式,例如autopep8Black,並透過各種設定進行自定義。

透過環境變數啟用終端

Python 擴充套件現在有了一個新的啟用機制,該機制可以在不執行任何顯式啟用命令的情況下啟用終端中選定的環境。本月,我們開始以實驗的形式推出此功能,使其成為預設體驗。透過新方法,我們使用環境變數來啟用終端,這在終端啟動時是隱式完成的,因此可以更快,尤其是對於 conda 環境。您可以新增以下使用者設定:"python.experiments.optInto": ["pythonTerminalEnvVarActivation"] 來試用。

如果您對此實驗有任何評論或建議,請隨時在vscode-python issue #11039中分享。

重新建立或使用現有的 .venv 環境

當在已包含 .venv 資料夾的工作區中工作時,Python: 建立環境命令已更新,提供了重新建立或使用現有環境的選項。如果您決定重新建立環境,當前 .venv 將被刪除,允許您建立一個名為 .venv 的新環境。然後,您可以按照Python: 建立環境流程選擇首選直譯器並指定要安裝的任何依賴項檔案來自定義新環境。如果環境無法刪除(例如,因為它正在使用),則會提示您手動刪除環境。

或者,如果您選擇使用現有環境,該環境將被選定為您的工作區。

預覽功能

我們正在嘗試在快速訪問選單中顯示工作區搜尋結果。要嘗試此功能,請執行搜尋:快速文字搜尋(實驗性)。此命令設定快速開啟以接受搜尋查詢。鍵入一些文字以檢視來自不同工作區檔案的匹配項。

調暗未聚焦的編輯器和終端

有一項新的實驗性功能,可以調暗當前未聚焦的編輯器和終端。此功能的目標是比典型的閃爍游標更清晰地顯示文字的去向。

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

上圖顯示了已啟用“調暗未聚焦”功能,不透明度設定為 0.5,因此更清楚 terminalService.ts 的編輯器已獲得焦點。

可以使用 accessibility.dimUnfocused.enabled 啟用此功能,並且可以透過 accessibility.dimUnfocused.opacity 控制調暗的程度。

該功能目前僅涵蓋編輯器和終端,但計劃將其擴充套件到允許使用者自行配置要調暗的檢視

擴充套件創作

支援批次範圍格式化

DocumentRangeFormattingEditProvider API 現在支援批次格式化。這意味著擴充套件可以選擇性地向編輯器發出訊號,表明它支援一次接收多個範圍的呼叫。這有助於減少對格式化提供程式的呼叫次數,從而提高效能。

要選擇加入批次格式化,提供程式必須實現一個新的可選函式:provideDocumentRangesFormattingEdits

作用域限定為工作區資料夾的 EnvironmentVariableCollection

EnvironmentVariableCollection API 現在支援建立一個新的集合,該集合的作用域限定為特定的工作區資料夾,並將應用於“全域性”集合之外。

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 擴充套件使用此機制來根據多根工作區中終端所屬的資料夾設定不同的虛擬環境。

配置何時應用 EnvironmentVariableMutator

EnvironmentVariableCollection API 現在可以在 shell 整合指令碼中應用更改,該指令碼將在 shell 初始化指令碼執行後執行。這僅在啟用了 shell 整合時才有效,因此可以在 shell 建立時以及在 shell 整合內部應用更改(如果它至關重要)。

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

當變數可能被 shell 初始化指令碼修改時,此功能非常有用。

提議的 API

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

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

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

TestMessage 和貢獻點上的 contextValue

您可以在 TestMessage 上提供 contextValue,以便在使用者對這些訊息執行操作時顯示。此外,還有兩個新的選單貢獻點可用:testing/message/contexttesting/message/content。前者顯示在“測試結果”樹檢視中的訊息上,後者顯示在編輯器中的訊息上方。

issue #190277 中閱讀有關 contextValue 的更多資訊。

終端上下文選單貢獻

正在提議兩個新選單,允許擴充套件將其自己的上下文選單操作整合到終端中

  • terminal/context - 終端上下文選單
  • terminal/title/context - 終端選項卡上下文選單

監聽終端命令執行

有關擴充套件監聽終端命令執行 API 的長期請求功能的早期提案已可供測試。此 API 使用 shell 整合 實現,並且僅在已啟用並正常工作的終端上觸發。

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

此 API 的形狀並非最終確定,但基本思想將保持不變。

這是一個監聽任何成功的 git push 命令並觸發擴充套件重新整理的示例用法

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

終端選擇訪問

一個簡單的提案 API,用於訪問終端選擇

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

此 API 可能包含一個相應的更改事件,然後才能最終確定,並且 API 名稱可能會更改,以使其更清晰地表明它是一個簡單的字串,而不是像 TextEditor.selection 那樣基於 Range

終端快速修復進度

終端快速修復提案現在可以觸發常規的 VS Code 命令,而不是終端命令。此更改還必然改變了終端命令介面的名稱

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

工程

Electron 25 更新

在此里程碑中,我們將 Electron 25 更新推廣給我們的穩定版使用者。此更新附帶 Chromium 114.0.5735.289 和 Node.js 18.15.0。我們要感謝所有在 Insiders 版本上進行自託管並提供早期反饋的人。

Node.js 的更新亮點

我們桌面應用程式中捆綁的 Node.js 以及與我們的 伺服器 捆綁的獨立可執行檔案已從 v16 升級到 v18。鑑於這是一個主要版本升級,存在一些行為和相容性更改。

  • 來自作業系統的 DNS 結果順序不再排序。我們在本地和伺服器場景中都為擴充套件主機添加了 --dns-result-order=ipv4first,以避免破壞可能尚未採用此更改的擴充套件。今後,我們建議擴充套件使用 autoSelectFamily 選項在 socket.connect API 中來適應結果順序的變化。

  • 來自 官方 Node.js 倉庫的 Linux 預構建二進位制檔案現在與基於 glibc 2.28 或更高版本的 Linux 發行版相容。這意味著我們將從伺服器上放棄對 Ubuntu 18、CentOS 7、RHEL 7 等的支援。我們現在為 Linux 伺服器提供自定義 Node.js 構建,以保持 glibc 2.17 或更高版本的相容性。在未來我們無法在 CentOS 7 映像上構建更新的 Node.js 版本時,此支援將會更改,因此我們建議伺服器使用者更新其作業系統版本,如果他們受到此更改的影響。

Chromium 的更新亮點

  • Mesa 版本更新後,Chromium 著色器編譯可能會中斷,導致應用程式 UI 中出現偽影。該問題已在 issue #190437 中跟蹤,其中還包含指向 Chromium 錯誤報告的連結。您可以透過執行 --verbose 並檢視日誌中的以下行 ERROR:shared_context_state.cc(81)] Skia shader compilation error 來識別此問題。如果您受到此問題的影響,當前的解決方法是刪除位於 ~/.config/Code/GPUCache 的 GPU 快取。
  • 當 Chromium 在 WebGL 中使用 SwiftShader 後端時,它似乎在 Windows 和 Linux 上都對我們的整合終端效能產生了迴歸。作為一種變通方法,我們根據 GL_RENDERER 字串檢測受影響的使用者,併為終端切換到 DOM 後端。可以在 issue #190195 中找到更多詳細資訊,其中還包含指向 Chromium 錯誤報告的連結。

感謝

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

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-hexeditor 的貢獻

vscode-js-debug 的貢獻

vscode-pull-request-github 的貢獻

vscode-vsce 的貢獻

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