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

2020 年 11 月(1.52 版)

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

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


歡迎使用 Visual Studio Code 2020 年 11 月版。正如在11 月迭代計劃中宣佈的那樣,我們繼續花了兩週時間處理 GitHub 問題和拉取請求,這在我們的問題整理指南中有詳細說明。在我們的所有 VS Code 儲存庫中,我們關閉(分類或修復)了 5242 個問題,甚至比我們在2019 年 10 月的上次整理迭代中關閉的 4622 個問題還要多。在我們關閉問題的同時,您建立了 2937 個新問題。主要的vscode 儲存庫現在有 2146 個未解決的功能請求和 884 個未解決的 bug。此外,我們還關閉了 144 個拉取請求。

和往年一樣,我們使用了 Benjamin Lannon即時跟蹤器來跟蹤我們的進度。

Burn down chart of VS Code issues

在專注於整理之後,我們還解決了幾個功能請求和社群拉取請求。這帶來了許多新功能和設定,其中一些主要亮點包括:

工作臺

預覽編輯器改進

我們根據使用者反饋對預覽編輯器的處理方式進行了多項更新。

workbench.editor.enablePreviewFromQuickOpen 設定現在預設停用,因此從快速開啟開啟的編輯器將不再以預覽模式顯示。

當您開始程式碼導航(例如,使用轉到定義)時,您從中開始的編輯器將退出預覽模式並保持開啟狀態,而新編輯器將處於預覽模式,直到您進一步導航。

Go to Definition

我們更改了所有自定義樹(例如,在擴充套件或 Git 檢視中使用的樹)以使其與內建樹(例如,檔案資源管理器)更一致地工作。這意味著,以下互動現在適用於所有這些樹:

  • 雙擊或滑鼠中鍵單擊以非預覽模式開啟。
  • Enter 以非預覽模式開啟(Space 以預覽模式開啟)。
  • Alt+Click 在活動編輯器旁邊開啟一個編輯器。

注意:如果您是使用我們自定義樹 API 的擴充套件作者,您也將受益於此更改。請確保將 vscode.openvscode.diff 命令用於 TreeItem.command 以獲取新的預覽模式行為。

編輯器溢位選單中新增了一個選單項保持編輯器開啟,允許您完全關閉預覽編輯器。

Selecting Keep Editors Open in the overflow menu

恢復以前的會話視窗

現有 window.restoreWindows 設定的新值 preserve 允許您強制在關閉 VS Code 之前開啟的每個視窗在重新啟動 VS Code 時恢復,即使 VS Code 被明確要求開啟特定的資料夾或檔案。一個常見的示例是在平臺的資源管理器中雙擊檔案以在 VS Code 中開啟它,或使用終端開啟特定的檔案或資料夾。如果沒有 window.restoreWindows: preserve 設定,VS Code 將只按指示開啟檔案或資料夾,而不會恢復任何其他視窗。

拖放時停用編輯器組拆分

新設定 workbench.editor.splitOnDragAndDrop 可防止在拖放編輯器時拆分編輯器組。還可以透過按住 Shift 鍵 (macOS) 或 Alt 鍵 (Windows, Linux) 在拖放操作期間有條件地切換此功能。

資源管理器中的撤消檔案操作

檔案資源管理器現在支援所有檔案操作的撤消重做:刪除、重新命名、複製、移動、新建檔案和新建資料夾。確保焦點在檔案資源管理器中,並觸發撤消重做命令,您的最後一次檔案操作將分別被撤消或重做。請記住,我們為編輯器和檔案資源管理器提供了單獨的撤消堆疊,我們根據焦點選擇撤消哪個。

Selecting undo from the Edit menu while in the Explorer

資源管理器中長時間執行操作的進度

我們現在在檔案資源管理器和狀態列中顯示長時間執行的檔案操作(超過 500 毫秒)的進度。還初步支援取消長時間執行的操作。這在複製大資料夾或從遠端位置下載資源時應該會有所幫助。

Showing progress in the File Explorer

開啟編輯器排序

有一個新設定 explorer.openEditors.sortOrder 用於控制開啟編輯器列表中的排序順序。

值有:

  • editorOrder - 編輯器按編輯器選項卡顯示的相同順序列出(預設)。
  • alphabetical - 編輯器在每個編輯器組內按字母順序排列。

alphabetical 排序僅影響“開啟編輯器”檢視 - 它不會以任何方式“移動選項卡”。

當您開啟大量檔案並且想要匹配相關檔案(例如,hello.component.js 和 hello.component.html)時,這會很有幫助。

Open Editors sorted

可訪問的進度控制

工作臺進度顯示已變得更易於訪問。VS Code 設定了適當的 ARIA 角色,以便螢幕閱讀器可以報告 VS Code 中所有長時間執行操作的進度。大多數螢幕閱讀器預設情況下僅在進度持續超過 10 秒時才宣佈進度。

原始碼管理更改顯示其父資料夾路徑

從原始碼管理檢視開啟的差異編輯器現在將顯示其檔案路徑(當選項卡被停用時)。以前,只顯示檔名,但現在如果更改前和更改後的檔案在同一資料夾中,則會顯示父資料夾。

SCM changes showing parent folder path

新的代理登入對話方塊預設啟用

我們的新代理登入對話方塊現在預設啟用。您可以閱讀我們的以前的發行說明瞭解更多詳細資訊。設定 window.enableExperimentalProxyLoginDialog 可用於啟用舊對話方塊,但我們將在不久的將來刪除此支援。如果您發現新登入對話方塊有問題,請透過提交問題告知我們。

改進的終端環境處理 (Linux, macOS)

當您首次透過 Dock 或啟動器(而不是終端)在 Linux 或 macOS 上啟動 VS Code 時,VS Code 會啟動一個後臺程序來解析您的 shell 環境(由 .bashrc.zshrc 定義或更改)。然後,VS Code 會使用檢測到的所有環境變數,以便從終端或 Dock/啟動器啟動沒有任何區別,這在除錯或執行任務時很重要。

不幸的是,直到此後臺程序執行完畢,VS Code 才打開。為了不長時間阻塞啟動,VS Code 將在 10 秒後開始開啟。在這種情況下,VS Code 現在會通知您它無法解析 shell 環境並提供一個連結以瞭解更多資訊。

Shell environment error after being unable to resolve in a reasonable time

同樣,VS Code 現在會在三秒後顯示警告,表明 VS Code 啟動被阻止以解析您的 shell 環境。

Shell environment warning if it takes longer than 3 seconds

我們正在積極研究改變我們的策略,以避免在後臺解析 shell 環境時阻止 VS Code 啟動,但這隻有在未來的里程碑中才能實現。

該領域的其他值得注意的更改是:

  • 您現在可以在啟動第二個 VS Code 視窗之前從終端定義和更改環境變數,這些變數將正確覆蓋第一次啟動的變數,從而有效地允許按視窗設定環境變數(例如,這允許您在啟動之前透過 nvm 等工具按視窗更改 Node.js 版本)。
  • 即使您在第二個視窗中切換資料夾,在啟動第二個 VS Code 視窗之前從終端設定的環境變數現在也會保留。

改進的工作臺溢位

每當沒有足夠的空間來容納工作臺中的所有檢視時,VS Code 現在將顯示捲軸以平移內容並讓您訪問所有內容。這適用於工作臺中的多個區域,例如側邊欄、編輯器網格等。

Improved workbench overflow

Sash 懸停邊框顏色

您現在可以自定義工作臺中 sash 的邊框懸停顏色 (sash.hoverBorder)。

Sash hover border color

樹:展開模式

新的 workbench.tree.expandMode 設定允許您控制資料夾在樹中的展開方式:使用單擊或雙擊。

macOS Big Sur 更新

由於 Electron 9 的問題,每當您選擇重新啟動以更新時,VS Code 不會自動重新啟動,而是簡單地退出。在下一個 VS Code 版本(應包含 Electron 11)釋出之前,您必須在此情況發生時手動重新啟動 VS Code。在問題 #109728 中閱讀更多內容。

原始碼管理

保留原始碼管理檢視狀態

原始碼管理檢視狀態現在在會話之間保留。即使在退出並重新啟動 VS Code 後,摺疊的樹節點也會保持摺疊狀態。

原始碼管理側邊欄操作

新的 scm.diffDecorationsGutterAction 設定允許您控制單擊編輯器左側的原始碼管理側邊欄裝飾時發生的情況。可能的值是:

  • diff - 單擊時開啟內聯差異預覽檢視(預設)。
  • none - 停用任何操作。

Git:新命令

已向命令面板添加了幾個新的 Git 命令:

  • Git:揀選... - 將特定的提交揀選到您的分支。
  • Git:重新命名 - 對活動檔案執行 Git 重新命名。
  • Git:推送標籤 - 將所有本地標籤推送到遠端。
  • Git:檢出到(分離)... - 以分離模式執行檢出。

Git:新設定

此外,還添加了新的 Git 設定:

  • git.pruneOnFetch - 使 VS Code 在獲取遠端引用時執行 git fetch --prune
  • git.ignoreSubmodules - 您現在可以確保 VS Code 忽略子模組儲存庫中的更改,這在大型 моно倉庫中很有用。
  • git.openAfterClone - 控制在克隆 Git 儲存庫後是否以及如何開啟資料夾:在當前視窗、在新視窗、未開啟任何資料夾時以及透過提示使用者。
  • git.useCommitInputAsStashMessage - 啟用 VS Code 在執行Git:暫存時使用原始碼管理輸入框中的提交訊息作為暫存訊息。
  • git.followTagsWhenSync - 在執行Git:同步時遵循標籤。
  • git.checkoutType - 控制在執行Git:檢出... 命令時顯示哪些引用以及按什麼順序顯示。

Git:暫存前提示儲存檔案

每當您嘗試暫存更改時,VS Code 現在會提示您儲存未儲存的檔案。

Git:更好的已刪除檔案合併衝突差異

已刪除檔案的合併衝突現在具有改進的差異體驗,顯示與刪除相反的分支上檔案的實際更改。

Git:新增遠端時獲取

VS Code 現在會在您新增遠端後立即執行 git fetch,從該遠端獲取所有引用。

Git:分離檢出

現在可以在 VS Code 中以分離模式檢出引用。

Selecting Git: Checkout to (detached)... and then selecting a ref to checkout in detached mode

Git:錯誤時顯示命令輸出

當 Git 命令丟擲錯誤時,您現在可以透過新的顯示命令輸出選項檢視完整的錯誤訊息。

Show command output option in error message

Git:git.api.getRemoteSources 命令的新選項

git.api.getRemoteSources Git API 命令選項現在支援一個可選的 branch?: boolean 屬性,該屬性將使 Git 提示使用者從遠端源中選擇一個分支,前提是遠端源提供程式支援。

此外,該命令現在支援 providerName?: string 選項,允許呼叫者繞過使用者選擇遠端源並直接使用特定提供程式。

除錯

斷點檢視:異常斷點的條件

VS Code 現在支援使用編輯條件上下文選單操作從斷點檢視編輯異常斷點的條件。

目前,只有 Mock Debug 擴充套件支援(假)異常斷點條件,但很快其他除錯擴充套件也會跟進——例如 JavaScript 偵錯程式。

Edit Condition menu item

Exception Condition

異常區域可訪問性

編輯器中的異常資訊區域已變得更易於訪問。除錯時,一旦遇到異常,VS Code 將自動將焦點移動到異常區域,這將使螢幕閱讀器報告異常詳細資訊和堆疊幀。

現在還可以使用 Escape 鍵或異常區域右上角的 X 按鈕關閉異常區域。

使用者介面改進

除錯行顯示在概覽標尺中

當前除錯的行現在顯示在編輯器右側的概覽標尺中。對於此裝飾,我們使用已存在的 editor.stackFrameHighlightBackground 顏色。除此之外,VS Code 使用 editor.focusedStackFrameHighlightBackground 顏色在概覽標尺中顯示當前聚焦的除錯行(聚焦的除錯行是非頂部堆疊幀位置,這些位置是在呼叫堆疊檢視中手動選擇的)。

自動除錯配置改進

以前,我們引入了一項功能,使除錯擴充套件能夠分析當前專案並自動提供除錯配置。這些除錯配置是動態建立的,因此它們不會顯示在 launch.json 配置檔案中。在此里程碑中,我們還在 VS Code 重啟(和重新載入)時保留了最近使用的自動除錯配置,以使整個體驗更流暢。如果自動除錯配置在重啟後不再有效,VS Code 將在除錯啟動後要求您從同一提供程式中選擇新的自動配置。

除錯懸停:底部幫助文字/提示以切換到正常懸停

除錯懸停底部現在有幫助文字,使在除錯時將 Alt 切換到編輯器語言懸停更易於發現。提醒一下,當您除錯時,除錯懸停優先於語言懸停,導致無法看到語言懸停。您可以透過按住 Alt 修飾鍵從除錯懸停切換回語言懸停。只要按下 Alt,就會顯示語言懸停而不是除錯懸停。這使得在除錯時更容易閱讀 Javadoc 描述等懸停。

Debug hover showing the message "Hold Alt key to switch to editor language hover"

除錯控制檯:摺疊相同行

除錯控制檯現在摺疊相同的輸出並顯示出現次數。此功能使得理解重複的程式輸出變得更加容易。

Debug Console collapsing identical lines

launch.json 和 tasks.json 的新變數

已引入以下新變數:

  • ${fileWorkspaceFolder} - 解析為活動 VS Code 編輯器中開啟檔案的 Workspace 資料夾路徑。
  • ${fileDirnameBasename} - 解析為活動 VS Code 編輯器中開啟檔案所在的資料夾名稱。
  • ${pathSeparator} - 解析為作業系統用於分隔檔案路徑元件的字元。

serverReadyAction:按名稱啟動其他除錯配置

serverReadyAction 歷來能夠透過匹配 URL 啟動瀏覽器或 Chrome 除錯。此版本添加了一個新選項,可以透過名稱啟動其他任意配置。例如,在您的 launch.json 中,您可以指定:

"serverReadyAction": {
  "action": "startDebugging",
  "pattern": "listening on port ([0-9]+)",
  "name": "Launch Browser"
}

這允許您在標準 Chrome 除錯配置中傳遞附加選項,並使用其他偵錯程式與 serverReadyAction

暫時停用自動附加

現在可以透過狀態列中的自動附加項或透過除錯:切換自動附加命令暫時停用自動附加。以這種方式停用自動附加僅適用於當前視窗,無需重新啟動終端。它可以以相同的方式重新啟用。

Showing the auto attach Quick Pick with an option that reads "Temporarily disable auto attach in this session"

JavaScript 偵錯程式

可以在偵錯程式的更新日誌中找到完整的更改列表。

斷點診斷工具

有一個新工具旨在幫助排除阻止除錯或阻止斷點繫結的構建或配置問題。要使用它,請在除錯會話執行時執行除錯:為當前會話建立診斷資訊命令。在以後的 VS Code 版本中,此診斷工具的提示將在適當的時候自動出現。

預設可執行檔案位置設定

有一個使用者設定 debug.javascript.defaultRuntimeExecutable,允許您指定 Node.js 或 Chrome 二進位制檔案的預設位置。例如,{ "pwa-chrome": "dev" } 將在您使用 Chrome 型別配置進行除錯時使用 Chrome 的“dev”構建。

請注意,要使用此新選項,您需要確保您的啟動配置是 pwa-node 而不是 node,或者 pwa-chrome 而不是 Chrome。

任務

npm

內建 npm 擴充套件的設定 npm.packageManager 有一個新的預設值:autoauto 值將導致包管理器根據 .lock 檔案以及工作區中用於安裝依賴項的包管理器自動檢測。當檢測到多個 .lock 檔案時,仍將選擇一個包管理器,並會顯示警告指示存在衝突。

刪除最近的任務

任務快速選擇始終在頂部有一個最近任務部分。由於這是一個有價值的位置,您現在可以透過右側的刪除最近使用的任務按鈕從快速選擇中刪除任務來更好地管理您的最近任務。

Remove recent task from Quick Pick menu

擴充套件

在此里程碑中,我們對“擴充套件”檢視和擴充套件詳細資訊頁面進行了一些改進。

擴充套件檢視現在會自動重新整理。例如,安裝擴充套件後,該擴充套件會立即顯示在擴充套件:已安裝列表中。您還可以使用標題欄中的重新整理按鈕手動重新整理檢視。

Extension view auto refresh

主題:GitHub Light

擴充套件的詳細資訊頁面現在會顯示一個上下文選單,其中包含擴充套件的所有操作,就像在“擴充套件”檢視中一樣。

ESLint extension details page showing editor actions

主題:GitHub Light

擴充套件詳細資訊頁面中的功能貢獻選項卡現在顯示擴充套件的啟用事件

Extension Activation Events

主題:GitHub Light

您現在可以同時停用一個擴充套件及其依賴項。當您嘗試停用具有依賴項的擴充套件時,會顯示一個帶有全部停用操作的通知。

Showing option to disable all dependent extensions when disabling an extension

主題:GitHub Light

您可以使用“擴充套件”檢視中擴充套件上下文選單中提供的新增到工作區建議從工作區建議中刪除操作,從工作區建議中新增或刪除擴充套件。

Add to Workspace Recommendations menu item

主題:GitHub Light

當設定同步啟用時,擴充套件建議通知現在會顯示安裝下拉操作,就像在“擴充套件”檢視中一樣。

Extension recommendation notification

我們透過棄用 extensions.showRecommendationsOnlyOnDemand 設定來簡化擴充套件建議的配置。您現在可以使用 extensions.ignoreRecommendations 設定來控制擴充套件建議通知,並使用“擴充套件”檢視的可見性操作預設隱藏建議。

故障排除:擴充套件二分法

VS Code 的真正強大之處在於其擴充套件:主題擴充套件新增漂亮的顏色和圖示,語言擴充套件提供 IntelliSense 並啟用程式碼導航,偵錯程式擴充套件使您能夠深入研究錯誤。有時,問題是否由擴充套件引起,以及如果是,由哪個擴充套件引起,並不明顯。直到今天,您需要停用所有擴充套件,然後逐一重新啟用擴充套件以找到有問題的擴充套件。現在,藉助一項名為擴充套件二分法的新功能,此過程變得容易。它使用二分搜尋演算法快速識別導致問題的擴充套件。本質上,它停用您一半的擴充套件,並要求您檢查您看到的問題。如果問題消失了,那麼有問題的擴充套件肯定在停用擴充套件列表中,而不是在當前啟用擴充套件列表中。此過程會重複進行,直到只剩下一個擴充套件。

您可以透過命令面板中的幫助:開始擴充套件二分法命令 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 開始擴充套件二分法。然後,它會引導您完成重複停用和重新啟用擴充套件的過程。每次重新載入後,您都會被提示確認問題是否仍然存在。

Start Extension Bisect

Extension Bisect prompting during process

擴充套件二分法會反覆要求您檢查問題是否重現。您始終可以透過停止二分法中止,如果您關閉二分法通知,您可以透過幫助:繼續擴充套件二分法命令繼續。

Extension Bisect done

當擴充套件二分法過程完成後,系統會要求您針對該擴充套件提交問題。您也可以在此處保持擴充套件停用。

鍵盤快捷方式編輯器

在此里程碑中,我們對鍵盤快捷鍵編輯器進行了多項改進。

您現在可以透過命令面板,使用右側的配置鍵繫結齒輪按鈕為命令配置鍵繫結。

Configure keybinding for a command from the Command Palette

主題:GitHub Light

您可以從鍵盤快捷鍵編輯器為一個命令新增多個鍵繫結。

Add multiple keybindings

主題:GitHub Light

您現在還可以從搜尋輸入框中按特定鍵盤快捷鍵編輯器列進行篩選。

  • @command:commandId - 按命令 ID 篩選。例如,@command:workbench.action.showCommands
  • @keybinding:keybinding - 按鍵繫結篩選。例如,@keybinding:f1
  • @source:user|default|extension - 按來源篩選。

您可以使用向上向下箭頭在鍵盤快捷鍵編輯器中導航搜尋歷史記錄。

Keyboard Shortcut editor command ID filtering

IntelliSense

來自其他文件的基於單詞的建議

VS Code 支援簡單的基於單詞的建議。當語言服務不可用或語言服務無法計算結果(例如在評論中輸入時)時,它們很有用。在此版本中,VS Code 現在可以配置為建議來自其他開啟檔案的單詞。使用 editor.wordBasedSuggestionsMode 設定 allDocuments 以建議所有開啟檔案中的單詞,使用 matchingDocuments 以建議相同語言的開啟檔案中的單詞(預設),並使用 currentDocument 僅建議當前檔案中的單詞。

Word based suggestions

隱藏內聯詳細資訊

VS Code 中的建議具有在建議旁邊單獨的彈出視窗中顯示的詳細資訊。詳細資訊檢視可以關閉,然後詳細資訊的預覽將與建議內聯顯示。內聯顯示建議的詳細資訊可能會佔用太多空間,因此現在可以透過新的布林設定 editor.suggest.showInlineDetails 停用。

TypeScript 建議顯示路徑

TypeScript 可以提供同時新增 import 語句的完成。但是,當有多個同名符號時,很難選擇正確的完成。此版本使其更簡單,因為自動匯入完成的路徑與標籤一起顯示。

TypeScript show import path

自定義 CodeLens

您現在可以配置 CodeLens 項的字體系列和大小。

Custom CodeLens font

在上面的螢幕截圖中,字型和大小是使用這兩個設定自定義的:

"editor.codeLensFontFamily": "Comic Sans MS",
"editor.codeLensFontSize": 12,

編輯器

使用空格縮排時粘性製表位

如果您更喜歡使用空格縮排程式碼,有一個名為 editor.stickyTabStops 的新設定,它使 VS Code 將前導空格中的游標移動視為類似於製表符。

Sticky Tab Stops

刪除單詞命令

現有的刪除單詞操作將從當前游標位置刪除到單詞開頭(例如 Windows/Linux 上的 Ctrl+Backspace)或刪除到單詞末尾(Windows/Linux 上的 Ctrl+Delete)。現在有一個新命令,它將刪除游標下的整個單詞,名為刪除單詞

差異編輯器中的自動換行

差異編輯器的並排檢視和內聯檢視現在都支援自動換行。通常,差異編輯器將遵循與自動換行相關的編輯器設定。對於預設自動換行的 Markdown 檔案,差異編輯器也將自動換行:

Word wrap in the diff editor

如果您希望差異編輯器永不換行或始終換行,您可以使用新的 diffEditor.wordWrap 設定並將其配置為 "on""off"(預設值為 "inherit",這意味著差異編輯器繼承編輯器換行設定)。

程式碼片段

隱藏擴充套件片段

現在可以從 IntelliSense 中隱藏擴充套件貢獻的片段。此功能在執行插入片段時可從“插入片段”選擇器中獲得。找到您想要隱藏的擴充套件片段,然後選擇右側的眼睛圖示。

Hide Extension Snippet

隱藏的片段不會顯示在 IntelliSense 中,但仍可以透過插入片段使用。最後,使用“設定同步”時,隱藏的片段首選項將在您的裝置之間同步。

無字首片段

在編寫片段時,您現在可以省略 prefix 屬性。沒有字首的片段不會顯示在 IntelliSense 中,但可以透過插入片段使用。

整合終端

終端配置支援

您現在可以透過在終端下拉選單中選擇配置終端設定來修改終端設定。

Configure Terminal Settings

鍵繫結管理

預設情況下,鍵繫結會分派給工作臺而不是終端,如 terminal.integrated.commandsToSkipShell 設定中所指定。當用戶輸入與這些命令之一對應的鍵繫結時,新通知會通知使用者,並提供配置相關設定的選項。

要將大多數鍵繫結傳送到終端而不是工作臺,您可以設定 terminal.integrated.sendKeybindingsToShell

Send Keybindings to Shell

語言

Markdown 內聯智慧選擇

使用以下命令在 Markdown 文件中擴充套件和收縮選擇:

  • 擴充套件:⌃⇧⌘→ (Windows、Linux Shift+Alt+Right)
  • 收縮:⌃⇧⌘← (Windows、Linux Shift+Alt+Left)

選擇適用於斜體、粗體、內聯程式碼塊和連結。

Smart select within a Markdown document expands from the content within an inline Markdown type to include the Markdown symbols.

TypeScript 4.1

此版本的 VS Code 包含 TypeScript 4.1.2。此主要的 TypeScript 更新帶來了對許多新語言功能的支援——包括模板字面量型別和對 React 17 工廠的支援——以及改進了 JavaScript 和 TypeScript 的語言工具。一如既往,它還包含許多錯誤修復。

您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.1 的更多資訊。

初步支援 JSDoc @see 標籤

JSDoc @see 標籤允許您在 JSDoc 註釋中引用其他函式和類。下面的示例顯示 crash 函式引用來自另一個檔案的 WrappedError 類:

// @filename: somewhere.ts
export class WrappedError extends Error { ... }

// @filename: ace.ts
import { WrappedError } from './somewhere'

/**
 * @see {WrappedError}
 */
function crash(kind) {
    throw new WrappedError(kind);
}

VS Code 現在將在執行重新命名時包含基本的 @see 引用。您還可以對 @see 標籤的內容執行轉到定義,並且 @see 標籤也會顯示在引用列表中。

我們計劃在未來版本中繼續改進對 @see 標籤的支援。

IntelliSense 行為和型別檢查的新設定

有兩個新設定控制 JavaScript 和 TypeScript 檔案中的 IntelliSense 和型別檢查行為,這些檔案不是顯式 tsconfig 或 jsconfig 專案的一部分。

  • js/ts.implicitProjectConfig.strictNullChecks 設定啟用嚴格空檢查。它預設值為 false

    如果您正在使用 TypeScript,您肯定希望啟用嚴格空檢查,因為它可以捕獲許多常見的程式設計錯誤。

    嚴格空檢查在 JavaScript 中也很有用。啟用嚴格空檢查後,懸停和 IntelliSense 資訊將顯示哪些型別可以是 undefinednull。如果您在 JavaScript 中啟用型別檢查,VS Code 還可以使用嚴格空檢查來捕獲一些常見的程式設計錯誤。

  • js/ts.implicitProjectConfig.strictFunctionTypes 設定啟用嚴格函式型別。它預設值為 true

    嚴格函式型別更難以解釋,但通常也能改善 IntelliSense 並捕獲一些程式設計錯誤。

請記住,如果檔案是 jsconfig 或 tsconfig 專案的一部分,這些設定都將被覆蓋。

重新命名其他隱式 JS/TS 專案設定

JavaScript 和 TypeScript 的其他隱式專案設定已重新命名,以使其更準確:

  • javascript.implicitProjectConfig.checkJs -> js/ts.implicitProjectConfig.checkJs
  • javascript.implicitProjectConfig.experimentalDecorators -> js/ts.implicitProjectConfig.experimentalDecorators

這些設定被重新命名,因為它們適用於不是 jsconfig 或 tsconfig 專案一部分的 JavaScript 和 TypeScript 檔案。以前的設定名稱表明它們只適用於 JavaScript 檔案。

HTML

新的格式化程式設定

HTML 擴充套件使用 JSBeautify 作為格式化程式。更新到最新版本的 JSBeautify (1.13) 帶來了一些新的格式化程式設定:

  • html.format.wrapAttributesIndentSize:當在 html.format.wrapAttributes 中使用 force alignedaligned multiple 時,或使用 null 以使用預設縮排大小時的對齊大小。
  • html.format.templating:遵守 django、erb、handlebars 和 php 模板語言標籤。
  • html.format.unformattedContentDelimiter:將文字內容在此字串之間保持在一起。

最後一個設定允許您設定一個標籤來標記不應格式化的區域:

"html.format.unformattedContentDelimiter": "<!-- DoNotFormat -->"

Unformatted tag example

onTypeRename 的新設定名稱

當匹配的結束標籤被修改時編輯標籤的鍵入時重新命名功能現在稱為連結編輯。啟用連結編輯的命令是開始連結編輯 (⇧⌘F2 (Windows, Linux Ctrl+Shift+F2)),Escape 停用連結編輯模式。

啟用它的設定現在是:

"editor.linkedEditing": true

對擴充套件的貢獻

遠端開發

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

1.52 版的主要功能包括:

  • Linux 遠端上的自動埠轉發。
  • 在本地安裝遠端擴充套件的新命令。
  • 您現在可以在容器中開啟儲存庫時選擇分支。
  • 透過在後臺安裝擴充套件來改進伺服器啟動效能。

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

Notebook

VS Code 團隊正在繼續致力於原生支援筆記本並改進其使用者體驗和效能。

改進大文字輸出渲染

如果內容過大,原生 Notebook 編輯器現在將截斷輸出,以確保 UI 始終響應。您仍然可以在文字編輯器中開啟輸出的完整原始內容。

Large Output Rendering Optimization

擴充套件創作

檔案裝飾 API

FileDecorationProvider API 現已最終確定,可供任何擴充套件使用。透過此 API,可以將環境資訊新增到檔案,SCM 和資源管理器中顯示的錯誤裝飾也使用此 API。

撤消資源更改

資源管理器操作(如建立檔案、重新命名檔案或刪除檔案)會引發事件,允許參與,例如 onWillCreateFilesonWillRenameFilesonWillDeleteFiles。此版本增加了對撤消此類資源管理器操作的支援,您應該知道在撤消操作時不會觸發上述事件。

新主題顏色

  • statusBarItem.errorBackground:狀態列錯誤項背景顏色。錯誤項從其他狀態列條目中突出顯示,以指示錯誤情況。
  • statusBarItem.errorForeground:狀態列錯誤項前景色。錯誤項從其他狀態列條目中突出顯示,以指示錯誤情況。

錯誤背景顏色

主題作者現在可以利用新的主題顏色來顯示編輯器中的錯誤。編輯器錯誤、警告和資訊現在可以透過以下方式設定樣式:

  • editorError.background
  • editorWarning.background
  • editorInfo.background

Error background colors

更新的 Codicons

我們已將以下新圖示新增到我們的 codicon 庫中:

  • check-all
  • circle-large-filled
  • circle-large-outline
  • pass-filled
  • pinned-dirty

Codicons updates

對檢視容器和檢視的 codicons 支援

您現在可以使用 codicons 作為檢視容器和檢視的圖示。示例:

"views": {
      "explorer": [
        {
          "id": "npm",
          "name": "NPM Scripts",
          "icon": "$(code)",
          "visibility": "hidden"
        }
      ]
  }

有關可用圖示的列表,請參閱圖示列表

連結編輯範圍提供程式

以前稱為 OnTypeRenameProvider 的功能現在作為 LinkedEditingRangeProvider 釋出為公共 API。

對於文件中的給定位置,LinkedEditingRangeProvider 將具有相同內容的範圍連結起來。對其中一個範圍的更改可以應用於所有其他範圍。

這可以在 HTML 中看到。編輯起始標籤的名稱時,結束標籤也會自動更新。

FoldingRangeProvider.onDidChangeFoldingRanges

FoldingRangeProvider.onDidChangeFoldingRanges 已成為公共 API。它是一個可選事件,用於指示提供程式的摺疊範圍已更改。

使用查詢篩選器開啟鍵盤快捷鍵編輯器

擴充套件現在可以使用命令 workbench.action.openGlobalKeybindings 在開啟鍵盤快捷鍵編輯器時傳遞查詢文字。

vscode.commands.executeCommand('workbench.action.openGlobalKeybindings', 'query');

fs.isWritableFileSystem

新的 fs.isWritableFileSystem API 允許您檢查給定檔案系統是否支援寫入。例如,要檢查 URL 為 example:/path/to/file 的文件是否在可寫檔案系統上:

switch (vscode.fs.isWritableFileSystem('example')) {
  case true:
    // The `example` filesystem supports writing.
    // Keep in mind the permissions or other issues may still prevent
    // a file from being written.
    break;

  case false:
    // The `example` filesystem does not support writing (it is readonly).
    break;

  case undefined:
    // VS Code does not know about the `example` filesystem
    break;
}

自定義編輯器可以使用 fs.isWritableFileSystem 來確定它們是否顯示只讀 UI。

Markdown 樹工具提示 API

將 Markdown 用於 TreeItem 上的 tooltip 的 API 已最終確定。您可以在建立 TreeItem 時將 tooltip 設定為 Markdown 字串,或者,如果您的 Markdown 可能需要額外的時間計算,您可以使用新的 TreeDataProvider.resolveTreeItem 來設定工具提示。

Markdown tree tooltip

TreeItem 突出顯示 API

期待已久的 TreeItemLabel API 已最終確定。此 API 可用於在 TreeItemlabel 上設定突出顯示。您可以在“引用”檢視中看到它的實際應用。

Tree item highlights

listDoubleSelection 和 listMultiSelection

現在可以在貢獻的樹檢視中使用上下文值 listDoubleSelectionlistMultiSelection 進行命令啟用。

檢視歡迎內容按鈕啟用

您現在可以為檢視歡迎內容部分設定啟用上下文子句。

View welcome content button enablement

建議的擴充套件 API

每個里程碑都會帶來新的提議 API,擴充套件作者可以嘗試使用它們。一如既往,我們希望得到您的反饋。要嘗試提議的 API,您需要執行以下操作:

  • 您必須使用 Insiders 版本,因為提議的 API 經常更改。
  • 您的擴充套件的 package.json 檔案中必須包含以下行:"enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts 檔案複製到您專案的源位置。

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

狀態列條目背景顏色 API

我們建議為 StatusBarItem 新增一個新屬性 backgroundColor,以設定狀態列條目的背景顏色。目前僅支援 statusBarItem.errorBackground,以避免狀態列看起來過於花哨。我們可能會在未來擴充套件對更多顏色的支援。

Status bar error in red

此新 API 的用例是使擴充套件能夠在狀態列中指示錯誤情況。例如,ESLint 擴充套件可能會決定使用此顏色來提醒使用者 ESLint 尚未為工作區啟用。

更多可主題化的圖示

產品圖示主題的工作已恢復。產品圖示主題是一項提議的功能,允許您使用一組自定義圖示為 VS Code 設定樣式。它適用於內建檢視中的所有圖示,以及使用 Codicon 庫中圖示的所有擴充套件。產品圖示主題將在下一個里程碑中公開發布。

已新增更多圖示名稱,特別是針對除錯、擴充套件和終端檢視,以及設定和筆記本編輯器。

檢視更新的圖示列表

移除提議的日誌記錄 API

大約一年前曾有一個日誌記錄 API(LogLevelonDidChangeLogLevel)的提案,現已移除。擴充套件可以使用輸出通道 API 進行日誌記錄,或者,當使用自定義日誌記錄器時,使用 ExtensionContext#logUri

初步新增提議的測試 API

我們正在研究 VS Code 中的測試,並且該 API 的第一個版本現在出現在 vscode.proposed.d.ts 中。請閱讀連結的問題以獲取更多上下文,如果您有任何意見,請參與。我們預計將比觀察者部分更早地釋出 API 的提供程式部分。

新的上下文鍵運算子

<<=>>= 現在可用於上下文鍵表示式。這是一個貢獻命令的示例,該命令僅在開啟兩個或更多工作區資料夾時出現:

"contributes": {
  "menus": {
    ...
    "when": "workspaceFolderCount >= 2"
    ...
  }
}

語言伺服器協議

語言伺服器協議 3.16 版本的功能集已最終確定,並可在LSP 協議站點上獲取。3.16 版本的主要亮點是:

詳細的更改日誌還包含對現有請求的所有次要改進。

除錯介面卡協議

支援條件異常

在此里程碑中,2020 年 9 月的條件異常提案已最終確定,現在是除錯介面卡協議 (DAP) 1.43 版的一部分。

協議新增透過新的可選 filterOptions 屬性擴充套件了 setExceptionBreakpoints 請求,用於設定異常過濾器及其條件。除錯介面卡可以透過 supportsExceptionFilterOptions 功能宣佈其支援條件異常功能。

StackTraceResponse.totalFrames 的語義已澄清

除錯介面卡協議中 supportsDelayedStackTraceLoading 功能的描述似乎表明,為了使延遲堆疊幀載入工作,介面卡必須用可用堆疊幀的正確數量填充 StackTraceResponsetotalFrames 欄位。然而,對於某些偵錯程式或執行時,此值不容易計算,這使得支援延遲堆疊幀載入變得昂貴。

由於堆疊幀總數從未在 UI 中顯示,我們澄清了 totalFrames 的原始 - 有些不足的 - 語義描述:除錯介面卡現在可以自由地為 totalFrames 提供一個大(不正確)值,並且客戶端應該準備好接收比請求的幀更少的幀,並將其用作已到達堆疊末尾的指示。

RunInTerminalRequestArguments.cwd 的語義已澄清

由於 runInTerminal 請求的 cwd 屬性(“當前工作目錄”)是非可選的,因此無法省略該屬性以表達“不關心”的情況。例如,如果除錯介面卡知道“cwd”已經正確,並且無需客戶端生成“更改目錄”命令,則 DAP 規範未描述如何實現此目的。

為了解決這個缺點,我們透過補充以下內容澄清了 DAP 規範:客戶端僅在 cwd 屬性包含非空路徑時才需要執行更改目錄命令。

工程

為問題報告器和程序資源管理器啟用沙盒和上下文隔離

為了從啟用 Electron 的沙盒上下文隔離中獲得更多反饋,我們將其推送到我們的程序資源管理器和問題報告器視窗啟用。此配置最終也將成為主 VS Code 視窗的預設配置。

  • sandbox 已啟用
  • contextIsolation 已啟用
  • 資源透過自定義 vscode-file 方案(而不是 file)提供服務。

NPM 依賴項的安全供應鏈

我們透過利用原始碼掃描和測試服務,改進了我們的 NPM 依賴項供應鏈,以提高我們的構建管道安全性和可靠性。

Linux ARM 儲存庫

VS Code for ARM 架構(aarch64armhf)現在釋出在以下 Linux 儲存庫中:

新命令

命令 命令 ID
在差異編輯器中聚焦主要側邊 workbench.action.compareEditor.focusPrimarySide
在差異編輯器中聚焦次要側邊 workbench.action.compareEditor.focusSecondarySide
在差異編輯器中聚焦另一側 workbench.action.compareEditor.focusOtherSide

文件

遠端開發

有幾種新的方式可以瞭解 VS Code 遠端開發:

Learn module for Docker and VS Code

GitHub 整合

Learn module for GitHub and VS Code

我們如何開放地製作 VS Code

觀看開發人員 Alex Ross 和 Benjamin Pasero 在 GitHub Universe 上的會議錄影我們如何開放地製作 VS Code,瞭解我們的團隊如何將 VS Code 構建為開源並在 GitHub 上與社群協作。

在 Chromebook 上使用 VS Code

您知道您可以在 Chromebook 上執行 VS Code 嗎?我們認為這對學生和初級程式設計師來說是一個很好的選擇。透過我們的部落格文章在 Chromebook 上學習 VS Code,瞭解如何在 Chrome OS(透過 Crostini)上設定 VS Code,其中包含使用 JavaScript 和 Python 開始編碼的說明。

值得注意的修復

  • 39543:在拆分 json 設定編輯器的概覽標尺中突出顯示匹配的單詞。
  • 67905:同時安裝多個擴充套件 vsix 檔案
  • 83187:一個配置中的環境變數洩漏到另一個配置中。
  • 88703:Settings UI 中未報告 URI 格式欄位上的錯誤
  • 97202:${config} 變數在多根工作區啟動配置中解析失敗。
  • 98041:Emmet 忽略“評估數學表示式”上的選擇
  • 107320:當安裝包含 main 的擴充套件時,不應出現主題選擇器。
  • 107461:除錯控制檯上的歷史記錄未保留
  • 109111:除錯控制檯不遵守使用者設定。
  • 110077:資料斷點未顯示在斷點檢視中。
  • 110426:支援從 stdin 讀取的 --diff 引數
  • 110738:允許擴充套件為自定義檔案系統方案設定編輯器標籤
  • 110775:Shift 右鍵單擊的“永久刪除”選項已消失
  • 110854:支援已開啟編輯器中檔案系統提供程式的只讀更改
  • 110905:CLI:除非強制,否則如果擴充套件已安裝,則不訪問 Marketplace

感謝

最後但同樣重要的是,衷心感謝以下本月為 VS Code 做出貢獻的人們:

對我們問題跟蹤的貢獻

vscode 的貢獻

language-server-protocol 的貢獻

vscode-languageserver-node 的貢獻

vscode-eslint 的貢獻

vscode-js-debug 的貢獻

vscode-html-languageservice 的貢獻

node-jsonc-parser 的貢獻

vscode-generator-code 的貢獻

vscode-vsce 的貢獻