在 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 上的更新
您还可以观看由云开发者倡导者 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 区域。

改进的键盘导航

现在树形控件中有三种不同的键盘导航类型:simple(简单)、highlight(高亮)和 filter(筛选)。在 highlightfilter 模式下,在树形控件中输入将显示一个控件(widget),位于树形控件顶部,指示您正在导航树形控件

Keyboard navigation type filter

此控件也可用于在 highlightfilter 模式之间切换。如果您想要一个在模式之间切换的键盘快捷键,可以配置一个键绑定来执行 list.toggleFilterOnType 命令。工作台 > 列表:键盘导航 (workbench.list.keyboardNavigation) 设置会设置默认模式,包括 simple 模式,在该模式下键入树形元素的前几个字符只会聚焦该元素。

为列表/树形操作设置了单字母键绑定的用户仍然可以通过使用 listAutomaticKeyboardNavigation 上下文键来使用此功能。例如,VIM 扩展将此上下文键设置为 false 以禁用自动键盘导航,并将键绑定 / 添加到 list.toggleKeyboardNavigation 命令,这样用户只需键入 / 即可导航树形控件。在VSCodeVIM 拉取请求中了解更多信息。

主题作者可以使用以下新的主题键自定义控件的颜色

  • 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 标签查看我们正在进行的工作。

引用历史记录

现在“引用”视图新增了引用:显示历史记录命令。它会弹出包含之前搜索结果的 Quick Pick,从而快速重新运行之前的搜索。

Reference search history

引用 CodeLens

选择引用 CodeLens 时,会打开一个速览编辑器。现在可以通过 references.preferredLocation 设置来控制此行为。其选项为 peek(速览)和 view(视图),后者在新视图中显示引用。

代码片段描述

过去,在创作带有长描述的代码片段时,您被迫编写一个长单字符串。不像 body 那样,不支持使用数组。现在情况有所改变,可以使用字符串数组编写长描述。

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

移除了旧版搜索模式

20 个版本之前,我们开始在 VS Code 中使用 ripgrep 进行搜索。我们旧的基于 Node.js 的搜索实现仍然可以通过设置 search.useLegacySearch 使用。但是正如 Marie Kondo 所说,我们必须整理那些不再带来快乐的东西。如果您一直在使用反向引用或前瞻等正则表达式功能,请确保打开 search.usePCRE2 设置。

使用简单的文本编辑器编辑 JSON 格式的设置

类似地,既然我们已经有了几个版本的设置 UI,我们正在考虑简化 JSON 设置编辑体验。如果您通过打开 settings.json 文件、单击设置 UI 中的 {} 按钮或调用首选项:打开用户设置 (JSON) 命令来以 JSON 格式编辑设置,那么您将获得一个简单的 JSON 编辑器,而不是我们之前使用的分屏 JSON 编辑器。您仍然可以使用首选项:打开默认设置 (JSON) 命令查看默认设置列表。

如果您确实想念左侧带有默认设置的分屏 JSON 编辑器,可以通过启用 workbench.settings.useSplitJSON 设置来恢复它。请注意,如果您喜欢以 JSON 格式编辑设置,您将始终能够这样做。

扩展的网络代理支持

设置Http: 代理支持 (http.proxySupport) 现在默认对所有扩展启用网络代理支持。

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 Insiders 快速通道 (内部版本号 18309+) 中选择启用通过 Windows ConPTY API 管理终端进程。

{
  "terminal.integrated.windowsEnableConpty": true
}

这将使用 Windows Console 团队提供的 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 属性/伪类提供补全和悬停提示

{
  "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>;

注意:引入新贡献点的扩展作者应监听此事件并相应地更新工作台的状态。

在浏览器中打开资源

我们注意到,许多扩展使用 opnopen 等 Node 模块在浏览器中打开 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。例如,以下是一个扩展如何为 scheme 为 remotehub 的 URI 贡献格式化程序

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

这意味着所有 scheme 为 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
  }
}

Fix All 源操作

提议的 source.fixAll CodeActionKind 为能够自动修复文件中错误的扩展建立了一种约定。这种新的源操作类型类似于组织导入,并使配置所有修复操作的快捷键或在保存时启用自动修复变得容易。

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

TSLint 扩展已经使用这种提议的源代码操作类型来实现全部修复和保存时自动修复。

Debug Adapter Protocol

提议的数据断点 Debug Adapter Protocol

作为数据断点(也称为“watchpoints”)持续工作的后续步骤,我们在数据断点的 Debug Adapter Protocol 设计上取得了一些进展。提议的 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 Pull Requests 扩展。

以下是一些新功能:

  • 支持 GitHub Review。您现在可以将评论分组到审查中,而不仅仅是单独添加。
  • 当工作空间是 GitHub 仓库时,您加入 Live Share 会话时,该扩展可以无缝工作。
  • 我们逐步将 GraphQL 引入项目,因此描述视图现在显示更详细的拉取请求信息,并且扩展的整体性能得到了提升。
  • 合并拉取请求时,您现在可以选择创建合并提交压缩并合并变基并合并
  • 性能改进。浏览拉取请求、文件更改和检出拉取请求时,我们减少了对 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 虚拟机上 CPU 占用率高
  • 58167:恢复操作系统后终端和缩略图的恢复纹理损坏
  • 59794:当 editor.accessibilitySupport 设置为 'auto' 时终端屏幕阅读器支持不起作用
  • 61649:调试时无法读取 undefined 的属性 'onError'
  • 63832:调试扩展时无法附加到 lsp 服务器
  • 64948:GDB C/C++ 调试器无法启动并报错
  • 65697:对于 node cluster 分叉进程,使用 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:修复了允许注释但不允许尾随逗号时的 bug PR #35

vscode-css-languageservice 的贡献

vscode-html-languageservice 的贡献

vscode-generator-code 的贡献

vscode-recipes 的贡献

localization 的贡献

有超过 600 名 Cloud + AI 本地化社区成员使用 Microsoft 本地化社区平台 (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, 彦佐 刘, 九鼎 谭。
  • 印度尼西亚语: Azhe Kun。
  • 意大利语: Michael Longo。
  • 日语: nh,Masakazu TENMYO, 裕子 知念。
  • 韩语: SeungJin Jeong。
  • 挪威语: Stephan Eriksen。
  • 波兰语: grzegorz m, Jakub Jedryszek。
  • 葡萄牙语(巴西): Bruno Talanski, Alan Willian, Letticia Nicoli, Alessandro Fragnani, Cynthia Zanoni。
  • 葡萄牙语(葡萄牙): Vitor Barbosa。
  • 西班牙语: Engel Aguilar, José María Aguilar, julian3xl, Alvaro Enrique Ruano, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta。
  • 泰米尔语: Mani M。
  • 土耳其语: Muhammed Emin TİFTİKÇİ。
  • 乌克兰语: Did Kokos。
  • 越南语: Việt Anh Nguyễn。