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

2021 年 7 月 (版本 1.59)

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

此版本還解決了CVE-2021-26437

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


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

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

在太平洋時間 8 月 10 日星期二上午 8 點(倫敦時間下午 4 點)參加 VS Code 團隊的直播,觀看此版本中的新功能演示,並向我們提問。

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

工作臺

擴充套件

調整大小後改進的擴充套件檢視。在以下短影片中,預設寬度的擴充套件檢視顯示所有詳細資訊(以前未顯示圖示、評分和安裝次數)。當檢視縮小後,會顯示較小的擴充套件圖示,當其寬度進一步減小時,圖示和評分會隱藏。

Dynamic Extensions view

主題:GitHub Light Theme

擴充套件檢視現在顯示擴充套件的自定義懸停。此豐富的懸停包括擴充套件的完整描述以及其他有用資訊,例如擴充套件被停用或推薦的原因。

Custom Extension hover

主題:GitHub Light Theme

您現在可以在擴充套件窗格中新的執行時狀態選項卡中檢查擴充套件的執行時狀態。狀態資訊包括其啟用時間、是否在啟動時啟用,以及是否存在任何警告或錯誤。其中一些資訊顯示在擴充套件檢視及其懸停(如上圖所示)中。

Extension Runtime Status

主題:GitHub Light Theme

擴充套件窗格的“詳細資訊”選項卡現在顯示類別、資源連結以及其他資訊,例如擴充套件釋出和更新日期。選擇一個類別將在“擴充套件”檢視中顯示該類別中的其他擴充套件。

Extension Details

主題:GitHub Light Theme

設定編輯器

“設定”編輯器現在支援物件驗證。該驗證檢查在直接編輯 JSON 檔案時可能引入的型別錯誤。

Object setting showing validation errors

陣列設定現在在非編輯模式下支援拖放。此外,帶有屬性 uniqueItems 設定為 true 的列舉陣列設定現在只顯示剩餘選項,而不是下拉列表中的所有選項

Drag and drop for array settings

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

An example of a multiline string setting

擴充套件主題自定義語法

下面列出的顏色自定義設定允許使用者自定義當前主題的顏色

  • workbench.colorCustomizations
  • editor.tokenColorCustomizations
  • editor.semanticTokenColorCustomizations

現在有新的語法可以一次自定義多個主題

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

可以列出多個主題,並且 * 萬用字元可以在名稱的開頭和結尾使用。

支援 Jupyter 筆記本

本月,我們將處理讀取 *.ipynb 檔案的程式碼從 Jupyter Notebook 擴充套件移入了一個新的內建擴充套件。這意味著您現在可以在全新安裝的 VS Code 中開啟 Jupyter 筆記本,而無需安裝完整的 Jupyter 擴充套件。但是,如果您想執行單元格或檢視使用 ipywidgets 或其他複雜渲染器型別的輸出,則必須安裝 Jupyter 擴充套件。

筆記本佈局改進

此迭代我們對筆記本佈局進行了一些改進

  • 當單元格摺疊時,現在會呈現單元格輸入的第一行。
  • 當視窗不夠寬以渲染所有主要操作時,筆記本編輯器工具欄上的操作將被移動到溢位選單 (...) 中。
  • notebook.undoRedoPerCell 的預設值現在更改為 true

notebook layout improvements

我們還更新了程式碼單元格的預設樣式,現在顯示背景色以幫助區分單元格。主題可以使用 notebook.cellEditorBackground 來自定義此顏色。

Example of updated notebook code cells

最後,您現在可以使用設定 notebook.globalToolbarShowLabel 切換筆記本工具欄上的文字標籤

Example of notebook toolbar text

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

一個新設定 explorer.copyRelativePathSeparator 允許您在呼叫複製相對路徑操作時顯式設定路徑分隔符。

可用的分隔符選項是

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

跨編輯器組共享檢視狀態

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

預設情況下,此設定已停用以保留當前行為。如果您在側邊開啟一個編輯器,然後關閉該編輯器組,只是為了再次在側邊開啟編輯器,則不會恢復任何檢視狀態,因為您正在開啟一個新的編輯器組。但是,當您啟用此設定時,最新的編輯器檢視狀態將保留在所有編輯器組中並將被使用,除非找到更具體的編輯器組檢視狀態。

在側邊重新開啟 package.json 檔案時,將保留以下選擇狀態。

Shared editor group view state

編輯器

在摺疊區域之間導航

有新命令可將游標位置設定為相應的摺疊

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

這些命令目前沒有預設的鍵繫結,但您可以透過首選項:開啟鍵盤快捷方式⌘K ⌘S (Windows、Linux Ctrl+K Ctrl+S))新增自己的鍵盤快捷方式。

自動摺疊匯入

使用設定 editor.foldingImportsByDefault 可以自動摺疊匯入語句。摺疊狀態在檔案開啟一次後儲存。此功能適用於 TypeScript、JavaScript、Java、C#、C++ 以及所有具有摺疊範圍提供程式並將匯入語句註釋為 FoldingRangeKind.Imports 的語言。

從選擇中生成搜尋字串

查詢控制元件設定 editor.find.seedSearchStringFromSelection 已擴充套件為僅支援從非空選擇中生成搜尋字串。預設情況下,當顯示查詢控制元件時,編輯器將使用選擇或空選擇周圍的單詞作為搜尋關鍵字。

內聯建議改進

我們更改了內聯建議的呈現方式。這不僅修復了許多錯誤,還使自動換行支援內聯建議。

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

嵌入提示改進

我們還更改了嵌入提示的呈現方式。透過使用與內聯建議相同的機制,嵌入提示現在也考慮了自動換行。此機制還可以在嵌入提示周圍啟用單獨的游標停止。

終端

在視窗之間拖放終端

將終端從一個視窗的選項卡列表或編輯器區域拖放到另一個視窗的選項卡列表、編輯器區域或面板中。

Drag and drop terminal across windows

子程序跟蹤和關閉警告

現有的 terminal.integrated.confirmOnExit 和新的 terminal.integrated.confirmOnKill 設定使用子程序跟蹤在嘗試關閉具有 shell 程序下的子程序的終端時顯示警告。預設情況下,此跟蹤僅影響編輯器區域中的終端,但現在可以配置為顯示所有終端或面板區域中的終端的警告。

將貢獻的終端配置檔案設定為預設值

擴充套件貢獻的終端配置檔案現在可以設定為預設配置檔案。預設終端配置檔案由終端下拉列表中的預設字尾表示。

The terminal profile dropdown displays indicates the extension terminal profile is set as the default

支援下劃線和刪除線

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

Git output in terminal with underline and strikethrough text

主題:Sapphire Theme

上述示例在 .gitconfig 中使用以下設定

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

在編輯器區域的側邊建立終端

有一個新命令 workbench.action.createTerminalEditorSide,用於在編輯器區域中在活動編輯器旁邊建立終端。

活動終端選項卡指示器

主題現在可以使用主題鍵 terminal.tab.activeBorder 設定垂直線的顏色以指示活動終端選項卡。

Highlighted active terminal

如果未設定 terminal.tab.activeBorder,顏色將回退到 tab.activeBorder

停用終端選項卡圖示中的動畫

新設定 terminal.integrated.tabs.enableAnimation 將停用終端選項卡圖示中的動畫。對於任務,使用播放按鈕而不是旋轉動畫

Terminal tab without animation and play button displayed

除錯

改進的編輯器標題中的“執行/除錯”按鈕

在 2 月份的版本中,我們引入了一個下拉按鈕,用於將“執行”和“除錯”命令分組到編輯器標題區域的中心(和緊湊)位置(請參閱1.54 版本說明)。根據使用者反饋,我們嘗試透過記住上次執行的操作來改進下拉按鈕。下拉按鈕現在有兩個點選區域,一個用於預設操作(左),另一個用於下拉選單(右),選擇後,它將執行操作並將其記住為新的預設值。

Debug/run split button shown for Java

下拉行為

  • 如果只有一個“執行”或“除錯”操作,則省略下拉選單。
  • 如果存在多個“執行”或“除錯”操作,所有操作都將顯示在下拉選單中,並且預設操作將設定為下拉選單中的第一個操作(只要沒有記住的操作)。
  • 預設操作在 VS Code 重啟後為特定工作區保留;它按編輯器保留。

對擴充套件的貢獻

即時預覽

Live Preview 擴充套件,上個月釋出,有一些令人興奮的新功能。這些功能包括

  • 與內建 JavaScript 偵錯程式相容,用於外部預覽。
    • 執行 Live Preview: Show Debug Preview 試用一下!
  • 嵌入式瀏覽器改進,例如“頁面查詢”支援和快速訪問 webvivew DevTools。
  • 自動生成檔案的檔案系統監視。
  • 以及更多!🎉

要檢視本月進展的更多詳細資訊,請參閱擴充套件的版本說明

Live Preview Debugging

Live Preview new browser features

主題:GitHub Dark Theme

GitHub 拉取請求和議題

GitHub Pull Requests and Issues 擴充套件的開發仍在繼續,該擴充套件允許您處理、建立和管理拉取請求和問題。本月的一個亮點是,開始處理問題已擴充套件為允許您處理當前儲存庫之外的問題。

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

Jupyter

Jupyter 擴充套件的開發仍在繼續。要了解所有新功能和更新,您可以閱讀擴充套件 7 月版本的完整更新日誌

如果您想了解有關 VS Code 實現筆記本原生支援的更多資訊,您可以閱讀最近的部落格文章 Notebooks 的成熟

互動式視窗

Jupyter 互動式視窗提供了一種替代方式來構建和使用 Jupyter 筆記本,使用文字檔案而不是筆記本介面。上個月,我們預覽了升級版的 Jupyter 互動式視窗,其特點是更深度的 workbench 整合,包括對主題、自定義鍵繫結、程式碼片段、與擴充套件的相容性等。非常感謝我們的使用者透過 GitHub 問題提供了預覽體驗的反饋。內建互動式視窗現在是 1.59 中的預設介面。以前的介面將透過設定 "jupyter.enableNativeInteractiveWindow": false 保持可用,並將在即將釋出的版本中刪除。我們期待您的反饋

Shift+Enter to run code in the Interactive window

按行執行

我們一直在努力支援 Jupyter 筆記本中的“按行執行”功能。此功能本質上是一個簡化的除錯模式,可讓您逐行執行單元格程式碼,而無需複雜的除錯 UI。這仍然是實驗性的,但您可以透過設定 "jupyter.experimental.debugging": true,在選定的核心中安裝 ipykernel 版本 6,然後選擇單元格工具欄中的按行執行按鈕來試用它。

Run by line

Python

Python 擴充套件中,我們改進了 Python 直譯器列表的排序。過去,虛擬環境會顯示在列表底部,導致大量滾動和/或搜尋。現在,專案根目錄中的虛擬環境首先顯示,其次是全域性安裝的環境。

List of Python interpreters

開發容器 devcontainer CLI

Dev Containers 擴充套件,用於在 VS Code 中使用 Docker 容器,現在包含一個 devcontainer 命令列介面,允許您在開發容器中開啟資料夾 (devcontainer open) 或構建開發容器映像 (devcontainer build)。

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

預覽功能

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

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

在此版本中,此功能將預設關閉,但我們計劃在下一個迭代中將其設定為預設值。要啟用它,請應用以下設定

"workbench.editor.untitled.experimentalLanguageDetection": true

要檢視該功能的實際效果,請開啟一個無標題檔案(檔案 > 新建檔案)並將原始碼貼上到編輯器中。

這是一個 Python 程式碼自動檢測的示例

paste a code snippet right into VS Code and it will detect the language

主題:Panda Theme

此外,您可以透過開啟語言選擇器來檢視正在檢測的語言。

the language picker also shows the detected languages if there are any

主題:Panda Theme

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

該設定還允許您提供語言覆蓋以指定您不想自動切換的語言模式。

這是一個不自動檢測 Markdown 檔案的示例

"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 檔案中的引數名稱和型別的嵌入提示。
  • 純 JavaScript 檔案中的基本拼寫建議。這些僅在 TypeScript 語言服務對錯誤和修復有足夠信心時才顯示。

要開始使用 TypeScript 4.4 每晚構建,請安裝 TypeScript Nightly 擴充套件。

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

反彙編檢視

感謝 Microsoft C++ 團隊的巨大貢獻,我們很高興在此里程碑中包含除錯反彙編檢視的預覽。

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

反彙編檢視僅在活動除錯會話中可用,並且當底層除錯擴充套件支援它時。截至目前,只有 Microsoft C++Mock Debug 擴充套件可以為反彙編檢視提供資料。

Disassembly view in Mock Debug extension

從技術角度來看,VS Code 對反彙編檢視的實現現在支援除錯介面卡協議的另外四個功能

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

擴充套件創作

測試 API

去年秋天,我們開始為 VS Code 中的測試執行新增原生支援,本月,第一組與測試相關的 API 已最終確定。這些 API 提供更大的靈活性、更好的效能和比以前擴充套件中發現的更豐富的使用者體驗。請查閱編寫測試擴充套件的指南以深入瞭解。

Image showing the test explorer and rich diff view experience

主題:codesong

Test Explorer UI 擴充套件的現有使用者可以透過將 testExplorer.useNativeTesting 設定為 true 來獲得原生體驗。但是,此轉換是 Test Explorer UI 擴充套件現有 API 的反映,因此不包含豐富的差異支援等某些功能。

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

Java extension using the native test API in VS Code

“新建檔案”選單的貢獻點

提供建立新檔案編輯器方式的擴充套件(例如筆記本或自定義編輯器)現在可以將命令貢獻給新的 file/newFile 選單貢獻點。可以透過歡迎頁或檔案選單中的新建檔案...項訪問此選單。

New File menu in use via Welcome page

豐富的狀態列懸停

現在支援在狀態列項 StatusBarItem.tooltip: string | IMarkdownString 上顯示包含連結和圖示的豐富懸停。

Rich Status bar hover

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

狀態列警告顏色

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

沒有 additionalProperties 的物件設定

物件設定的 additionalProperties 必須設定為 false,以便在“設定”編輯器中支援該物件。否則,“設定”編輯器會將該設定解釋為可以採用任何形狀的複雜設定,並引導使用者轉到設定 JSON 檔案。

多行字串設定

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

更新的 codicons

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

List of updated icons

  • 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 請求已最終確定,現在可在 除錯介面卡協議的 1.48 版本和相應的 npm 模組中使用。如果除錯介面卡具有 supportsWriteMemoryRequest 功能,客戶端可以使用 writeMemory 請求在給定位置寫入位元組到記憶體。

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

建議的擴充套件 API

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

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

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

TaskGroup 的 isDefault

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

AuthenticationGetSessionOptions 的 forceRecreate

到目前為止,用於獲取身份驗證會話物件的 getSession API 從未能夠要求使用者登入。對於 GitHub 等身份驗證服務,需要提示登入,這些服務使用 SAML/單點登入 (SSO),其訪問令牌最終在 SSO 會話過期時失去對資源的訪問。此提案向 AuthenticationGetSessionOptions 添加了另一個屬性 forceRecreate,允許您要求使用者重新登入。將向用戶顯示類似於您指定 createIfNone 時的模態體驗。

工程

基於 iframe 的 Web 檢視現在在桌面環境中普遍使用

本月,我們完成了從 Electron 的 webview 標籤元素到基於普通