官宣|VS Code 1.59 釋出!Terminal 可以跨視窗移動了!

MicrosoftReactor發表於2021-08-06

歡迎使用 2021 年 7 月版的 Visual Studio Code。我們希望您會喜歡此版本中的許多更新與改進,以下是其中的一些高亮:

  • 擴充套件檢視的改進 - 豐富的擴充套件詳細資訊懸停,新的執行狀態標籤頁。
  • 設定編輯器驗證 - 快速查詢到物件設定的編輯錯誤。
  • 拖放終端 - 將終端跨視窗移動到編輯器和皮膚區域。
  • 擴充套件的主題定製 - 一次定製多個顏色主題。
  • Jupyter 筆記本的內建支援 - 直接在 VS Code 中開啟 .ipynb 檔案。
  • 筆記本 UI 的改進 - 顯示摺疊單元格的第一行,每個單元格的撤消/重做。
  • 測試 API 的最終確定 - 原生支援 VS Code 中使用測試資源管理器執行測試。
  • 除錯反彙編檢視預覽 - 在 VS Code 中顯示反彙編的 C++ 程式碼。
  • 實時預覽擴充套件 - VS Code 中的實時的 HTML 預覽,支援 JavaScript 除錯。
  • 遠端 - 容器 devcontainer CLI - 用於開發容器的命令列介面。

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

更多關於VS Code 的資料請訪問微軟 MS Learn 平臺:http://aka.ms/vscodelearn

內部搶先版 :想更先一步體驗新功能嗎?您可以下載每晚的 Insiders 版本,並在最新更新可用時立即試用。

工作臺


擴充套件外掛

改進了調整大小後的擴充套件檢視。在下面的動圖中,你可以看到預設寬度的擴充套件檢視顯示了所有詳細資訊(以前未顯示圖示、評分和安裝計數)。當它縮小時,會顯示較小的擴充套件圖示,當其寬度進一步減小時,圖示和評分將被隱藏。
在這裡插入圖片描述

擴充套件檢視現在會顯示自定義懸停資訊。這個豐富的懸停包括擴充套件的完整描述和其他有用的資訊,例如為什麼禁用或推薦擴充套件。

file

您現在可以在外掛皮膚中看到更多的外掛執行狀態,例如其啟用時間、是否在啟動時啟用,以及擴充套件編輯器中新引入的 執行時狀態 選項卡中是否生成了任何警告或錯誤。當然,你也可以懸停在外掛試圖上看到部分的執行狀態資訊。
file
外掛皮膚的詳細資訊標籤頁現在會顯示分類資訊,資源連結,和諸如外掛釋出時間和更新時間的其他資訊。選擇某個分類會顯示當前分類下的所有外掛。

設定編輯器

設定編輯器現在支援物件驗證功能。驗證會涵蓋直接編輯 JSON 檔案時可能引入的型別錯誤。
file

非編輯模式下,陣列設定現在具有了拖放功能的支援。

此外,將 uniqueItems 屬性設定為 true 的列舉陣列設定現在僅顯示剩餘選項,而不是下拉選單中的所有選項。
file

設定編輯器現在還支援多行字串設定,其中值呈現在多行文字區域而不是單行輸入框中:
file

擴充套件的主題自定義語法

顏色自定義設定允許使用者自定義當前主題的顏色:

workbench.colorCustomizations
editor.tokenColorCustomizations
editor.semanticTokenColorCustomizations

以下語法可以用來一次自定義多個主題的顏色:

"workbench.colorCustomizations": {
        "[Abyss][Red]": {
            "activityBar.background": "#ff0000"
        },
        "[Monokai*]": {
            "activityBar.background": "#ff0000"
        }
    },

您可以列出多個主題,或者,在名稱的開頭或者結尾使用*萬用字元來選取多個主題。

Jupyter筆記本檔案的支援

本月,我們把支援 *.ipynb 檔案的程式碼從 Jupyter 筆記本 外掛吸收為了內建外掛。這意味著你現在可以在一個全新安裝的 VS Code 環境中得到 Jupyter 筆記本的原生支援。你甚至都不用安裝 Jupyter 的外掛。需要注意的是,如果你想要執行 ipywidgets 或者其他複雜渲染型別的程式碼單元或者檢視執行結果時,你依然需要完整安裝 Jupyter 外掛。

筆記本佈局的改進

我們在本次迭代中對筆記本佈局進行了一些改進:

  • 我們現在將會在摺疊時渲染程式碼單元的第一行。
  • 當視窗寬度不足以呈現所有主要操作時,筆記本編輯器工具欄上的操作將移至溢位區。
  • notebook.undoRedoPerCell 的預設值現在更改為 true
    file
    我們還更新了程式碼單元格的預設樣式,顯示背景顏色以幫助區分單元格。主題可以使用 notebook.cellEditorBackground 來自定義這個顏色。
    file
    最後,您現在可以使用 notebook.globalToolbarShowLabel 設定在筆記本工具欄上切換文字標籤:
    file

"複製相對路徑" 配置路徑分隔符

在呼叫 "複製相關路徑" 操作時,新設定 explorer.copyRelativePathSeparator 允許顯式設定使用路徑分隔符。以下為可用選項:

  • Auto (預設) - 使用作業系統特定的路徑分隔符
  • / - 使用斜線作為路徑分隔符
  • \\ - 使用反斜槓作為路徑分隔符

跨編輯器組共享檢視狀態

新增了一個新設定 workbench.editor.sharedViewState 以配置編輯器檢視狀態(例如,編輯器中的滾動位置)在編輯器組之間共享的方式。

預設情況下,此設定被禁用以保留當前設定。如果您在靠邊開啟編輯器並稍後關閉該編輯器組,只是為了再次開啟編輯器到靠邊,則不會恢復檢視狀態,因為您正在開啟一個新的編輯器組。但是,當您啟用此設定時,除非為編輯器組找到更具體的檢視狀態,否則將在所有編輯器組中保留並使用最新的編輯器檢視狀態。
在這裡插入圖片描述

編輯器


在不同的摺疊範圍之間切換

以下的新指令可以將游標位置設定為相應的摺疊:

  • 轉到下一個摺疊 ( editor.gotoNextFold )
  • 轉到上一個摺疊 ( editor.gotoPreviousFold )
  • 轉到父級摺疊 ( editor.gotoParentFold

這些命令目前沒有預設鍵繫結,但是你可以通過以下方法新增自己的鍵盤快捷鍵:
首選項:開啟鍵盤快捷鍵(kb(workbench.action.openGlobalKeybindings))

自動摺疊 Import 語句

通過設定 editor.foldingImportsByDefault 來自動摺疊 Import 語句。
當檔案被開啟後,摺疊的狀態將會被儲存。

TypeScript,JavaScript,Java,C#,C++ 和其他具備摺疊範圍提供程式的程式語言都支援這項新功能。注:摺疊範圍提供程式特指將 Import 語句標註為 FoldingRangeKind.Imports 的提供程式。

選擇項的種子搜尋字串

Find Widget 設定 editor.find.seedSearchStringFromSelection 已支援從非空選擇中播種搜尋字串。預設情況下,當顯示小部件時,編輯器將使用以下兩項作為搜尋關鍵詞:

  1. 選擇項。
  2. 空選擇周圍的單詞。

內聯建議的改進

我們改變了內聯建議的呈現方式。這不僅修復了許多錯誤,而且還使自動換行識別了內聯建議。

此外,現在支援了非尾隨位置的多行內聯建議。

嵌入提示的改進

我們還改變了嵌入提示的呈現方式。通過使用與內聯建議相同的機制,嵌入提示現在也被用於自動換行。

這種機制還實現了嵌入提示周圍的單獨游標停靠。

終端


在視窗之間拖拽終端

現在,您可以任意地從標籤頁或一個視窗的編輯區域,拖拽終端到標籤頁,編輯區域,或者另一個視窗的皮膚。
file

子程式跟蹤和關閉警告

當使用者嘗試關閉一個有子程式的終端時,terminal.integrated.confirmOnExit 和新的設定 terminal.integrated.confirmOnKill會警告使用者。預設情況下,這僅影響編輯器區域中的終端,但使用者可以配置為顯示所有的(皮膚區域中)終端警告。

設定所提供的終端配置檔案為預設

現在使用者可以將外掛所提供的終端配置檔案設為預設的配置檔案。
file

下劃線和刪除線支援

終端現在支援下劃線和刪除線屬性。例如,用可以可以配置git來使用這些新屬性:

file

上述的例子使用了下列 .gitconfig 引數:

[color "status"]
  added = green bold
  changed = red bold strike
  untracked = cyan
  branch = yellow black bold ul

編輯區域靠邊建立終端

現在,使用者可以在活動編輯區域使用新指令workbench.action.createTerminalEditorSide 來建立一個靠邊新的終端。

活動終端標籤頁指示器

主題現在可以使用主題鍵terminal.tab.activeBorder設定垂直線的顏色,用以指示活動的終端選項卡。
file
如果沒有設定 terminal.tab.activeBorder,顏色將回退到tab.activeBorder

禁用終端標籤頁動畫圖示

terminal.integrated.tabs.enableAnimation會禁用終端標籤頁動畫圖示。如果是針對任務而不是微調器,播放按鈕會被使用:
file

除錯

改進了編輯器標題區域內的 播放/除錯 按鍵

2月的版本中,我們引入了一個下拉按鈕,用以在編輯器標題區域的中央(緊湊)位置對執行和除錯命令進行分組。根據一些使用者反饋,我們嘗試通過記憶上次執行的操作來改進下拉按鈕。下拉按鈕現在將會擁有兩個單擊區域,一個用於預設動作(左),另一個用於下拉(右),其中,所選執行操作將被記憶並存為新的預設值。

請注意:

  • 如果只有一個執行或除錯操作,則會省略下拉選單。
  • 如果有多個執行或除錯操作,所有操作都會出現在下拉選單中,並且預設操作設定為下拉選單中的第一個操作(前提是沒有記住的操作)。
  • VS Code 重新啟動時,會為特定工作區保留預設操作;它會為編輯器內容保留。

對擴充套件外掛的貢獻

實時預覽

實時預覽擴充套件外掛本月出現了一些令人興奮的新功能!這包括:

  • 內建 JavaScript 偵錯程式相容性的外部預覽。
  • 請使用 Live Preview: Show Debug Preview 來嚐鮮使用!
  • 對嵌入式瀏覽器的改進,例如 "在頁面中查詢" 的支援和快速訪問 webvivew DevTools。
  • 檔案系統監視自動生成檔案。
  • 期待更多!

要檢視有關本月進度的更多詳細資訊,請參閱擴充套件的發行說明
在這裡插入圖片描述
在這裡插入圖片描述

GitHub 拉取請求和問題

GitHub 拉取請求和問題 擴充套件外掛的工作仍在繼續,它允許您響應、建立和管理拉取請求和問題。本月重點對問題的 "開始工作" 進行了擴充套件,讓您可以處理當前開啟的儲存庫之外的問題。

要了解所有新功能和更新,您可以檢視 0.29.0 版擴充套件的完整變更日誌

Jupyter

Jupyter擴充套件外掛的工作仍在繼續。要了解所有的新功能和更新,您可以檢視 7月版本的完整更新日誌

互動視窗

Jupyter 互動視窗提供了另一種構建和使用 Jupyter 筆記本的方法,使用文字檔案而不是筆記本介面。上個月,我們預覽了 Jupyter 互動式視窗的升級版本,現在我們提供了具有更深入的工作臺整合,包括對主題的支援、自定義鍵繫結、片段、與擴充套件的相容性等!非常感謝我們的使用者通過 GitHub 問題提供有關預覽體驗版的反饋。內建互動視窗現在已經成為了 1.59 版本中的預設介面。之前的介面在 "jupyter.enableNativeInteractiveWindow": false後將仍然可用,並會在即將釋出的版本中刪除。我們期待您的反饋
在這裡插入圖片描述

逐行執行

我們一直致力於支援 Jupyter 筆記本中的 "逐行執行" 功能。此功能本質上是一種簡化的除錯模式,可讓您逐行執行單元程式碼,而無需任何複雜的除錯 UI。這依然是實驗性的,您可以通過設定 "jupyter.experimental.debugging": true,在您選擇的核心中安裝 ipykernel 的第 6 版,然後選擇單元格工具欄中的 " 按行執行" 按鈕來嚐鮮一下。
在這裡插入圖片描述

遠端容器 devcontainer CLI

遠端- 容器 擴充套件適用於在 VS Code 中使用 Docker 容器。它現在包含 devcontainer 命令列介面,讓您可以輕鬆地開啟容器中的資料夾 ( devcontainer open ) 或者構建開發容器映像 ( devcontainer build )。

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

預覽功能


無標題檔案的自動語言檢測

我們很高興地宣佈無標題檔案的自動語言檢測的初始預覽版,它使用機器學習來檢測您正在編碼的語言並自動設定無標題檔案的語言模式。此功能利用了開源 ML 庫 Tensorflow.js 和 GitHub 使用者 @yoeo 來自 Guesslang 的 ML 模型。

在此版本中,該功能將預設關閉,但我們計劃將其設為下一次迭代版本的預設設定。如果您想要啟用它,請應用以下設定:

"workbench.editor.untitled.experimentalLanguageDetection": true

舉個例子,您可以開啟一個無標題檔案並將一段程式碼貼上到您的編輯器中。

以下是一段自動識別的 Python 程式碼段:
在這裡插入圖片描述
此外,您可以通過開啟語言選擇器檢視正在檢測的語言。
在這裡插入圖片描述

注意:如果語言檢測結果不夠確信,那麼您將保持當前的語言模式,語言選擇器中不會顯示任何結果,直到語言檢測結果更有把握。

該設定還允許您提供語言覆蓋,可用於指定您不想自動關閉的語言模式。
以下的例子展示瞭如何關閉 .md 檔案自動檢測:

"workbench.editor.untitled.experimentalLanguageDetection": true
"[markdown]": { "workbench.editor.untitled.experimentalLanguageDetection": false }

在您編輯無標題的 Markdown 檔案時,自動語言檢測功能不會執行。但是,如果您正在修改任何其他型別的無標題檔案,自動語言檢測功能會檢測這些檔案的內容。

我們已經將與 ML 模型互動的程式碼分離併合併到它自己的程式碼庫中,作為 npm 包釋出,該包存在於 vscode-languagedetection儲存庫中。

請讓我們知道無標題檔案的自動語言檢測功能是否幫助到了您的日常工作!

TypeScript 4.4

此版本包括對 TypeScript 4.4 版本的支援。您可以在 TypeScript 部落格上閱讀有關 TypeScript 4.4 中新語言功能和改進的更多資訊。一些工具亮點:

  • 在 JavaScript 和 TypeScript 檔案中嵌入引數名稱和型別的提示。
  • 純 JS 檔案中的基本拼寫建議。只有當我們對錯誤和修復有把握時才會顯示這些。

要開始使用 TypeScript 4.4 內測版本,請安裝 TypeScript Nightly 擴充套件

如果您在使用 TypeScript 4.4 時遇到任何錯誤,請分享您的反饋並告訴我們。

反彙編檢視

感謝微軟 C++ 團隊貢獻的大量程式碼,我們很高興在這個里程碑版本中包括了 反彙編檢視 的預覽功能。

反彙編檢視可以從編輯器的上下文選單中開啟,用以顯示活動堆疊幀的反彙編原始碼,它支援單步執行彙編指令,並且可以在單個指令上設定斷點。

反彙編檢視僅在活動的除錯會話中可用。注意,底層除錯擴充套件外掛也需要有相應的支援。

目前,只有 C++Mock Debug可以支援反彙編檢視。
在這裡插入圖片描述

從技術角度而言,VS Code 的反彙編檢視實現了 DAP (Debug Adapter Protocol) 協議另外四個功能:

  • disassembly請求,用以提供基於記憶體位置的反彙編原始碼。
  • 堆疊幀上的 instructionPointerReference屬性。
  • 步進請求的 granularity屬性。
  • 指令斷點和setInstructionBreakpoints請求。

擴充套件創作

測試 API

去年秋天,我們開始在 VS Code 中新增對執行測試的原生支援,本月,第一組與測試相關的 API 已經交付。與之前的擴充套件外掛相比,這些 API 提供了更大的靈活性、更好的效能和更豐富的使用者體驗。檢視有關編寫測試擴充套件的指南以深入瞭解。

測試資源管理器UI 外掛的現有使用者可以通過將 testExplorer.useNativeTesting設定為true來獲得原生體驗。但是,該轉換是基於測試資源管理器 UI 擴充套件現有 API,因此不包括諸如豐富差異之類的一些功能。

Java 擴充套件包中包含的 Microsoft Java 測試執行器是最早採用測試 API 的擴充套件之一 。

新建檔案選單的貢獻點

有助於建立新檔案編輯器的擴充套件(例如筆記本或自定義編輯器)現在可以向新的 檔案/新檔案 選單貢獻點貢獻命令。可以從歡迎頁面或檔案選單中的 "新建檔案..." 專案訪問此選單。

在這裡插入圖片描述

豐富狀態列懸停

狀態列專案現在支援豐富的懸停,包括連結和圖示 StatusBarItem.tooltip: string | IMarkdownString
file

  • 如果MarkdownString.supportThemeIcons設定為 true ,您可以使用帶有 $(iconName)語法的圖示。
  • 如果 MarkdownString受信任,還可以新增命令連結。語法:([test](command:vscode.newWindow))

狀態列警告顏色

表示警告的狀態列專案可以使用新新增的顏色 statusBarItem.warningBackgroundstatusBarItem.warningForeground

沒有 additionalProperties 的物件設定

物件設定必須將 additionalProperties 設定為 false ,以便在設定編輯器中支援物件。否則,設定編輯器會解讀為複雜設定(不規律的設定),並將使用者定向到設定 JSON 檔案。

多行字串設定

要在設定編輯器中新增多行字串設定的支援,請將 "editPresentation": "multilineText"作為鍵值配對新增到字串設定中。將字串設定更改為多行設定將導致設定編輯器在多行文字區域(而非單行輸入框中)呈現設定值。

更新的Codicons

我們已經新增了下列新圖示到 codicon庫中:


-azure
-compass-active
-compass-active
-compass-dot
-compass
-debug-all
-debug-coverage
-git-pull-request-closed
-git-pull-request-draft
-issue-draft
-layers-active
-layers-dot
-layers

文字文件更改原因

當事件 workspace.onDidChangeTextDocument被觸發時,事件物件的新屬性reason 會告知使用者文字更改的原因是撤消或重做操作。

語言伺服器協議


語言伺服器協議的下一個新版本以及對應的 npm 模組已經發布。3.17版本包含了一個關於完成項標籤詳細資訊的新提案,該提案符合 VS Code 本身的最新變化。

除錯介面卡協議


最終確定 " writeMemory" 請求和 " memory"事件提案

writeMemory請求已經完成,現在可以在 Debug Adapter Protocol的 1.48 版和與之相對應的 npm 模組中使用。如果除錯介面卡具有 supportsWriteMemoryRequest功能,客戶端可以使用 writeMemory請求將位元組寫入給定位置的記憶體。

memory事件有一個新的提案,將在下一個里程碑中新增到 DAP。

提議的擴充套件外掛 API


每個里程碑版本都附有新提議的 API,擴充套件外掛的作者們可以試用它們。我們期待您的反饋。如果您想要嚐鮮提議的新 API,請完成以下步驟:

  • 您必須使用 Insiders 版本,因為提議的 API 經常被修改。
  • 你必須在你的擴充套件的 package.json檔案中加入這一行: "enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts檔案複製到專案的源位置。

您將不能使用建議 API 釋出擴充套件外掛。因為新的版本可能會有重大變化,我們需要保證現有的擴充套件外掛可以被繼續使用。

isDefault 用於 TaskGroup

group屬性存在於tasks.json 檔案中定義的任務上,也通過任務 API 公開。 group屬性有一個 isDefault 屬性,該屬性直到現在在 API 中都不可用。該提案將isDefault 屬性公開為TaskGroup上的只讀屬性,以便擴充套件可以讀取哪個任務是組的預設任務,但不能通過為組設定預設值來覆蓋使用者配置。

用於 AuthenticationGetSessionOptions 的 forceRecreate

到目前為止,用於獲取身份驗證會話物件的getSession API 從來沒有能力要求使用者需要再次登入。然而這對於使用 SAML/單點登入 (SSO) 體驗的 GitHub 等身份驗證服務是必需的,其中訪問令牌最終會在 SSO 會話到期時失去對資源的訪問許可權。該提案為 AuthenticationGetSessionOptions新增了另一個名為 forceRecreate的屬性,允許您要求使用者再次登入。向使用者顯示類似於您指定 createIfNone 時顯示的模式體驗。

工程


基於 iframe 的 webviews 現在在桌面上隨處可見

本月我們完成了從 Electron 的 webview 標籤元素過渡到基於普通 <iframe>元素的 webview 。這更好地協調了 VS Code 的 webviews 跨桌面和 web 的實現,也讓我們刪除了很多現在冗餘的程式碼。

Electron 13 更新

在這個里程碑版本中,我們完成了將 Electron 13 捆綁到 VS Code 的實驗,這要感謝所有參與 Insiders 測試和自託管的參與者。這是 Chromium 91.0.4472.124 附帶的主要 Electron 版本。此版本的 Node.js 版本沒有變化,它仍然是 v14.16.0。

Electron 沙盒支援的進展

隨著我們準備讓 VS Code 工作臺啟用 Electron 的沙盒功能,我們希望在 linux 上啟用混合沙盒模式,且不在分散式軟體包 deb、rpm、snap、tar 存檔中捆綁 cli 引數--no-sandbox 。 Chromium 在 linux 上有一個多層沙盒模型。如果 Chromium 無法將名稱空間沙盒用於第 1 層,它將嘗試通過幫助程式 chrome-sandbox來使用 setuid 沙盒。要使 setuid 二進位制檔案工作,它需要滿足以下條件:

  • 沙箱二進位制檔案必須可由 Chromium 程式執行。
  • 它必須是 SUID 並且可以被其他人執行。

我們能夠為 deb 和 rpm 包保留這些條件。目前無法獲得 snap 的這些許可權,我們有以下跟蹤問題 https://github.com/microsoft/vscode/issues/127140。

至於其他使用 tar 存檔的應用程式,如果應用程式無法使用名稱空間沙盒(這在容器內執行時可能會發生)它將失敗並顯示以下錯誤:

FATAL:setuid\_sandbox\_host.cc(158)] 

找到了 SUID 沙盒助手二進位制檔案,但沒有正確配置。而不是在沒有沙盒的情況下執行,我現在正在中止程式。您需要確保 chrome-sandbox 由 root 使用者擁有並且模式為4755。

如果發生這種情況,您可以使用以下兩個選項之一來使其正常工作:

  • 修復 setuid helper 許可權問題
sudo chown root <path-to-vscode>/chrome-sandbox
sudo chmod 4755 <path-to-vscode>/chrome-sandbox
  • 使用--no-sandbox標誌執行

煙霧測試的一些改進

我們一直為每個構建版本執行一套完整的煙霧測試。我們測試開啟 VSCode(桌面和 Web)並執行一堆 UI 元素以確保正確的功能。這個里程碑版本中我們在這個基礎上投入了更多資源,從而使我們能夠從最終計劃中移除手動的煙霧測試。

煙霧測試現在可以在所有平臺(macOS、Linux 和 Windows)上執行。最重要的是,我們已經實現在每次程式碼提交時自動執行煙霧測試,從而我們可以及時地發現 VS Code 新版本可能引入的軟體錯誤。

最後,感謝我們用於自動化 Web 冒煙測試的 Playwright 庫,我們採用了他們的跟蹤工具,這使得我們可以檢視並且重複執行失敗的煙霧測試。

學習資料

http://aka.ms/vscodelearn

重大修復

  • 26425:沒有更改時不應顯示"開啟更改"按鈕
  • 100815:外部終端在連線到遠端 WSL 時中斷
  • 106981:當視窗縮放設定為 -1 時,終端游標重影
  • 127959:除錯程式暫停時將開啟除錯窗格
  • 129059:設定編輯器中的物件小元件不呈現說明
  • 129070:無法通過僅按"確定"按鈕更正下拉選單設定值
  • 129415:無法在單一檔案模式下執行使用者任務

相關文章