🚀 在 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 事件來採用。

工作台

新的樹狀 Widget

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

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

改善的鍵盤導覽

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

Keyboard navigation type filter

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

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

主題作者可以使用下列新的主題金鑰自訂 Widget 的色彩:

  • 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 格式編輯設定,您將始終能夠以 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 快速通道 (組建編號 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。)
  • 或者,將 JSON 組合到具有 contributes.html.experimental.customDatacontributes.css.experimental.customData 的擴充功能中。
  • 最後,如果您正在撰寫使用 vscode-html-languageservicevscode-css-languageservice 的語言伺服器,您可以建立具有自訂資料的語言服務。

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

{
  "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 中取得。

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

擴充功能開發

擴充功能變更事件

新增了一個新的事件 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>;

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

在瀏覽器中開啟資源

我們觀察到,有幾個擴充功能使用節點模組 (例如 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

程式碼動作 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

偏好的快速修復通常應該

  • 正確地修正底層錯誤 (而不是抑制它)。
  • 成為針對該錯誤合理的修復方式。
  • 不會意外地執行大量的操作。

重構程式碼動作也可以標記為偏好,以表明它們是最合理的重構。例如,雖然可能有多個提取常數重構可用,但使用者通常只想提取到最近的區域變數。如果該重構程式碼動作標記為 isPreferred,使用者可以為其設定單一的快速鍵繫結

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

修正所有來源動作

建議的 source.fixAll CodeActionKind 為可以自動修正檔案中錯誤的擴充功能建立慣例。這種新的來源動作種類與組織匯入類似,並且可以輕鬆地為修正所有動作設定快速鍵繫結或在儲存時啟用自動修正

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

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

偵錯配接器協議

針對資料斷點的建議偵錯配接器協議

作為 正在進行的資料斷點工作 (又名 "watchpoints") 的後續步驟,我們在資料斷點的偵錯配接器協議設計方面取得了一些進展。建議的 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 月完成了這項工作。

嚴格的 null 檢查

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

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

擴充功能貢獻

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

TSLint 支援

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

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

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

Stylus 語言支援

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

Stylus completion

GitHub Pull Requests

在這個里程碑中,我們繼續致力於改進 GitHub Pull Requests 擴充功能。

以下是一些新功能

  • 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:在節點叢集分支程序上,具有 autoAttachChildProcesses 的偵錯 stopOnEntry 不起作用
  • 66302:預設情況下,Ctrl + L 應繫結到清除 repl
  • 66681:虛擬文件未顯示 "選取以進行比較" 和 "與選取項目比較" 命令

此版本還包含 Microsoft Security Response Center 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 本地化 社群成員使用 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。
  • 印地語: Satish Yadav、nirav adatiya、shaswat rungta、Dhanvi Kapila。
  • 匈牙利語: Péter Nagy。
  • 簡體中文: 福永 叶、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。