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

2022 年 1 月 (版本 1.64)

更新 1.64.1:此更新解決了這些安全問題

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

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


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

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

在 VS Code 團隊的釋出派對上觀看此版本新功能亮點。您可以在我們的 YouTube 頻道上找到活動錄影

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

工作臺

新側邊面板

在此里程碑中,我們引入了側邊面板,它是工作臺中與側邊欄相對的新介面,您可以在其中容納來自側邊欄或底部面板的檢視。與將底部面板移動到編輯器的左側或右側不同,新的側邊面板與底部面板同時工作,因此您可以一次檢視更多組檢視。

要使用側邊面板,您需要將一些檢視移動到其中。根據我們收到最多讚的功能請求之一,您可能希望將大綱檢視從側邊欄移動到側邊面板。您可以透過將檢視拖放到側邊面板中來完成此操作。如果側邊面板未開啟,就像底部面板一樣,將檢視拖到編輯器區域的邊緣會將其彈出。

在下面的短影片中,大綱檢視被拖到右側並放下以建立側邊面板。然後,使用者可以在側邊欄中切換檢視(此處開啟全域性搜尋檢視),同時保持大綱檢視可見。

或者,您可以使用命令面板中的移動檢視命令,該命令將顯示可用檢視的下拉列表。選擇檢視後,您可以透過建立新的面板/側邊欄/側邊面板條目或將檢視放置在現有位置(例如資源管理器或原始碼管理)來選擇位置。

Move View command view locations dropdown

透過抓取檢視圖示,可以在面板、側邊欄和側邊面板之間拖放檢視。您可以透過右鍵單擊檢視圖示並選擇重置位置來將檢視位置重置回其預設位置。

View context menu with Reset Location command

如果您想將所有檢視重置回預設佈局,您可以從命令面板執行檢視:重置檢視位置

替換面板位置

如上所述,新的側邊面板提供了與將面板移動到左側或右側類似的功能,但透過不移動原始面板的全部內容來改進此功能。除了面板之間的檢視拖放,新的側邊面板正在取代移動底部面板的選項。

鑑於此,我們已棄用 workbench.panel.defaultLocation 設定以及移動面板命令,轉而使用類似命令

  • 將檢視從面板移動到側邊面板 (workbench.action.movePanelToSidePanel)
  • 將檢視從側邊面板移動到面板 (workbench.action.moveSidePanelToPanel)

舊的移動面板命令已重新對映到提供類似行為的新命令。即使有此對映,我們仍建議您更新您的鍵繫結以使用新命令。

下面,整個底部面板被移動到側邊面板,然後返回到原始面板位置。

面板對齊

針對另一個流行的功能請求,我們添加了一個名為“面板對齊”的新佈局選項。此選項允許您配置底部面板在視窗中跨越的距離。有四個選項:

  • 居中 - 這是經典行為。面板僅跨越編輯器區域的寬度。
  • 左側 - 面板將從視窗的左邊緣跨越到編輯器區域的右邊緣。
  • 右側 - 面板將從視窗的右邊緣跨越到編輯器區域的左邊緣。
  • 兩端對齊 - 面板將跨越視窗的整個寬度。

請注意,對於所有選項,活動欄都被視為視窗的邊緣。

您可以在選單中配置這些選項,路徑為 檢視 > 外觀 > 對齊面板,或者使用新的將面板對齊方式設定為... 命令。

自定義佈局控制

有了所有這些新的佈局選項,我們一直在探索如何更好地公開佈局配置以提高可發現性和易用性。這就是為什麼您可能會在標題欄中注意到一個新的實驗性配置佈局按鈕。這僅在您的 window.titleBarStyle 設定為 custom(Windows 和 macOS 上的預設值)且 workbench.experimental.layoutControl.enabled 設定為 true 時顯示。按鈕的可見性由一項實驗控制,但如果您想手動啟用它,您可以透過在設定編輯器中應用這些設定值來完成 (⌘, (Windows, Linux Ctrl+,))。

Configure Layout button on the title bar

選單的內容仍在開發中,但目前您應該能夠切換側邊欄、面板和側邊面板。此外,您將看到一個新命令自定義佈局的條目。這個新命令觸發一個新的互動式快速選擇體驗,允許您在一個地方控制佈局配置的所有方面。

嘗試一下,如果您有任何反饋,請在問題 #137633 中告知我們。

設定編輯器

設定編輯器搜尋現在在搜尋時會查詢字串和列舉設定中的字串值匹配項。

Settings editor pulling up results where the enum value matches the query

新的搜尋演算法還優先匹配完整單詞,這意味著如果同時擁有 Java 和 JavaScript 擴充套件,搜尋“java”時 Java 設定將首先顯示。

Settings editor search showing Java results before JavaScript ones when searching "java"

最後,設定編輯器中的下拉列表(例如 files.autoSave)和列表小部件(例如 files.associations)現在支援觸控式螢幕裝置。

設定同步

設定同步現在支援同步使用者任務。

Settings Sync User Tasks

VS Code for Web 中的預設設定同步機器名稱現在包含瀏覽器和產品名稱。

Settings Sync default machine name including browser and product names

資源管理器:確認並停用撤消

檔案資源管理器長期以來一直支援撤消堆疊以恢復檔案和資料夾編輯(重新命名、剪下/複製/貼上、移動、匯入等)。一些使用者發現此功能出乎意料,因此現在有一個設定可以停用資源管理器中的撤消 (explorer.enableUndo)。

此外,還添加了一個新設定 (explorer.confirmUndo) 來配置資源管理器在執行撤消時提示確認的頻率。預設情況下,資源管理器會比以前更頻繁地提示,以確保不會意外發生破壞性撤消,但可以透過值 "light" 更改為舊行為,或設定為 "verbose" 以在所有撤消操作之前提示。

編輯器

音訊提示

音訊提示指示當前行是否具有特定標記,例如錯誤、斷點或摺疊文字區域。

當主游標改變其行或第一次向當前行新增標記時,它們會播放。當螢幕閱讀器連線時,音訊提示會自動啟用,但也可以透過將 audioCues.enabled 設定為 on 來手動開啟。

將會有更多的音訊提示,我們將對聲音設計進行迭代。

Unicode 高亮顯示改進

為了改進 11 月版本中引入的Unicode 高亮顯示功能,有新的設定可以更好地處理誤報。

新設定 editor.unicodeHighlight.allowedLocales 可用於允許在一個或多個已配置的語言環境中常見的字元。預設情況下,這包括當前的 VS Code 顯示語言和當前作業系統語言。目前,僅支援在 vscode-loc 語言包中翻譯的語言環境。

設定 editor.unicodeHighlight.includeStrings 控制是否應高亮顯示字串中的字元。預設值為 true,但可以設定為 false 以忽略字串。

編輯器摺疊限制

新設定 editor.foldingMaximumRegions 允許使用者更改編輯器中顯示的摺疊範圍的最大數量。預設情況下,限制為 5000。請注意,更大的數字可能會導致效能下降。

編輯器適應語言功能計時

擴充套件幾乎支援所有語言功能,包括摺疊區域、CodeLens、內聯提示和語義標記等內建功能。這些功能不是由使用者手勢觸發的,而是由打字觸發的,通常在超時後。例如,CodeLens 會隨著您的打字而更新,語義標記也是如此。選擇的超時值已固定且或多或少是任意的。在此版本中,編輯器會適應觀察到的計時,以便較慢的機器或網路連線不會因請求而過載,而較快的機器可以更好地利用。

終端

自動回覆

終端現在具有一項可選功能,可在收到特定字元序列時自動回覆。一個很好的例子是,在執行批處理指令碼時按 Ctrl+C 後,Windows 批處理指令碼訊息 Terminate batch job (Y/N)?。要在 Windows 中按 Ctrl+C 時,終端自動回覆 Y 並回車 (\r),請新增以下設定:

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)?": "Y\r"
}

主題:Sapphire

您可以為其他事情設定自定義回覆,但在執行此操作時要小心,因為您正在自動向程序傳送文字。例如,您可以使用它在提示時自動更新 Oh My Zsh:

"terminal.integrated.autoReplies": {
  "[Oh My Zsh] Would you like to check for updates? [Y/n]": "Y\r"
}

如果您使用 Clink 並啟用其類似功能,您可以在 Clink 或 VS Code 中透過將回復設定為 null 來停用它,以避免這兩個功能相互衝突:

"terminal.integrated.autoReplies": {
  "Terminate batch job (Y/N)": null
}

增強的 VT 支援

添加了對作業系統命令 (OSC) 4/10/11/12 轉義序列的支援,使應用程式能夠控制終端的主題顏色。

以前,終端中的連結導航需要使用滑鼠。現在,可以透過以下命令僅使用鍵盤開啟連結:

  • 終端:開啟最後一個網頁連結... 例如,https://github.com/microsoft/vscode
  • 終端:開啟最後一個檔案連結... 例如,/Users/user/repo/file.txt
  • 終端:開啟檢測到的連結... 以檢視所有連結(網頁、檔案、單詞)

A Quick Pick is displayed with link results of type web, word, and file.

原始碼管理

更多對倉庫發現的控制

根據社群反饋,有兩個新設定可以更好地控制 Git 倉庫的發現過程,並適應更多樣化的資料夾結構。

  • git.repositoryScanMaxDepth - 控制掃描時使用的深度。
  • git.repositoryScanIgnoredFolders - 控制掃描期間應忽略的資料夾列表。

更改列表排序改進

一個新設定 (scm.defaultViewSortKey) 控制原始碼管理檢視中更改列表的預設排序鍵。排序鍵的選擇也會為每個資料夾/工作區記住。

選項包括

  • name - 按檔名排序更改。
  • path - 按檔案路徑排序更改(預設)。
  • status - 按原始碼管理狀態排序更改。

您需要重新載入 VS Code 窗口才能應用設定更改。

新的 Git 暫存命令

命令面板中添加了一個新命令Git: 刪除所有暫存...,允許使用者清除所有暫存條目。與任何具有永久性後果的 Git 操作一樣,請謹慎使用此命令。

Git 輸出 - Git 命令執行時間及持續時間

為了幫助追蹤效能問題,Git 輸出通道現在顯示 Git 命令執行的時間以及命令的持續時間,不包括啟動子程序所花費的時間。

Notebook

在渲染的 Markdown 和程式碼單元格輸出中查詢文字

VS Code 現在支援在 Markdown 單元格的渲染檢視和程式碼單元格的輸出中查詢文字。該功能預設停用,因為它需要渲染所有 Markdown 單元格和輸出,這在開啟筆記本時可能會很耗時。您可以透過在查詢控制元件輸入框的篩選器下拉選單中選擇選項(Markdown 預覽程式碼單元格輸出)來開啟此功能。

目前,在輸出中搜索文字時存在一些限制。例如,您無法搜尋 VS Code 本身渲染的流/文字輸出。我們計劃在下一次迭代中改進這一點。

單元格摺疊 UI

筆記本單元格左側有一個藍色條,表示它們處於焦點狀態。現在此條是互動式的——您可以單擊頂部以摺疊單元格輸入,單擊底部以摺疊輸出。

Markdown 單元格摺疊提示

當 Markdown 單元格區域被摺疊時,會顯示一條訊息,其中包含摺疊單元格的數量,以使其更明顯地顯示某些單元格被隱藏。

Folded Markdown cell hint

單元格執行提示

我們進行了一些更改,使單元格何時執行以及哪個單元格正在執行更加明顯。

首先,當單元格正在執行但未滾動到檢視中時,編輯器窗格頂部將顯示一個進度條。

其次,當單元格正在執行時,筆記本工具欄中會新增一個新按鈕轉到正在執行的單元格

第三,如果程式碼單元格透過 notebook.outline.showCodeCellsnotebook.breadcrumbs.showCodeCells 設定在大綱或麵包屑中可見,則在它們執行時會顯示一個動畫執行圖示。

除錯

檢視和編輯二進位制資料

VS Code 的通用偵錯程式現在支援檢視和編輯二進位制資料(又稱“記憶體”)。在變數檢視中,提供記憶體檢視和編輯功能的變數會顯示一個內聯二進位制圖示,選擇它會開啟十六進位制編輯器

Binary data shown for a variable during a debug session

主題:Codesong

記憶體檢視和編輯依賴於除錯介面卡協議的記憶體相關功能,除錯擴充套件必須實現這些功能才能在 VS Code 中啟用相應的 UI。有關詳細資訊,請參見下面的偵錯程式擴充套件編寫部分。在此版本中,只有內建的 JavaScript 偵錯程式支援檢視和編輯二進位制資料,但我們預計其他除錯擴充套件也將很快跟進。

JavaScript 除錯

排除呼叫者在斷點處暫停

有時您可能會設定斷點或新增偵錯程式語句,但只希望在從特定程式碼路徑呼叫時暫停。DOM 事件處理程式,如 mousemove,就是一個很好的例子。在此版本中,JavaScript 偵錯程式添加了“排除呼叫者”在斷點或偵錯程式語句處暫停的功能。

當在某個位置暫停時,您可以在呼叫堆疊檢視中右鍵單擊一個幀,然後選擇排除呼叫者命令。將顯示一個新的已排除呼叫者檢視,允許您檢視和管理已排除的呼叫者,之後如果已排除的呼叫者出現在其呼叫堆疊中的任何位置,您的程式將不會在斷點位置暫停。

Linux 上的 Edge 支援

現在可以透過 edge 除錯型別在 Linux 上除錯 Microsoft Edge

語言

Markdown 路徑智慧感知

內建的 Markdown 擴充套件現在包含對連結和影像的路徑智慧感知。

Path suggestions in a Markdown link

路徑建議的工作方式類似於 CSS 和 HTML 檔案中的路徑智慧感知。以 / 開頭的路徑相對於當前工作區解析,而以 ./ 開頭或沒有任何字首的路徑相對於當前檔案解析。當您鍵入 / 時,路徑建議會自動顯示,或者可以透過使用 ⌃Space (Windows, Linux Ctrl+Space) 手動呼叫。

路徑智慧感知還可以幫助您連結到當前檔案內或另一個 Markdown 檔案內的標題。以 # 開頭路徑以檢視檔案中所有標題的補全(根據您的設定,您可能需要使用 ⌃Space (Windows, Linux Ctrl+Space) 才能看到這些)

Header section suggestions in a Markdown link

您可以使用 "markdown.suggest.paths.enabled": false 停用路徑智慧感知。

Markdown 刪除線支援

VS Code 現在支援在 Markdown 編輯器和內建 Markdown 預覽中渲染 ~~刪除線~~ 文字

Strikethrough rendering the Markdown editor and preview

刪除線透過將文字用兩個波浪號字元括起來書寫。

雖然所有 VS Code 的內建主題都支援刪除線,但 Marketplace 中的某些主題可能需要更新才能在編輯器中正確渲染刪除線文字。

TS 4.5.5

VS Code 現在捆綁了 TypeScript 4.5.5。

此次小幅更新修復了一些重要的崩潰和工具錯誤

JS/TS 的環繞程式碼片段

許多 JavaScript 和 TypeScript 程式碼片段已更新,以支援環繞選定文字。

要使用環繞功能,首先選擇一些文字,然後執行插入程式碼片段。現在,像 ifforof 這樣的程式碼片段將使用選定的文字作為新語句的主體,而不是替換選定的文字。

HTML 等號後自動插入引號

在 HTML 中屬性後鍵入 = 時,語言服務現在會自動插入引號並將游標置於引號之間。設定 html.completion.attributeDefaultValue 允許您指定引號型別(單引號或雙引號),預設使用雙引號。

可以透過設定 "html.autoCreateQuotes": false 停用此功能。

JSON 清除架構快取命令

一個新的命令清除架構快取清除以前下載的架構的快取。

LaTeX 支援

已新增 LaTeX 基本語言支援。這包括語法高亮和自動閉合對。

LaTeX snippet

Web 版 VS Code

遠端倉庫

GitHub 倉庫

在 VS Code for the Web 中建立的提交現在已簽名並在 GitHub UI 中標記為已驗證。此外,維護者現在在使用 VS Code for the Web 時,可以提交來自 fork 的拉取請求。這得益於新的 GitHub GraphQL createCommitOnBranch API。

此外,原始碼管理檢視現在支援多選

主題:One Monokai

以前,只有在將 GitHub 倉庫克隆到本地或遠端機器後才能建立空提交。現在,您還可以使用GitHub 倉庫:提交空命令在 VS Code for the Web 中建立空提交。

還添加了一個新配置,以啟用自動下載給定大小以下的倉庫的完整內容,從而啟用高階功能,如全倉庫文字搜尋和轉到引用。設定 remoteHub.experimental.fs.maxAutoDownloadSize 控制在嘗試下載完整內容之前將顯示提示的倉庫大小限制。預設情況下,未設定 maxAutoDownloadSize,以便在不提示的情況下從不下載。

Azure Repos

Azure Repos 支援已從 GitHub Repositories 擴充套件移至其自己的專用擴充套件,該擴充套件也可以在桌面版上安裝。

採用預釋出擴充套件

VS Code for the Web 現在捆綁了 GitHub Pull Request and IssuesGitHub Repositories 擴充套件的預釋出版本。

PWA 和離線支援

VS Code for the Web 已採用 PWA 模型,現在可以作為 PWA 安裝在宿主作業系統上。由於這種採用,現在還可以啟用一些離線功能。一旦訪問過 vscode.devinsiders.vscode.dev,使用者即使在離線狀態下也可以使用它編輯本地檔案。

Install VS Code PWA prompt

對擴充套件的貢獻

Python

改進的直譯器快速選擇

為了更容易選擇所需的直譯器,Python 擴充套件現在在選擇直譯器快速選擇中按型別對直譯器進行分組。

Interpreters grouped in interpreter picker

我們還在嘗試將活動/選定的直譯器移動到狀態列的右側,可能在語言狀態內部,因此如果不可見,請檢查右側的Python狀態。

新增對“conda run”的支援

為了改善我們對 Anaconda 使用者的支援,我們已經實現了對 conda run 的支援,使用 --no-capture-output 引數,該引數不會捕獲過去導致錯誤的輸出。此功能已應用於執行 Linter、測試和格式化功能。

存在一個已知錯誤問題 #10972,該錯誤導致在 Windows 上使用引數中的特殊字元執行 linting 和測試時出錯。這是由於 conda run 讀取帶有特殊字元的引數的方式造成的,因此它可能會影響您在 settings.json 中指定的任何命令列引數。

Anaconda 團隊正在處理此問題,並希望很快釋出修復程式。新版本釋出後,您可以在 Conda 網站上更新您的 Anaconda 版本。

智慧選擇和更好的摺疊支援

透過 Pylance 語言伺服器,Python 程式碼選擇和摺疊也得到了改進。

使用鍵盤選擇 Python 程式碼所需的擊鍵次數更少,因為在定義選擇範圍時會考慮程式碼的語義資訊。

主題:Horizon Extended

至於摺疊,以前區域僅由縮排定義,這在某些情況下(例如多行字串)並不理想。現在摺疊區域會適當考慮語義資訊,並且還支援 #region 註釋

Jupyter

遠端 Jupyter 伺服器

Jupyter 擴充套件現在在本地和遠端 Jupyter 伺服器之間切換時不再需要重新載入 VS Code。此外,該擴充套件現在在核心選擇器中同時顯示本地和遠端核心。

十六進位制編輯器

十六進位制編輯器經過了一些重要的架構重構。值得注意的是,在大多數情況下,它現在能夠開啟任意大小的檔案而不會出現效能問題。此外,其佈局寬度現在是可配置的,並且它具有更強大的查詢/替換實現。未來的迭代將繼續改進。

遠端開發

遠端開發擴充套件的工作仍在繼續,它允許您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能齊全的開發環境。

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

GitHub 拉取請求和議題

GitHub Pull Requests and Issues 擴充套件的工作仍在繼續,該擴充套件允許您處理、建立和管理拉取請求和問題。檢視該擴充套件的 0.36.0 版本更新日誌以瞭解亮點。

預覽功能

終端 Shell 整合

終端現在具有實驗性 shell 整合,它允許 VS Code 瞭解終端內部正在發生的事情,而這在以前是未知的。當使用設定 "terminal.integrated.enableShellIntegration": true 啟用時,如果可能,用於執行 shell 整合指令碼的引數將被注入到您的終端配置檔案中。指令碼本身主要將不可見序列注入到您的提示中,為 VS Code 提供有關提示、命令和命令輸出的位置、每個命令的當前工作目錄 (cwd) 以及每個命令的退出程式碼等資訊。

利用這些資訊,我們可以透過多種方式增強現有功能:

  • 快速檢測當前工作目錄 (cwd) - 以前這隻在 macOS 和 Linux 上可能,並且會啟動程序或查詢檔案系統以獲取該資訊。現在這在 Windows 上也有效。cwd 用於連結檢測和在拆分終端選項卡時繼承 cwd 等功能。
  • 改進命令跟蹤功能 - 此功能以前存在,但僅在 macOS 上具有預設鍵繫結 (Cmd+Up/Down),並且使用一種簡單的猜測方法,根據按下 Enter 的時間來猜測行位置。

Shell 整合支援以下新功能:

  • 執行最近的命令 - 由於我們知道運行了哪些命令,我們可以公開一個命令,允許您在快速選擇中再次檢視和執行它們。最近的命令顯示在快速選擇中,包括有關當前工作目錄和執行時間的資訊
  • 轉到最近的目錄 - 與上述類似,我們也允許導航到過去的目錄。最近的目錄按頻率(降序)顯示在快速選擇中
  • 支援相對於當前工作目錄的連結 - 我們現在知道終端緩衝區中每一行的當前工作目錄,因此我們可以支援在終端中開啟相對於啟用位置的當前工作目錄的連結。以前,當單擊連結時,會開啟一個快速選擇,其中包含與該名稱匹配的任何資料夾中的結果。現在,將開啟精確的檔案匹配項。在當前工作目錄為 vscode 的終端中,echo package.json。單擊檔名將開啟 vscode/package.json。目錄更改為 template-string-converter,然後 echo package.json。單擊檔名將開啟 template-string-converter/package.json。

目標是當該功能的可靠性足夠好時,預設開啟 shell 整合。我們採用的引數注入方法是儘可能地不顯眼。例如,我們不像某些終端那樣自動修改您的 shell 初始化指令碼,而是攔截程序的建立,檢查引數,並在我們確信終端可以執行它們時注入 shell 整合引數。希望是讓它在使用者無需任何配置的情況下執行良好,並且不干擾您現有的 shell 設定。

目前支援的 shell 是 Windows 上的 pwsh,以及 Linux 和 macOS 上的 pwsh、bash 和 zsh。

如前所述,這是一個實驗性功能,有些粗糙,並且存在一些已知問題:

  • 尚不支援 $PS2 行延續。但是,pwsh 中的行延續確實有效。
  • 暫不支援右側提示。
  • 已知 zsh 指令碼有時不會啟用
  • 遠端 VS Code 視窗支援有限。

檔案資源管理器檔案巢狀

資源管理器現在實驗性地支援以邏輯巢狀佈局顯示同一目錄中的檔案。這有助於將相關檔案在視覺上分組在一起,並將檔案摺疊到“根”檔案中以減少混亂。已新增幾個新設定來控制此行為:

  • explorer.experimental.fileNesting.enabled:控制是否啟用檔案巢狀。
  • explorer.experimental.fileNesting.expand:控制檔案巢狀是否預設顯示為展開狀態。
  • explorer.experimental.fileNesting.patterns:控制檔案如何巢狀。

例如,在許多倉庫中,.ts 檔案與其派生的 .js.d.ts 和/或 .js.map 檔案並存。雖然透過 files.exclude 完全隱藏派生檔案長期以來是可能的,但能夠快速訪問派生檔案是件好事,現在透過巢狀可以實現這一點。

下面,資源管理器正在使用預設的 explorer.experimental.fileNesting.patterns 配置來巢狀 .js.js.map 檔案,這些檔案在相應的 .ts 檔案展開時顯示。

Explorer with some collapsed and expanded nests

主題:GitHub Light

擴充套件創作

語言預設圖示

語言貢獻者可以為語言定義一個圖示。

{
  "contributes": {
    "languages": [
      {
        "id": "latex",
        // ...
        "icon": {
          "light": "./icons/latex-light.png",
          "dark": "./icons/latex-dark.png"
        }
      }
  ]

如果當前檔案圖示主題僅具有該語言的通用檔案圖示,則會顯示該圖示。

此外,像 MinimalNone 這樣不顯示檔案圖示的檔案圖示主題將不會使用語言圖示。如果檔案圖示主題具有副檔名或檔名的圖示,則這些圖示將被優先使用。

檔案圖示主題可以透過在主題檔案中定義 showLanguageModeIcons: true|false 來定製新行為。

  • showLanguageModeIcons: true 即使主題未指定檔案圖示,也顯示預設語言圖示。
  • showLanguageModeIcons: false 阻止使用預設語言圖示。

QuickPickItem 分隔符

擴充套件作者現在可以向 Quick Pick 新增分隔符。這對於分組專案或在專案之間新增一些空間很有用

Quick Pick separators

要向現有 Quick Pick 新增分隔符,請將新的 QuickPickItem 新增到現有專案列表中,但要指定 QuickPickItem 上的 kind 屬性並將其設定為 QuickPickItemKind.Separator

在上面的示例中,您需要將以下物件新增到您的專案列表中

{
    label: 'APIs',
    kind: QuickPickItemKind.Separator
}

如果您未指定 kind 屬性,或者將其設定為 QuickPickItemKind.Default,則該專案將被視為普通的 QuickPickItem

vscode.workspace.createFileSystemWatcher 現在支援任何路徑

現有的 vscode.workspace.createFileSystemWatcher API 得到了改進,允許您傳入任何檔案或資料夾路徑進行檔案監視,即使它在工作區之外。以前,檔案監視器僅限於工作區中開啟的資料夾。

根據您傳遞給方法的 glob 模式,監視器將是遞迴的(例如,**/*.js)或非遞迴的(*.js)。遞迴監視器需要更多資源,因此如果可能,我們建議使用簡單的 glob 模式。

示例

// Watch a folder non-recursively
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.Uri.file(<path to folder outside workspace>), '*.js'));

// Watch the active text editor file
vscode.workspace.createFileSystemWatcher(new vscode.RelativePattern(vscode.window.activeTextEditor.document.uri, '*'));

注意:作為此更改的一部分,我們對現有檔案監視器進行了行為更改。僅使用 glob 模式(例如 vscode.workspace.createFileSystemWatcher('**'))指示的檔案監視器將不再接收在工作區外部更改的檔案的事件。它將僅接收來自工作區內部路徑的檔案事件。如果使用者沒有開啟的工作區,則不再透過此方法傳遞任何事件。這樣做是為了確保擴充套件不會從工作區外部接收到意外事件。

vscode.TerminalLocation

您可以使用新的 TerminalLocation API 指定擴充套件終端的建立位置。

這可以透過提供 parentTerminal,在編輯器區域和麵板之間進行選擇等方式來建立拆分終端。

onWill 事件的取消令牌

VS Code API 暴露了參與檔案操作的事件,例如 onWillRenameFiles。這種參與可能是長時間執行的,因此使用者可以取消它。在此版本中,擴充套件可以透過相應事件上的取消令牌(例如 FileWillRenameEvent#token)觀察使用者側的取消。這允許擴充套件也可以取消昂貴的下級操作。

Git 擴充套件 API

  • 已新增新的 Repository.add 方法,以啟用暫存檔案的功能。
  • 添加了 Repository.tagRepository.deleteTag 方法,以啟用建立和刪除標籤的功能。

onTaskType 啟用事件

提供任務的擴充套件可以透過使用新的 onTaskType:foo 啟用事件來限制其不必要的啟用。這比在 onCommand:workbench.action.tasks.runTask 上啟用要好,因為 workbench.action.tasks.runTask 對於提供任務的擴充套件來說通常過於急切。

偵錯程式擴充套件創作

VS Code 現在實現了除錯介面卡協議的記憶體相關功能

在此版本中,VS Code 已開始透過支援 除錯介面卡協議 的以下記憶體相關功能來支援檢視和編輯二進位制資料

  • VS Code 遵循 DAP 變數上的 memoryReference 屬性,並透過將客戶端功能 supportsMemoryReferences 傳遞給除錯介面卡來宣佈這一點。
  • 如果 VS Code 從除錯介面卡接收到功能 supportsReadMemoryRequest,它將啟用用於檢視二進位制資料的 UI,並將發出 readMemory 請求來檢索資料。
  • 如果 VS Code 從除錯介面卡接收到功能 supportsWriteMemoryRequest,它將啟用用於編輯二進位制資料的 UI,並將發出 writeMemory 請求來儲存資料。
  • VS Code 處理 memory 事件,並透過將客戶端功能 supportsMemoryEvent 傳遞給除錯介面卡來宣佈這一點。

語言伺服器協議

新版本的 語言伺服器協議,連同相應的 npm 模組,已經發布。該版本包含筆記本文件的擬議實現。規範部分可以在此處閱讀。

建議的擴充套件 API

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

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

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

停用終端永續性

建立終端時,可以透過在 TerminalOptionsExtensionTerminalOptions 中設定 disablePersistence 來選擇在重啟和重新載入時不進行終端永續性。

export interface TerminalOptions {
  disablePersistence?: boolean;
}

內聯提示 API

在此向所有對內聯提示 API 感興趣的人喊話。它即將完成,並增加了對互動式標籤部分的支援。這些允許您將原始碼位置繫結到提示,從而啟用程式碼導航等功能。此外,現在支援命令。此提案的最新狀態和開發在此處:vscode.proposed.inlayHints.d.ts

語言狀態 API

語言狀態項 API 計劃定稿。請試用並提供對 vscode.proposed.languageStatus.d.ts 的反饋。

測試提案

我們正在提出一種官方方式來為測試實現“重新整理”處理程式,請檢視 vscode.proposed.testRefresh.d.ts。這將允許擴充套件在 VS Code 中的標準“重新整理”按鈕後面統一,並避免實現自己的按鈕。

此外,我們建議 TestItemvscode.proposed.testSortText.d.ts 中具有 sortText 屬性。

內聯補全:自動括號補全

當擴充套件提供內聯補全項時,它可以將其屬性 completeBracketPairs 設定為 true。如果設定,VS Code 會在向用戶顯示內聯補全之前,透過關閉或刪除無效括號來嘗試修復補全文字中的無效括號。

樹拖放提案支援拖放到編輯器中

TreeDragAndDropController 支援 "resourceurls" MIME 型別時,樹拖放提案即將完成,現在支援從樹檢視拖放到編輯器中。詳細資訊可在問題 #141418 中找到。請試用並提供對 vscode.proposed.treeViewDragAndDrop.d.ts 的反饋。

評論時間戳

評論 API 在 Comment 上添加了一個新的 timestamp 屬性。除了 API,還有一個新設定用於控制評論時間戳的顯示方式:comments.useRelativeTime。請試用並提供對 vscode.proposed.commentTimestamp.d.ts 的反饋。

工程

vscode-bisect 工具

一個新的用於二分查詢已釋出的 VS Code Insiders 版本(web 和桌面)的工具可用,以幫助診斷問題

npx vscode-bisect

git bisect 類似,vscode-bisect 將啟動一系列過去的已釋出 Insiders 版本,詢問該版本是否重現了問題。最終結果是引入問題的提交範圍。該例項將使用專用的全新資料夾用於使用者資料,以免影響您的主要開發環境。

從原始碼執行 Code Web & Server

用於從原始碼執行 VS Code for the Web 和 VS Code Server 的指令碼已移至 scripts 資料夾

  • ./scripts/code-web.sh|bat 從原始碼啟動 Code for the Web(又名“無伺服器”)並開啟瀏覽器。使用 --help 獲取更多選項。
  • ./scripts/code-server.sh|bat 從原始碼啟動 VS Code Server。新增 --launch 以同時在瀏覽器中開啟 Web UI。使用 --help 獲取更多選項。
  • ./scripts/test-web-integration.sh|bat 用於遠端 Web 測試。
  • ./scripts/test-remote-integration.sh|bat 用於遠端測試。

擴充套件

在此里程碑中,我們透過最小化 VS Code 對服務的查詢次數,改進了 Marketplace 互動。

值得注意的修復

  • 91286 客戶端上的節流設定同步活動
  • 117648 使用 emmet 擴充套件 sass 擴充套件“gtc”時結果很奇怪。
  • 134466 不存在的偵錯程式配置
  • 135677 懸停在設定 UI 連結上時,開頭顯示 #
  • 138072 將最近開啟的工作區儲存在全域性儲存中
  • 138805 開啟大型二進位制檔案會讀取完整內容
  • 138850 檔案在磁碟上更改後,開啟的編輯器可能變為空白
  • 139880 除錯:按 F5 時要求儲存檔案
  • 140003 任務無法從不同工作區資料夾中的啟動配置中引用
  • 140129 每次雙擊 settings.json 檔案都會開啟新選項卡
  • 140560 VS Code 停止除錯 API 的問題
  • 140967 Comment.body 渲染為 Markdown,即使是純字串

感謝

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

Web 擴充套件

用於啟用作為Web 擴充套件執行程式碼的擴充套件的擴充套件作者(以下列表為 2021 年 12 月 7 日至 2022 年 1 月 31 日之間)

問題跟蹤

對我們問題跟蹤的貢獻

拉取請求

vscode 的貢獻

vscode-css-languageservice 的貢獻

vscode-eslint 的貢獻

vscode-extension-samples 的貢獻

vscode-html-languageservice 的貢獻

vscode-js-debug 的貢獻

  • @zkx5xkt:修復:DebugSessionTunnels。遠端/本地埠使用不當 PR #1163

vscode-pull-request-github 的貢獻

vscode-textmate 的貢獻

vscode-vsce 的貢獻

debug-adapter-protocol 的貢獻

monaco-editor 的貢獻

node-jsonc-parser 的貢獻