🚀 在 VS Code 中

2019 年 1 月 (版本 1.31)

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

下載:Windows: x64 | Mac: Intel | Linux 64 位元: deb rpm tarball | 32 位元: deb rpm tarball


歡迎使用 Visual Studio Code 2019 年 1 月發行版本。此版本中有許多重大更新,我們希望您會喜歡,其中一些主要重點包括

如果您想在線上閱讀這些版本資訊,請前往 更新,網址為 code.visualstudio.com
您也可以觀看 Cloud Developer Advocate Brian Clark 提供的 1.31 版本重點影片

版本資訊分為與 VS Code 焦點領域相關的下列章節。以下是一些進一步的更新

  • 工作台 - 禪模式隱藏行號,新的螢幕廣播模式顯示按鍵。
  • 編輯器 - 智慧選取改善、調整參考 CodeLens 位置。
  • 整合式終端機 - Windows 上的 ConPTY 支援、「尋找」功能改善。
  • 擴充功能撰寫 - 擴充功能變更事件、在瀏覽器動作中開啟資源。

Insiders:想要盡快看到新功能嗎?您可以下載每日建置的 Insiders 版本,並在最新更新可用時立即試用。如需最新的 Visual Studio Code 新聞、更新和內容,請在 Twitter 上追蹤我們 @code

擴充功能

安裝時無需重新載入

能夠在不安裝或啟用擴充功能時強制重新載入 (重新啟動) VS Code 的情況下安裝擴充功能,是最受歡迎的功能要求之一,我們在此版本中為您帶來此功能。當您安裝或啟用擴充功能時,不再需要重新載入 VS Code。

在以下範例中,使用者遵循建議,在開啟 .vue 檔案後安裝 Vetur 擴充功能。請注意,Vetur 擴充功能提供的語言功能 (例如語法著色、診斷錯誤) 在安裝建議的擴充功能後立即可用。

Extensions no reload

如果您卸載或停用未啟用的擴充功能,也不需要重新載入。

注意:某些擴充功能由於外部貢獻 (貢獻給其他擴充功能的擴充點) 而需要重新載入。這需要外部貢獻點擁有者透過監聽 extensions.onDidChange 事件來採用。

工作台

新的樹狀小工具

我們已將小工具遊戲提升到新的層次:建立了一個新的樹狀小工具,以解決效能問題,並讓我們能夠在多個工作台區域中提供更多功能。新的樹狀小工具是透過組合我們的高效能清單小工具而建立的。我們打算撰寫一篇獨立的部落格文章,介紹這項工程工作和效能改進。目前,我們將重點放在功能上。

注意:新的樹狀小工具已在檔案總管、所有偵錯樹狀結構、「搜尋」和「查看參考」中採用。除非我們明確停用,否則以下描述的功能適用於大多數這些 UI 區域。

改善的鍵盤導覽

樹狀結構中現在有三種不同的鍵盤導覽類型:simplehighlightfilter。在 highlightfilter 中,在樹狀結構中輸入將在樹狀結構頂端顯示一個小工具 (控制項),表示您現在正在導覽樹狀結構

Keyboard navigation type filter

此小工具也可以用來在 highlightfilter 模式之間切換。如果您想要用於在模式之間切換的鍵盤快速鍵,您可以設定一個鍵盤繫結來執行 list.toggleFilterOnType 命令。工作台 > 清單:鍵盤導覽 (workbench.list.keyboardNavigation) 設定會設定預設模式,包括 simple 模式,在該模式中,輸入樹狀結構元素的前幾個字元只會聚焦該元素。

對於清單/樹狀結構動作具有單字母鍵盤繫結的使用者,仍然可以透過使用 listAutomaticKeyboardNavigation 內容金鑰來使用此功能。例如,VIM 擴充功能會將此內容金鑰設定為 false 以停用自動鍵盤導覽,並新增鍵盤繫結 /list.toggleKeyboardNavigation 命令,因此使用者只需輸入 / 即可導覽樹狀結構。在 VSCodeVIM pull request 中深入了解此功能。

主題作者可以使用以下新的主題金鑰來自訂小工具的色彩

  • listFilterWidget.background
  • listFilterWidget.outline
  • listFilterWidget.noMatchesOutline

注意:這些鍵盤導覽模式目前僅適用於已解析的樹狀結構節點。例如,在檔案總管中,如果從未展開資料夾,則樹狀結構不會尋找其子系。我們正在考慮多種選項來改善此體驗。

階層式全選

現在在樹狀結構中按下 Ctrl+A (macOS 上為 Cmd+A) 將以階層方式展開樹狀結構的選取範圍。

Hierarchical select all

可自訂的縮排

您現在可以使用工作台 > 樹狀結構:縮排 (workbench.tree.indent) 設定來自訂整個工作台中所有樹狀結構的節點縮排。

全部展開/摺疊

現在在展開/摺疊樹狀結構節點時按住 Alt 鍵將以遞迴方式運作。請注意,遞迴展開僅適用於先前在樹狀結構中顯示的節點。例如,檔案總管不會自動展開使用者從未展開過的資料夾。

水平捲動

工作台 > 樹狀結構:水平捲動 (workbench.tree.horizontalScrolling) 設定現在可在更多樹狀結構和清單 (即檔案總管、「搜尋」、SCM、「偵錯」等) 上啟用水平捲動。

問題面板

多行訊息

「問題」面板現在以不同的行顯示多行診斷訊息。以下範例顯示了 TypeScript 的多行錯誤訊息現在的呈現方式。

Problems panel multi-line messages

您也可以使用摺疊/展開按鈕或問題:以單行顯示訊息問題:以多行顯示訊息命令,切換以顯示或隱藏完整訊息。

使用鍵盤快速鍵觸發程式碼動作

您現在可以使用與「快速修正」命令相同的預設鍵盤快速鍵 ⌘. (Windows、Linux Ctrl+.) 從「問題」面板觸發程式碼動作。

改善了「前往」選單

我們在前往選單中新增了更多導覽動作,使其更容易探索

Go menu

檔案總管內容選單中的「剪下」命令

根據熱門要求,我們已將「剪下」命令新增至檔案總管內容選單。

Cut command in context menu

快速捲動

按下 Alt 鍵可在編輯器和檔案總管中啟用快速捲動。根據預設,快速捲動使用 5 倍速度乘數,但您可以使用編輯器:快速捲動靈敏度 (editor.fastScrollSensitivity) 設定來控制乘數。

禪模式隱藏行號

現在開啟禪模式也會隱藏編輯器行號。此行為可以透過 zenMode.hideLineNumbers 設定來控制。

在 Linux 中使用自訂選單新增了鍵盤導覽

我們的自訂選單現在支援使用 Page Up/DownHome/End 鍵快速跳到選單的開頭或結尾。

在 Windows/Linux 中按兩下應用程式圖示以關閉

由於技術上的權衡,根據預設,Windows 和 Linux 上的自訂標題列會移除按兩下應用程式圖示以關閉視窗的功能。可以透過啟用設定 window.doubleClickIconToClose 來重新獲得此功能,但需要注意的是,您將無法再從此位置拖曳視窗,也無法在 Windows 上取得系統內容選單。

編輯器索引標籤的關閉順序

新的設定 workbench.editor.focusRecentEditorAfterClose 可讓您變更編輯器索引標籤的關閉順序。根據預設,索引標籤將以最近使用 (MRU) 順序關閉。變更此設定可讓您改為從右至左關閉索引標籤。

新的標題變數

window.title 設定中可以使用三個新的變數

  • ${activeFolderShort}:檔案所在的資料夾名稱。
  • ${activeFolderMedium}:檔案所在的資料夾路徑,相對於工作區資料夾。
  • ${activeFolderLong}:檔案所在的資料夾完整路徑。

輸出面板

輸出面板中的智慧捲動行為現在更有效率。當您在輸出面板中的任何位置按一下時,捲動會鎖定,當您在最後一行按一下時,捲動會解除鎖定。

螢幕廣播模式

VS Code 中有一個新的螢幕廣播模式,可醒目提示游標位置和按鍵。螢幕廣播模式 (開發人員:切換螢幕廣播模式) 對於示範目的可能很有用。

Screencast mode

編輯器

智慧選取

我們致力於改善選取範圍選單中展開選取範圍縮小選取範圍的實作。我們正在新增 API,以便語言伺服器可以根據其語意知識指定選取步驟。此外,我們也改善了預設實作。

Smart selection

請繼續關注,隨著智慧選取的改善,未來還會有更多功能。使用 smart-select 標籤來查看我們正在進行的工作。

參考歷程記錄

現在「參考」檢視有一個參考:顯示歷程記錄命令。它會彈出「快速選取」,其中包含先前的搜尋,可讓您快速重新執行先前的搜尋。

Reference search history

參考 CodeLens

選取參考 CodeLens 時,會開啟查看編輯器。現在可以使用 references.preferredLocation 設定來控制此行為。其選項為 peekview,後者會在新的檢視中顯示參考。

程式碼片段描述

在撰寫具有長描述的程式碼片段時,過去您被迫撰寫長單一字串。不支援使用陣列,就像您可以針對 body 使用陣列一樣。現在已變更,可以使用字串陣列來撰寫長描述。

{
  "prefix": "happy",
  "body": "#Happy Coding!",
  "description": ["First Line", "Second Line", "Third Line"]
}

已移除舊版搜尋模式

在 20 個版本之前,我們開始在 VS Code 中使用 ripgrep 進行搜尋。我們舊的基於 Node.js 的搜尋實作仍然可以使用設定 search.useLegacySearch。但正如近藤麻理惠所說,我們必須整理不再令人愉悅的事物。如果您一直在使用回溯參考或向前查看等 Regex 功能,請務必開啟 search.usePCRE2 設定。

使用簡單文字編輯器將設定編輯為 JSON

基於類似的主題,既然我們已經有了數個版本的設定 UI,我們正在研究簡化 JSON 設定編輯體驗。如果您透過開啟 settings.json 檔案或按一下設定 UI 中的 {} 按鈕,或叫用喜好設定:開啟使用者設定 (JSON) 命令,將設定編輯為 JSON,那麼您將獲得一個簡單的 JSON 編輯器,而不是我們先前使用的分割 JSON 編輯器。您仍然可以使用喜好設定:開啟預設設定 (JSON) 命令來查看預設設定清單。

如果您真的懷念左側具有預設設定的分割 JSON 編輯器,您可以透過啟用 workbench.settings.useSplitJSON 設定來還原它。請注意,如果您願意,您將始終能夠將設定編輯為 JSON。

擴充功能的網路 Proxy 支援

設定Http: Proxy 支援 (http.proxySupport) 現在預設為所有擴充功能啟用網路 Proxy 支援。

HTTP Proxy Support

語言

TypeScript 3.3

我們現在隨附 TypeScript 3.3.1。此 TypeScript 更新帶來了一些重要的錯誤修正和潤飾。

移除 markdown.previewFrontMatter 設定

已移除 markdown.previewFrontMatter 設定。Markdown 預覽現在始終隱藏 YAML frontmatter (這是 markdown.previewFrontMatter 的預設設定)。

Markdown 擴充功能 (例如 Markdown yaml PreambleGitHub Markdown Preview) 會在預覽中將 frontmatter 呈現為表格。

語意選取

語意選取現在適用於 HTML、CSS/LESS/SCSS 和 JSON

HTML, CSS, and JSON semantic selection

整合式終端機

重排支援

現在,當終端機水平調整大小時,終端機會換行和取消換行。

Text reflowing in the terminal

Windows 上的 ConPTY 支援

透過 Windows ConPTY API 管理終端機處理程序現在在 Windows Insiders 快環 (組建編號 18309+) 中以選擇加入選項提供。

{
  "terminal.integrated.windowsEnableConpty": true
}

這將使用 Windows 主控台團隊提供的 ConPTY 系統作為終端機的後端。啟用此功能應可修正 Windows 終端機的許多問題,特別是關於色彩支援、互動式應用程式和原生支援 VT 序列的 Shell。

以下是在 WSL 終端機中支援 256 ANSI 色彩的前後比較

256 colors without ConPTY don't work

256 colors with ConPTY do work

在 Linux 和 macOS 上,終端機現在將相對於目前工作目錄 (而非終端機的初始目錄) 解析連結。

After navigating into a directory, links relative to that path will work

終端機中的「尋找」功能改善

終端機中的「尋找」功能現在支援累加式「隨打即找」搜尋,以及在單行中尋找多個詞彙的功能。

commandsToSkipShell 設定的改善

先前,設定 terminal.integrated.commandsToSkipShell 是將跳過終端機評估並改由 VS Code 處理的所有命令的清單。這很麻煩,因為您需要在設定檔中包含 100 多個命令才能變更它。現在已變更為新增和刪除的清單,因此您只需包含對預設清單的變更

{
  "terminal.integrated.commandsToSkipShell": [
    // Make ctrl+n open a new file when the terminal is focused
    "workbench.action.files.newUntitledFile",
    // Send ctrl+e to the terminal
    "-workbench.action.quickOpen"
  ]
}

已啟用新的緩衝區實作

在 v1.29 中引入的基於 TypedArray/ArrayBuffer 的終端機緩衝區現在已開啟,舊的實作已移除。這應該可以大幅提升終端機的輸送量,並顯著減少其記憶體佔用量。

偵錯與工作

自訂命令使用者輸入變數

在上一個里程碑中引入的 輸入變數 是一種強大的機制,可用於要求工作或偵錯組態中的使用者輸入。最初,我們提供了 promptStringpickString 輸入變數。

在此里程碑中,我們引入了一種新的輸入變數類型 command,它會在內插輸入變數時執行任意命令。由於命令可以由擴充功能貢獻,因此現在可以透過新的實作來擴充使用者輸入變數。

以下範例顯示如何在偵錯組態中使用 command 類型的使用者輸入變數,讓使用者從特定資料夾中找到的所有測試案例清單中選取測試案例。假設某些擴充功能提供 extension.mochaSupport.testPicker 命令,該命令會尋找可設定位置中的所有測試案例,並顯示選取器 UI 以選取其中一個。

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Test",
      "program": "${workspaceFolder}/${input:pickTest}"
    }
  ],
  "inputs": [
    {
      "id": "pickTest",
      "type": "command",
      "command": "extension.mochaSupport.testPicker",
      "args": {
        "testFolder": "${workspaceFolder}/tests"
      }
    }
  ]
}

工作輸出支援分割終端機

您現在可以設定工作,使其在分割終端機面板中顯示輸出,而不是建立新的終端機面板。工作組態可以在 presentation 區段中使用 group 屬性來定義應顯示工作輸出的位置。

如果您執行以下兩個工作,它們將在分割終端機中顯示,以便您可以同時看到它們

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Task One",
      "type": "shell",
      "command": "echo One && sleep 5000",
      "problemMatcher": [],
      "presentation": {
        "group": "groupA"
      }
    },
    {
      "label": "Task Two",
      "type": "shell",
      "command": "echo Two && sleep 5000",
      "problemMatcher": [],
      "presentation": {
        "group": "groupA"
      }
    }
  ]
}

Split terminal tasks

預覽功能

預覽功能尚未準備好發行,但功能已足夠使用。我們歡迎您在開發期間提供早期意見反應。

工作台的網格版面配置

工作台版面配置正在重新設計,以使用編輯器本身使用的相同網格版面配置。此處完成的工作不僅將簡化長期維護工作台版面配置的工程工作,還有助於我們啟動新的體驗。

在此里程碑中,我們隨附了一種這樣的體驗,以示範使用新的網格版面配置可以更輕鬆地實現的功能,即切換編輯器區域。在啟用實驗性網格版面配置 ("workbench.useExperimentalGridLayout": true) 的情況下,有一個新的命令切換編輯器區域,它會隱藏程式碼編輯器。這可讓您建立 VS Code 終端機面板,該面板佔用完整的編輯器區域,如下所示

Terminal only window

如果您使用 code file.txt 從終端機開啟檔案,它仍然會彈出編輯器,就像您預期的一樣。此功能仍在進行中,並且存在已知問題,但我們鼓勵您查看並提交問題。您可以透過 此查詢 隨時掌握有關此工作問題的最新資訊。

HTML 和 CSS 自訂資料支援

由於此功能處於預覽狀態,因此設定、貢獻點和資料格式可能會變更。

Custom data

今天,前端開發人員通常以 HTML/CSS 的超集進行程式碼編寫

  • Web Components 允許自訂 HTML 元素,例如 <my-button type="alert"></my-button>
  • PostCSS 允許自訂 CSS 屬性,例如 size 和尚未標準化的 CSS 功能,例如 :any-link
  • 各種架構允許在來源 HTML/CSS 中具有更大的彈性。

在此迭代中,我們改善了 1.30 中引入的 HTML 自訂資料支援,並新增了 CSS 自訂資料支援。

  • 使用 html.experimental.customDatacss.experimental.customData 載入自訂資料。(已移除 html.experimental.custom.tagshtml.experimental.custom.attributes。)
  • 或者,使用 contributes.html.experimental.customDatacontributes.css.experimental.customData 將 JSON 捆綁到擴充功能中。
  • 最後,如果您要撰寫使用 vscode-html-languageservicevscode-css-languageservice 的語言伺服器,則可以使用自訂資料建立語言服務。

自訂資料增強了 VS Code 對 HTML/CSS 的理解。例如,透過這些 HTML/CSS JSON 貢獻,VS Code 可以為自訂 HTML 標籤/屬性和 CSS 屬性/pseudoClass 提供完成和懸停

{
  "version": 1,
  "tags": [
    {
      "name": "my-button",
      "description": "My button",
      "attributes": [
        {
          "name": "type",
          "description": "My button type",
          "values": [{ "name": "alert" }]
        }
      ]
    }
  ]
}
{
  "version": 1,
  "properties": [
    {
      "name": "my-size",
      "description": "Compiles down to `width` and `height`. See details at https://github.com/postcss/postcss-size."
    }
  ],
  "pseudoClasses": [
    {
      "name": ":my-link",
      "description": ":any-link pseudo class. See details at https://preset-env.cssdb.org/features#any-link-pseudo-class."
    }
  ]
}

上述範例可在 octref/simple-customdata 中取得,而功能更完整的範例可在 octref/svg-data 中取得。

這些指南說明了資料格式以及如何透過設定和擴充功能貢獻點來使用它們。

  • 指南,用於使用 HTML 自訂資料
  • 指南,用於使用 CSS 自訂資料

擴充功能撰寫

擴充功能變更事件

新增了一個新的事件 extensions.onDidChange,當 extensions.all 陣列變更時,會觸發此事件。當安裝、卸載、啟用或停用擴充功能時,可能會發生這種情況。請參閱安裝擴充功能時無需重新載入章節。

/**
 * An event which fires when `extensions.all` changes. This can happen when extensions are
 * installed, uninstalled, enabled or disabled.
 */
export const onDidChange: Event<void>;

注意:引入新的貢獻點的擴充功能作者應監聽此事件,並相應地更新工作台的狀態。

在瀏覽器中開啟資源

我們觀察到多個擴充功能使用 node 模組 (例如 opnopen) 在瀏覽器中開啟 URL。鑑於對此功能的需求,我們新增了一個新的 API vscode.env.openExternal。它預期一個 URL,可用於開啟網站連結、郵件連結或應用程式 URL 處理常式。也接受檔案 URL,以便在其預設應用程式 (例如 PDF 檔案) 中開啟它們。

// open default browser
await vscode.env.openExternal(
  vscode.Uri.parse('https://github.com/microsoft/vscode/issues/66741')
);

注意:目前使用 opnopen 模組的擴充功能作者應切換到此新的 API。

全域儲存路徑

現在為擴充功能提供了一個全域儲存路徑 ExtensionContext.globalStoragePath,該路徑指向具有寫入/讀取權限的本機目錄。如果您需要儲存可從所有工作區存取的大型檔案,這是一個不錯的選擇。

/**
 * An absolute file path in which the extension can store global state.
 * The directory might not exist on disk and creation is
 * up to the extension. However, the parent directory is guaranteed to be existent.
 *
 * Use [`globalState`](#_ExtensionContext.globalState) to store key value data.
 */
globalStoragePath: string;

當移除擴充功能時,VS Code 會負責清除此路徑。

注意:目前使用自訂檔案系統位置來跨工作區儲存狀態的擴充功能作者應切換到此新的 API。

CodeActionKind.intersects

CodeActionKind.intersects 方法可用於檢查 CodeActionProvider 是否應費心計算其程式碼動作

import * as vscode from 'vscode';

export class OrganizeImportsProvider implements vscode.CodeActionProvider {
    public provideCodeActions(
        document: vscode.TextDocument,
        range: vscode.Range,
        context: vscode.CodeActionContext,
        token: vscode.CancellationToken
    ): vscode.CodeAction[] {
        // Only return organize imports actions if they were explicitly requested
        // We can check this using `intersects`.
        if (!context.only || !vscode.CodeActionKind.SourceOrganizeImports.intersects(context.only)) {
            // Organize imports actions were not requested
            return [];
        }

        // Organize imports was requested
        ...
    }
}

contributes.resourceLabelFormatters

擴充功能現在可以貢獻資源標籤格式器,這些格式器指定如何在工作台中的任何位置顯示 URI。例如,以下是如何讓擴充功能為具有配置 remotehub 的 URI 貢獻格式器

"contributes": {
   "resourceLabelFormatters": [
        {
            "scheme": "remotehub",
            "formatting": {
                "label": "${path}",
                "separator": "/",
                "workspaceSuffix": "GitHub"
            }
        }
    ]
}

這表示所有具有配置 remotehub 的 URI 都將僅透過顯示 URI 的 path 區段來呈現,而分隔符號將為 /。具有 remotehub URI 的工作區,其標籤中將具有 GitHub 後綴。

將引數新增至鍵盤繫結

package.json 中定義鍵盤繫結時,您現在可以定義引數。執行時,這些引數會傳遞至命令。

在以下範例中,它是:{foo: 1, bar: 2}

"keybindings": {
  "key": "cmd+i",
  "command": "myCommand",
  "args": {
    "foo": 1,
    "bar": 2
  }
}

完全控制 createTerminal 環境

新的設定 TerminalOptions.strictEnv 設定為 true 時,將完全不會對終端機環境進行任何修改,而是會完全按照擴充功能傳入的方式使用。

// This will create a terminal whose environment only contains the single value
// FOO=BAR.
const terminal = createTerminal({
  name: 'Test terminal',
  env: {
    FOO: 'BAR'
  },
  strictEnv: true
});

Node.js 更新

VS Code 在其上執行的 Electron 版本已更新,隨之而來的是 Node.js 從 8.9 更新到 10.2.0。所有擴充功能現在都將在此較新版本的 Node.js 上執行。請參閱 Node v10.0.0 棄用 以取得 Node.js 10 中棄用的清單。

更新的 Octicons

我們已將 Octicons 版本更新為 8.3.0,現在支援以下圖示

Octicons update

  • $(arrow-both)
  • $(bold)
  • $(color-mode)
  • $(eye-closed)
  • $(fold-down)
  • $(fold-up)
  • $(grabber)
  • $(italic)
  • $(kebab-horizontal)
  • $(kebab-vertical)
  • $(note)
  • $(organization-filled)
  • $(person-filled)
  • $(project)
  • $(request-changes)
  • $(screen-full)
  • $(screen-normal)
  • $(smiley)
  • $(tasklist)
  • $(text-size)
  • $(unverified)
  • $(verified)

您可以閱讀我們的文件以查看我們支援的圖示完整清單。如需變更的完整詳細清單,請參閱 Octicon 變更記錄

建議的擴充功能 API

每個里程碑都帶有新的建議 API,擴充功能作者可以試用它們。與往常一樣,我們渴望您的意見反應。這是您試用建議 API 必須做的事情

  • 您必須使用 Insiders 版本,因為建議 API 經常變更。
  • 您必須在擴充功能的 package.json 檔案中包含此行:"enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts 檔案複製到您的專案中。

請注意,您無法發佈使用建議 API 的擴充功能。我們可能會在下一個版本中進行重大變更,而且我們絕不想破壞現有的擴充功能。

SignatureHelpContext.activeSignatureHelp

建議的 SignatureHelpContext.activeSignatureHelp 欄位會追蹤先前作用中的簽章

import * as vscode from 'vscode';

class MySignatureHelpProvider implements vscode.SignatureHelpProvider {
    provideSignatureHelp(
        document: vscode.TextDocument,
        position: vscode.Position,
        token: vscode.CancellationToken,
        context: vscode.SignatureHelpContext
    ): vscode.ProviderResult<vscode.SignatureHelp> {
        // The active signature help when this provider was triggered or undefined if
        // no signature help was active.
        console.log(context.activeSignatureHelp);

        ...
    }
}

提供者可以使用此欄位來追蹤在重新觸發簽章說明提供者之前選取了哪個多載。

自動修正和 CodeAction.isPreferred

Code Action API 為 VS Code 的快速修正 (您在編輯器中看到的燈泡) 提供支援。雖然給定錯誤可能有很多快速修正,但通常其中一個快速修正是解決問題最合理的方法。例如,修正拼字錯誤通常比產生新欄位更可能是修正方法

The fix spelling Quick Fix is usually more reasonable than generating properties

透過使用建議 API,擴充功能可以在 CodeAction 上設定 isPreferred,以指示這是解決基礎問題最合理的方法。可以使用自動修正命令自動套用慣用的修正 (⌥⌘. (Windows、Linux Shift+Alt+.))

After applying an auto fix to the error

慣用的快速修正通常應

  • 正確修正基礎錯誤 (而不是抑制它)。
  • 成為錯誤的合理修正方法。
  • 不要意外地執行大量的操作。

重構程式碼動作也可以標記為「偏好」,以表示它們是最合理的重構方式。例如,當有多個 Extract constant (提取常數) 重構可用時,使用者通常只想提取到最近的區域變數。如果該重構程式碼動作被標記為 isPreferred,使用者可以為其設定單一的快捷鍵

{
  "key": "ctrl+shift+r ctrl+e",
  "command": "editor.action.codeAction",
  "args": {
    "kind": "refactor.extract.constant",
    "preferred": true
  }
}

修正所有來源動作

提議的 source.fixAll CodeActionKind 為擴充功能建立了一個慣例,使其能夠自動修正檔案中的錯誤。這種新的來源動作種類與 Organize imports (整理匯入) 類似,並且可以輕鬆地為「修正所有」動作設定快捷鍵,或是在儲存時啟用自動修正。

// On save, run both fixAll and organizeImports source actions
"editor.codeActionsOnSave": {
    "source.fixAll": true,
    "source.organizeImports": true,
}

TSLint 擴充功能 已經使用這個提議的來源程式碼動作種類來實作「修正所有」和「儲存時自動修正」功能。

偵錯配接器協定

提議的資料斷點偵錯配接器協定

作為 資料斷點 (又稱「監看點」) 正在進行工作的後續步驟,我們在資料斷點的偵錯配接器協定設計上取得了一些進展。提議的 DAP 變更位於這個 分支 上,而對應的 TypeScript API 可以在 資料斷點提案 中找到。

如果您有興趣在您的偵錯工具擴充功能中支援資料斷點,請查看提案並提供意見回饋。

即時主題編輯

當您開發色彩主題擴充功能時,您可以在 擴充功能開發主機 視窗中即時看到色彩變更的應用。

live theme editing

檔案圖示主題也適用。

工程

Electron 3.0 更新與 Electron 4.0 探索

在這個里程碑中,我們完成了將 Electron 3 捆綁到 VS Code 的探索,使其成為我們首次發布這個穩定版本的 Electron。這是一個主要的 Electron 版本發布,並帶有 Chrome 66 和 Node.js 10.x (與我們目前的版本 Chrome 61 和 Node.js 8.x 相比,是一大躍進)。

同時,我們開始探索更新到 Electron 4,我們希望很快能將其推送到 Insiders 版本。

效能資訊改善

在這個版本中,開發人員:啟動效能 命令輸出會顯示在編輯器中,而不再顯示在 DevTools 中。這使得它更易於閱讀且更快存取。此外,資訊的許多問題也已修正。

移除 WinJS.Promise ✅

當 VS Code 剛開始時,JavaScript 並不像今天這樣。例如,那時還沒有原生 Promise,因此團隊決定使用 WinJS.Promise 進行非同步工作。今天情況已不同:原生 Promise 已經存在,而 WinJS.Promise 已經過時。在去年年中,我們開始努力從程式碼庫中移除 WinJS.Promise,並在 12 月完成了這項工作。

嚴格的空值檢查

我們持續進行 對 VS Code 主要程式碼庫進行嚴格空值檢查 的工作。感謝 您的協助,在這個里程碑中,我們能夠為大量的測試檔案啟用嚴格空值檢查,從而消除了大量錯誤。

我們將在下一個里程碑中繼續進行嚴格空值檢查的工作。

擴充功能貢獻

我們的團隊維護或貢獻了許多 VS Code 擴充功能。本月最值得注意的是

TSLint 支援

新的 TSLint 擴充功能現在支援使用 source.fixAll 程式碼動作來實作「儲存時自動修正」功能。

"editor.codeActionsOnSave": {
    "source.fixAll": true
}

我們建議所有已棄用的 TSLint (eg2.tslint) 擴充功能使用者遷移到新的 TSLint 擴充功能。

Stylus 語言支援

Stylus 語言擴充功能 現在使用來自 vscode-css-languageservice 的精選資料,以提供具有狀態警告和語法文件的最新完成項目。

Stylus completion

GitHub 提取請求

在這個里程碑中,我們繼續致力於改進 GitHub 提取請求 擴充功能。

以下是一些新功能

  • GitHub 審閱支援。您現在可以將評論分組到 審閱 中,而不是個別新增。
  • 當工作區是 GitHub 儲存庫時,當您加入 Live Share 會議時,此擴充功能可以無縫運作。
  • 我們逐步將 GraphQL 引入專案中,因此描述檢視現在可以呈現更詳細的提取請求資訊,並且擴充功能的整體效能也得到了提升。
  • 現在,當合併提取請求時,您可以選擇 建立合併提交Squash and MergeRebase and Merge
  • 效能改進。當您瀏覽提取請求、檔案變更和簽出提取請求時,我們減少了對 GitHub 的 API 呼叫和 git 操作,這使得擴充功能的回應速度更快,尤其是在 Windows 上。

您可以在 vscode-pull-request-github 版本資訊 閱讀此擴充功能的完整版本資訊。

新文件

Python Jupyter Notebooks

一個新的 使用 Jupyter Notebooks 主題描述了如何從 VS Code 內部開啟、偵錯和匯出 Jupyter Notebooks

JavaScript 和 TypeScript 文件改進

我們已更新 JavaScript 和 TypeScript 文章,以確保它們是最新的,並提供更多有用的資訊。

JavaScriptTypeScript 頁面現在提供了 VS Code 為這些語言提供的功能概述。這些功能的更詳細說明和教學課程已移至目錄中 Node.js / JavaScriptTypeScript 下的新頁面。

更新的擴充功能 API 文件

對於擴充功能作者而言,VS Code API 文件已重新編寫並移至其自己的目錄。

API TOC on VS Code website

在這裡您可以找到文章來

值得注意的修正

  • 7570: VS Code 無法離線開啟
  • 14372: 擴充功能:停用狀態需要在視窗之間傳達
  • 34396: 單 CPU VM 上的高 CPU 使用率
  • 58167: 恢復作業系統後,終端機和迷你地圖還原紋理已損壞
  • 59794: 當 editor.accessibilitySupport 設定為 'auto' 時,終端機螢幕閱讀器支援無法運作
  • 61649: 偵錯無法讀取未定義的屬性 'onError'
  • 63832: 偵錯擴充功能時無法附加到 lsp 伺服器
  • 64948: GDB C/C++ 偵錯工具無法啟動,並出現錯誤
  • 65697: 在節點叢集 fork 程序上,不遵守具有 autoAttachChildProcesses 的偵錯 stopOnEntry
  • 66302: Ctrl + L 預設應綁定到清除 repl
  • 66681: 虛擬文件未顯示「選取以進行比較」和「與選取項目比較」命令

此版本還包含 Microsoft 安全回應中心 CVE-2019-0728 的安全性更新。

感謝您

最後但同樣重要的是,非常感謝以下人士協助讓 VS Code 變得更好

貢獻於我們的問題追蹤。如果您想幫助我們管理湧入的問題,請參閱我們的 社群問題追蹤 頁面。

貢獻於 vscode

貢獻於 vscode-eslint

貢獻於 language-server-protocol

貢獻於 vscode-languageserver-node

貢獻於 debug-adapter-protocol

貢獻於 vscode-vsce

貢獻於 vscode-json-languageservice

  • @abc-55: 修正了允許註解但不允許尾隨逗號時的錯誤 PR #35

貢獻於 vscode-css-languageservice

貢獻於 vscode-html-languageservice

貢獻於 vscode-generator-code

貢獻於 vscode-recipes

貢獻於 localization

有超過 600 位 Cloud + AI Localization 社群成員正在使用 Microsoft Localization Community Platform (MLCP),其中約有 100 位活躍貢獻者參與 Visual Studio Code。

我們感謝您的貢獻,無論是提供新的翻譯、對翻譯進行投票,還是建議流程改進。

這是 貢獻者 的快照。如需專案的詳細資訊,包括貢獻者姓名列表,請造訪專案網站:https://aka.ms/vscodeloc

  • 保加利亞語: Любомир Василев。
  • 捷克語: Samuel Tulach。
  • 丹麥語: Johan Fagerberg。
  • 荷蘭語: Jos Verlinde,Eric Algera。
  • 芬蘭語: Petri Niinimäki, Valtteri Vatanen。
  • 法語: Mohamed Sahbi, Thomas Gouthière。
  • 德語: Frank Lindecke,Hans Meiser,Jakob von der Haar,Sebastian Seidl。
  • 希伯來語: Kyle Orin。
  • Hindi: 印地語:Satish Yadav,nirav adatiya,shaswat rungta,Dhanvi Kapila。
  • Hungarian: 匈牙利語:Péter Nagy。
  • Chinese Simplified: 簡體中文:福永 叶, Xiangrui Kong, Licheng Ren, Young Bige, 文 陈, Y F, 彦佐 刘, 九鼎 谭。
  • Indonesian: 印尼語:Azhe Kun。
  • Italian: 義大利語:Michael Longo。
  • Japanese: 日語:nh,Masakazu TENMYO, 裕子 知念。
  • Korean: 韓語:SeungJin Jeong。
  • Norwegian: 挪威語:Stephan Eriksen。
  • Polish: 波蘭語:grzegorz m, Jakub Jedryszek。
  • Portuguese (Brazil): 葡萄牙語 (巴西):Bruno Talanski, Alan Willian, Letticia Nicoli, Alessandro Fragnani, Cynthia Zanoni。
  • Portuguese(Portugal): 葡萄牙語 (葡萄牙):Vitor Barbosa。
  • Spanish: 西班牙語:Engel Aguilar, José María Aguilar, julian3xl, Alvaro Enrique Ruano, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta。
  • Tamil: 坦米爾語:Mani M。
  • Turkish: 土耳其語:Muhammed Emin TİFTİKÇİ。
  • Ukrainian: 烏克蘭語:Did Kokos。
  • Vietnamese: 越南語:Việt Anh Nguyễn。