🚀 在 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 懸停邊框顏色

您現在可以自訂工作台中 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 按鈕關閉例外狀況區域。

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

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

鍵盤快速鍵編輯器

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

您現在可以從命令面板為指令組態按鍵繫結,透過右側的組態按鍵繫結齒輪按鈕。

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,

編輯器

空格縮排的黏性 Tab 停駐點

如果您偏好使用空格縮排您的程式碼,則有一個稱為 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 中,但仍可透過 插入程式碼片段 使用。最後,當使用設定同步時,隱藏的程式碼片段偏好設定將會在您的裝置之間同步。

沒有前置字元的程式碼片段

撰寫程式碼片段時,您現在可以省略 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 設定啟用了 嚴格的 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

用於 TreeItemtooltip 的 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 上設定 VS Code (透過 Crostini),其中包括開始使用 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