🚀 在 VS Code 中取得

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 個開啟的錯誤。此外,我們關閉了 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

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

我們新的 Proxy 登入對話方塊現在預設為啟用。您可以閱讀我們先前的版本資訊以取得更多詳細資料。設定 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.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:選取 Cherry Pick... - 選取特定的提交到您的分支。
  • 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:Stash 時,使用原始檔控制輸入方塊中的提交訊息作為儲藏訊息。
  • 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 按鈕來關閉例外狀況區域。

UI 改善

在概觀尺規中顯示偵錯的行

目前偵錯的行現在會顯示在編輯器右側的概觀尺規中。對於此裝飾項目,我們使用已存在的 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 編輯器中開啟的檔案的工作區資料夾路徑。
  • ${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 並啟用程式碼導覽,偵錯工具擴充功能可讓您深入探究錯誤。有時,不明顯問題是否是由擴充功能所造成,如果是,則是由哪個擴充功能所造成。直到今天,您需要停用所有擴充功能,然後逐一重新啟用擴充功能才能找到有問題的擴充功能。使用稱為擴充功能二分的新功能,此程序現在變得容易。它使用二元搜尋演算法來快速識別造成問題的擴充功能。基本上,它會停用您一半的擴充功能,並要求您檢查您看到的 issue。如果問題已消失,則錯誤的擴充功能必定在已停用的擴充功能清單中,而不是在目前已啟用的擴充功能清單中。重複此程序,直到只剩單一擴充功能。

您可以透過命令選取區中的說明:啟動擴充功能二分命令來啟動擴充功能二分 (⇧⌘P (Windows、Linux Ctrl+Shift+P))。然後它會引導您完成重複停用和重新啟用擴充功能的程序。在每次重新載入之後,系統都會提示您確認問題是否仍然存在。

Start Extension Bisect

Extension Bisect prompting during process

擴充功能二分會重複要求您檢查問題是否正在重現。您隨時可以透過停止二分來中止,如果您關閉二分通知,您可以透過說明:繼續擴充功能二分命令來繼續。

Extension Bisect done

當擴充功能二分程序完成時,系統會要求您針對擴充功能提交 issue。您也可以從這裡讓擴充功能保持停用。

鍵盤快速鍵編輯器

我們在此里程碑中對「鍵盤快速鍵」編輯器新增了幾項改進。

您現在可以從命令選取區,透過右側的設定鍵盤快速鍵齒輪按鈕,為命令設定鍵盤快速鍵。

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 在前導空格中移動游標時,行為模式更像使用 Tab 鍵。

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 中,但仍然可以透過「插入程式碼片段」使用。最後,當使用設定同步時,隱藏的程式碼片段偏好設定將會在您的裝置之間同步。

沒有前綴的程式碼片段

在撰寫程式碼片段時,您現在可以省略前綴屬性。沒有前綴的程式碼片段不會顯示在 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 設定啟用 嚴格的 null 檢查。預設值為 false

    如果您正在使用 TypeScript,您絕對會想要啟用嚴格的 null 檢查,因為它可以捕捉到許多常見的程式設計錯誤。

    嚴格的 null 檢查在 JavaScript 中工作時也很有幫助。當啟用嚴格的 null 檢查時,hover 和 IntelliSense 資訊會顯示哪些型別可以是 undefinednull。如果您在 JavaScript 中啟用型別檢查,VS Code 也可以使用嚴格的 null 檢查來捕捉一些常見的程式設計錯誤。

  • 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 的新設定名稱

當修改標籤的匹配結束標籤時,用於編輯標籤的「On Type Rename」功能現在稱為「連結編輯」。啟用連結編輯的命令是「開始連結編輯」( ⇧⌘F2 (Windows, Linux Ctrl+Shift+F2)),而 Escape 則停用連結編輯模式。

啟用它的設定現在是

"editor.linkedEditing": true

擴充功能貢獻

遠端開發

遠端開發擴充功能的工作仍在繼續進行中,這些擴充功能可讓您使用容器、遠端機器或 適用於 Linux 的 Windows 子系統 (WSL) 作為功能完善的開發環境。

1.52 版本的功能重點包括

  • Linux 遠端上的自動埠轉發。
  • 新的命令可在本機安裝遠端擴充功能。
  • 您現在可以在容器中開啟儲存庫時選取分支。
  • 透過在背景安裝擴充功能來改善伺服器啟動效能。

您可以在 遠端開發版本資訊中了解新的擴充功能和錯誤修正。

筆記本

VS Code 團隊正在 持續進行 對筆記本的原生支援工作,並改進其 UX 和效能。

改善大型文字輸出渲染

如果原生筆記本編輯器的輸出內容太大,現在會截斷輸出,以確保 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

支援檢視容器和檢視的 codicon

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

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

請參閱 圖示清單 以取得可用圖示的清單。

連結編輯範圍提供者

以前稱為 OnTypeRenameProvider 的功能現在已成為公開 API,即 LinkedEditingRangeProvider

對於文件中的給定位置,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

用於 TreeItem 上的 tooltip 的 Markdown 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 儲存庫

適用於 ARM 架構 (aarch64armhf) 的 VS Code 現在發佈在以下 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:設定 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 的貢獻