现已发布!阅读有关 11 月份的新功能和修复的介绍。

2018 年 7 月 (1.26 版本)

1.26.1 更新:此更新解决了这些 问题

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


欢迎使用 Visual Studio Code 2018 年 7 月版。此版本中有很多重大更新,我们希望您会喜欢,其中一些主要亮点包括

如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的 更新
您还可以观看来自云开发倡导者 Brian Clark 的这个 1.26 版本亮点视频

发行说明按与 VS Code 重点领域相关的以下部分进行组织。以下是一些进一步的更新

  • 工作台 - 新的视图菜单布局、复制相对路径操作、脱机模式。
  • 集成终端 - 改进的多行支持、渲染改进。
  • 语言 - 将命名导入转换为命名空间导入,JSX 折叠。
  • 调试 - 改进的停止会话和智能步进调试。
  • 预览功能 - Windows 和 Linux 的可主题化的自定义工具栏和菜单栏。
  • 扩展创作 - QuickInput API、extensionPack 声明、webview 标题栏图标。

内部人员:想尽快看到新功能吗?您可以下载每日内部人员构建版本,并在可用时立即尝试最新的更新。有关最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们 @code

工作台

面包屑

编辑器现在在其内容上方有一个导航栏 - 我们称之为面包屑。它显示当前位置,并允许您在符号和文件之间快速导航。要开始使用面包屑,请使用 视图 > 显示面包屑 命令或通过 breadcrumbs.enabled 设置启用它。

当使用编辑器选项卡(默认)时,面包屑显示在编辑器标题下方的单独一行中。如果您不使用编辑器选项卡,面包屑将显示为标题旁边的交互式文件路径。

Breadcrumbs enabled

面包屑始终显示文件路径,并在扩展的帮助下,显示光标位置的符号路径。显示的符号与大纲视图和转到符号中的符号相同,因此现有的扩展将与面包屑一起使用。

可以自定义面包屑的外观。如果您有非常长的路径或仅对文件路径或符号路径感兴趣,可以使用 breadcrumbs.filePathbreadcrumbs.symbolPath 设置。两者都支持 onofflast,它们定义您看到路径的哪个部分或是否看到。

要与面包屑交互,请使用 聚焦面包屑 命令或按 ⇧⌘. (Windows,Linux Ctrl+Shift+.)。它将选择最后一个元素并打开一个下拉菜单,允许您导航到同级文件或符号。使用 (Windows,Linux Left) (Windows,Linux Right) 键盘快捷键转到当前元素之前或之后的元素。当下拉菜单出现时,只需开始键入 - 所有匹配的元素都将被突出显示,并且将选择最佳匹配以进行快速导航。

Breadcrumbs active

您也可以在没有选择器的情况下与面包屑进行交互。按 ⇧⌘; (Windows,Linux Ctrl+Shift+;) 聚焦最后一个元素,使用 (Windows,Linux Left) (Windows,Linux Right) 进行导航,并使用 空格 在编辑器中显示该元素。

问题面板快速修复

现在,您可以从“问题”面板应用快速修复。当您悬停或选择问题条目时,会显示一个指示快速修复的灯泡。可以通过单击灯泡或打开问题条目的上下文菜单来应用快速修复。

Quick fixes

注意:只有当贡献快速修复的扩展程序提供与快速修复关联的诊断信息时,才会显示灯泡指示器。

Windows 的用户安装

在上次发布中宣布的 Windows 用户安装程序包现在可在稳定版上使用。安装用户安装程序不需要管理员权限,因为该位置将在您的用户本地应用程序数据 (LOCALAPPDATA) 文件夹下。用户安装程序还提供了更流畅的后台更新体验。

下载用户安装程序

如果您是系统范围的 Windows 安装程序的当前用户,系统将提示您安装用户安装程序,我们建议您从现在开始使用该安装程序。请放心,在转换过程中,您所有的设置和扩展都将保留。在安装过程中,系统还会提示您卸载系统范围的安装程序。

网格:自动最大化最小化的编辑器

在上一个里程碑中引入网格编辑器布局期间,我们失去了一个功能,即当您聚焦处于最小化状态的编辑器时,编辑器会自动最大化。此功能现在像以前一样工作

Grid maximize

注意:您始终可以通过视图:最大化编辑器组 (workbench.action.minimizeOtherEditors) 最大化活动编辑器,或者通过视图:重置编辑器组大小 (workbench.action.evenEditorWidths) 重置所有编辑器的大小。

视图菜单清理

视图菜单变得非常大,我们决定将许多条目移动到一个单独的外观子菜单中以进行清理。

View menu

复制相对路径

VS Code 始终有一个将文件的绝对路径复制到剪贴板的操作 (⌘K ⌥⌘C (Windows Shift+Alt+C, Linux Ctrl+K Ctrl+Alt+C))。现在有一个新的操作复制相对路径 (⌘K ⇧⌥⌘C (Windows Ctrl+K Ctrl+Shift+C, Linux Ctrl+K Ctrl+Shift+Alt+C)) 可将文件路径复制到相对于工作区文件夹根目录的位置。

注意: 你可以通过上下文菜单(例如,在文件资源管理器中的选项卡或文件上)访问此操作,方法是在打开菜单之前按住 Shift 键(在 macOS 上是 Alt 键)。

自定义视图:文件资源装饰

显示文件资源的自定义视图现在将显示文件装饰(Git、问题)。你可以使用 explorer.decorations.colorsexplorer.decorations.badges 设置禁用它们,这些设置会禁用文件资源管理器、打开的编辑器和自定义视图中的装饰。

Custom view decorations

从 package.json 运行 npm 脚本

你现在可以从悬停提示(如下所示)或上下文菜单中运行 package.json 文件中的 npm 脚本。

npm script hover

打开文件夹 URI

如果某个扩展为该 URI 贡献了 FileSystemProvider,你现在可以在 VS Code 中将 URI 作为文件夹打开。我们引入了一个新的命令行参数 --folder-uri 来实现此操作。

如果你安装了 RemoteHub 扩展,则以下 CLI 命令会将 VS Code GitHub 存储库作为文件夹打开。

code --folder-uri remotehub://github.com/microsoft/vscode

Open folder URI

快速渲染

在启动时,现在可以更快地恢复基本的工作台布局。恢复顺序为活动栏、侧边栏和状态栏,然后是标题和图标,最后填充资源管理器和编辑器区域。

Rapid render

快速渲染旨在提高感知性能,因为你看到空白画布的时间减少了。我们还有更多关于如何提高渲染性能的想法,并且我们对你的反馈感兴趣。

输出面板

VS Code 的主进程、窗口进程和共享进程都有自己的日志通道,你现在可以在其中查看当日志级别设置为“跟踪”时发送的遥测事件。为了简洁起见,所有遥测事件的公共数据将不会在此处显示。每个遥测事件的完整有效负载都会记录在一个名为 telemetry.log 的单独日志文件中,你可以通过开发者:打开日志文件... 命令访问该文件。

离线模式

一些用户不希望 VS Code 发出任何传出网络请求,除非他们专门调用需要在线访问的功能。为了支持此离线模式,我们添加了新的设置来关闭诸如自动扩展更新检查、查询 A/B 实验设置以及获取自动完成在线数据等功能。

以下是控制 VS Code 发出网络请求的功能的完整设置列表

  • update.mode
  • update.showReleaseNotes
  • extensions.autoupdate
  • extensions.autoCheckUpdates
  • extensions.showRecommendationsOnlyOnDemand
  • workbench.settings.enableNaturalLanguageSearch
  • workbench.enableExperiments
  • telemetry.enableTelemetry
  • telemetry.enableCrashReporter
  • git.autofetch
  • npm.fetchOnlinePackageInfo

辅助功能改进

我们修复了大量辅助功能问题,主要围绕键盘导航、屏幕阅读器支持和颜色对比度。完整列表可以在这里找到。

集成终端

列选择

现在在集成终端中支持通过 Alt+单击 进行列选择。

Terminal column selection

改进的多行支持

现在,双击以选择终端中的单词会选择跨越多行的单词。

前端和后端现在已同步

进入集成终端的数据流现在与后端的伪终端/shell 进程同步。这意味着进入终端的数据不再会淹没 UI 线程并导致无响应,SIGINT (Ctrl+C) 应始终响应,并且 time 命令应返回准确的结果。

动态纹理图集

集成终端现在默认使用“动态纹理图集”进行画布渲染。这改变了终端用于存储字符字形的缓存策略。字形不再是默认背景上的一组固定字形,而是根据需要添加到纹理图集中,而不管使用的背景如何。这应该可以减少首次启动终端的时间,减少不使用默认背景的字符的渲染时间,并提高整体渲染性能。

这是对 xterm.js 的上游社区贡献。

语言

TypeScript 3.0

VS Code 现在附带 TypeScript 3.0.1。此重大更新带来了对项目引用、更好地支持元组以及其他语言和工具功能的支持。你可以在这里阅读更多关于 TypeScript 3.0 的信息。

更好的错误报告

TypeScript 团队做了大量工作,使 JavaScript 和 TypeScript 错误消息更加智能和清晰。现在,一些错误消息包含指向源代码中相关位置的链接。

Related locations showing in a diagnostic. Clicking on 'box.ts' will show the definition of 'width' in 'box'

用于联合和其他复杂类型的消息也应该更简洁和有用。例如,JSX 中的简单类型错误有时会产生如下复杂的错误消息

How this simple type error used to be reported by TypeScript 2.8

多亏了 TypeScript 3.0,错误在 VS Code 1.26 中更具可读性

How the error is now reported

JSX 标签完成

现在,当你在 JavaScript 或 TypeScript 文件中键入 > 时,会自动关闭 JSX 标签

Tag completion of JSX tags

此行为与 VS Code 在 HTML 文件中提供的行为一致。可以通过设置 "javascript.autoClosingTags": false"typescript.autoClosingTags": false 来禁用标签的自动关闭。

添加所有缺失的导入快速修复

现在可以将添加缺失的导入快速修复应用于 JavaScript/TypeScript 文件中的所有缺失的导入

Adding multiple missing imports with a single quick fix

此快速修复只会为具有单个潜在定义的符号添加导入。如果当前项目中有多个符号的潜在定义,例如,有两个不同的文件导出一个名为 Button 的符号,则你必须快速修复单个错误并选择你想要的特定导入。

要在 JavaScript 文件中使用此快速修复,请启用语义检查

JSX 折叠

现在,当使用 语法感知折叠 时,JSX 标签是可折叠的。

Folding JSX tags

在命名导入和命名空间导入之间转换

两个新的重构使你可以在 JavaScript 和 TypeScript 中快速地在命名导入和命名空间导入之间转换

convert to namespace import

通过 Ctrl 单击项目引用路径(macOS 上为 Cmd+单击)快速导航 jsconfig.jsontsconfig.json 项目引用

Cmd click on the path to open the referenced project's tsconfig

extends 路径现在也是可点击的。

调试

改进的停止调试行为

在之前的版本中,调试:停止操作(在调试工具栏上找到)始终会立即杀死调试目标及其子进程,而不会让调试目标有机会优雅地清理。一些用户不喜欢此行为,因为他们被迫在停止调试会话后进行手动清理。

在此版本中,我们以下列方式改进了调试:停止操作

  1. 首次按 停止 时,调试目标不再立即被杀死,而是被请求优雅地关闭(并根据需要清理所有内容)。

  2. 如果关闭代码中没有断点(或问题),则调试目标和调试会话将终止。用户在行为上不会看到与以前版本的 VS Code 有任何差异。

  3. 但是,如果调试器在关闭代码中遇到断点,或者调试目标本身没有正确终止,则调试会话将不会结束。

  4. 在这种情况下,再次按 停止 按钮将强制终止调试目标。因此,如果你看到当你按下红色 停止 按钮时调试会话没有结束,请再次按下按钮以强制关闭调试目标。

注意:此功能仅受已选择实现该功能的调试器扩展支持。目前,这只是内置的 Node.js 调试器。我们希望其他调试扩展能够尽快支持此功能。

更改了 Node/Chrome 调试的 smartStep 行为

以前,"smartStep": true 会导致 Node.js 调试器不在没有源映射的源代码中停止。这可以通过两种方式发生

  • 根本没有源映射的文件(未转换的源代码或随节点模块一起提供的 .js 文件)。
  • 已转换的文件,这些文件确实具有源映射,但有一些未映射的行(TypeScript 在向下编译某些功能(如 async/await)时插入的额外行)。

在 VS Code 1.26 中,"smartStep": true 只会影响第二种类型,即源映射中缺失的行。现在,你将能够逐步进入 .js 文件,同时仍然跳过 TS async/await 代码。

我们更改此行为是因为我们意识到旧的 smartStep 行为过于激进。跳过插入的代码通常是正确的,但对于某些项目和用户而言,仅在第一种情况下跳过才有意义。此外,在 launch.json 配置文件中使用 skipFiles 选项可以更好地覆盖整个文件的情况,因为它能够更精确地定位文件并且速度更快。

因此,如果你正在使用 smartStep 并且注意到调试器不再自动跳过没有源映射的文件,则可以使用 skipFiles 来恢复之前的行为。有关如何配置 skipFiles 以跳过 node_modules、内部节点文件或任何你不想逐步执行的其他文件中的源代码的示例,请参阅 跳过不感兴趣的代码

扩展

此版本通过向扩展搜索字段添加 IntelliSense 自动完成功能,使搜索扩展更容易。这将帮助你改进扩展搜索,以根据类别和安装状态等内容过滤结果;或按名称、评级或安装计数对结果进行排序。键入“@”或 ⌃Space (Windows, Linux Ctrl+Space) 以触发对受支持的查询参数的建议。

Extension Search IntelliSense

扩展包管理

在此版本中,扩展包的管理变得更加顺畅。扩展包的安装、卸载、启用或禁用始终作为一个整体进行。您现在还可以卸载或禁用属于扩展包的某个扩展,而无需卸载或禁用整个扩展包。

在您打开扩展详情时,还会有一个新的 扩展包 选项卡,显示该扩展包中捆绑了哪些扩展。

Extension Pack

注意: 这需要扩展包进行适配。有关更多详细信息,请参阅扩展包重新审视

从命令行禁用扩展

您现在可以使用新的参数 --disable-extension 从命令行禁用扩展。

  • code <folder_path> --disable-extension ms-python.python - 打开文件夹时禁用 ms-python.python 扩展。
  • code <folder_path> --disable-extension ms-python.python --disable-extension ms-dotnettools.csharp - 打开文件夹时禁用 ms-python.pythonms-dotnettools.csharp 扩展。

预览功能

预览功能尚未准备好发布,但功能足以使用。我们欢迎您在开发过程中提供早期反馈。

新的设置编辑器

在这个里程碑中,我们继续开发用于编辑设置的 GUI。它仍然是预览版,但如果您想试用它,可以使用 首选项:打开设置(预览) 命令打开它。我们希望听到您的任何反馈 - 您可以在 此 GitHub 问题 上留下反馈。

New Settings editor

与上个月相比,一些新的变化是:

  • 标头 UX 已刷新和清理,并且仅显示修改的设置以及打开 JSON 编辑器的操作已移至右侧的 ... 菜单下。
  • 左侧的目录现在默认折叠,并在您滚动时展开以显示当前部分。
  • 设置说明现在以 Markdown 格式呈现。某些设置具有相关文档的外部链接,并且对其他设置的引用现在是可单击的链接,这些链接会滚动到该设置。枚举类型设置的 enumDescriptions 现在显示在设置描述之后(并且在 JSON 编辑器中也显示)。

setting links and Markdown

  • 用于 files.excludesearch.exclude 设置的新控件使添加或删除 glob 模式,以及查看当前作用域应用了哪些模式变得更加容易。

new exclude control

  • 设置编辑器中的控件现在可以主题化。请参阅 新的主题颜色 下的新主题颜色。

Windows/Linux 的自定义标题栏和菜单

在这个里程碑中,当启用自定义标题栏时,我们改进了 Windows 和 Linux 上的自定义菜单。虽然仍在预览中,您可以通过在 settings.json 中将 window.titleBarStyle 设置为 custom 来试用它。

一些亮点包括:

  • 菜单现在可以主题化。请参阅 新的主题颜色 下的新主题颜色。

    Themed Menus

  • 键盘和鼠标与菜单的交互更加连贯。之前,有几个焦点指示器使菜单不清晰。现在,菜单的功能方式更加熟悉。

  • 许多可访问性问题已得到解决,以改善需要较大缩放级别或使用屏幕阅读器的用户的体验。

我们将继续改进新的菜单和标题栏,并解决使用 workbench-titleworkbench-menu 标签标记的问题。

扩展创作

QuickInput API

QuickPickInputBox API 现在是稳定的。它们允许比现有的 showQuickPickshowInputBox API 更灵活地收集用户输入。在示例扩展中提供了 QuickInput API 用法的示例。

Multi-step input sample

扩展包重新审视

定义扩展包现在使用 package.json 中的新属性 extensionPack 而不是 extensionDependencies。这是因为 extensionDependencies 主要用于定义扩展之间的功能依赖关系,这会阻止在不卸载或禁用依赖扩展的情况下卸载或禁用扩展依赖项。

扩展包不应与其捆绑的扩展程序有任何功能依赖关系,并且应独立于该包进行管理。下面是一个示例 extensionPack 条目,它定义了一个捆绑了多个调试器扩展程序的扩展包。

"extensionPack": [
    "andreweinand.mock-debug",
    "ms-vscode.mono-debug",
    "ms-vscode.cpptools",
    "ms-dotnettools.csharp",
    "vscjava.vscode-java-debug"
]

这将使用户管理扩展包及其捆绑的扩展程序变得更加简单容易。请参阅扩展包管理

更好的工作区编辑

扩展了 WorkspaceEditapplyEdit API,以允许扩展创建、重命名和删除文件。之前,仅可以进行文本编辑。新的 API 允许更好的重构;例如,在更改类名时重命名文件。

新的主题颜色

面包屑有新的主题颜色

  • breadcrumb.foreground:面包屑项的颜色。
  • breadcrumb.focusForeground:聚焦的面包屑项的颜色。
  • breadcrumb.activeSelectionForeground:选定的面包屑项的颜色。
  • breadcrumbPicker.background:面包屑项选择器的背景颜色。

新的设置编辑器的控件现在可以主题化

  • settings.headerForeground:节标题或活动标题的前景色。
  • settings.modifiedItemForeground:已修改设置指示器的前景色。
  • settings.inactiveSelectedItemBorder:当设置列表没有焦点时,选定设置行边框的颜色。
  • settings.dropdownBackground:下拉列表背景。
  • settings.dropdownForeground:下拉列表前景色。
  • settings.dropdownBorder:下拉列表边框。
  • settings.checkboxBackground:复选框背景。
  • settings.checkboxForeground:复选框前景色。
  • settings.checkboxBorder:复选框边框。
  • settings.textInputBackground:文本输入框背景。
  • settings.textInputForeground:文本输入框前景色。
  • settings.textInputBorder:文本输入框边框。
  • settings.numberInputBackground:数字输入框背景。
  • settings.numberInputForeground:数字输入框前景色。
  • settings.numberInputBorder:数字输入框边框。

Windows 和 Linux 上的自定义菜单现在可以主题化

  • menu.background:菜单和上下文菜单的背景。
  • menu.foreground:菜单和上下文菜单的前景色。
  • menu.selectionBackground:菜单和上下文菜单中选定项的背景。
  • menu.selectionForeground:菜单和上下文菜单中选定项的前景色。
  • menu.selectionBorder:菜单和上下文菜单中选定项的边框。
  • menubar.selectionBackground:菜单栏中选定顶级菜单的背景。
  • menubar.selectionForeground:菜单栏中选定顶级菜单的前景色。
  • menubar.selectionBorder:菜单栏中选定顶级菜单的边框。

更新了默认主题颜色

作为我们可访问性改进的一部分,我们更新了一些默认主题颜色,以确保它们满足颜色对比度要求。颜色对比度修复的完整列表可以在此处找到。

定义提供程序现在可以返回 DefinitionLink 对象。定义链接提供了关于普通 位置 定义的附加元数据,包括定义符号的范围。

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  vscode.languages.registerDefinitionProvider('markdown', new LineLinkDefinitionProvider());
}

export class LineLinkDefinitionProvider implements vscode.DefinitionProvider {
  async provideDefinition(
    document: vscode.TextDocument,
    position: vscode.Position,
    token: vscode.CancellationToken
  ): Promise<vscode.DefinitionLink[]> {
    const wordRange = document.getWordRangeAtPosition(position, /<\d+>/);
    if (wordRange.isEmpty) {
      return [];
    }

    const targetLine = +document.getText(wordRange).slice(1, -1);
    return [
      {
        // Definition location
        targetRange: new vscode.Range(targetLine - 1, 0, targetLine, 0),
        targetUri: document.uri,

        // Range of the defining symbol
        originSelectionRange: new vscode.Range(
          wordRange.start.translate({ characterDelta: 1 }),
          wordRange.end.translate({ characterDelta: -1 })
        )
      }
    ];
  }
}

调试扩展

调试适配器协议的新家

我们已将 调试适配器协议 从其旧位置移至新网站 https://microsoft.github.io/debug-adapter-protocol 和相应的存储库 https://github.com/microsoft/debug-adapter-protocol

配套博客 调试适配器协议的新家 提供了关于此移动的背景和更多详细信息。

所有从旧位置 https://raw.githubusercontent.com/Microsoft/vscode-debugadapter-node/main/debugProtocol.json 以编程方式使用 DAP JSON 架构的人都应该将其源代码更新到新位置。

https://microsoft.github.io/debug-adapter-protocol/debugAdapterProtocol.json

在接下来的两个版本(8 月和 9 月)中,我们将使旧位置的架构保持最新,但我们计划在 10 月将其删除。

调试适配器协议的新 terminate 请求

为了支持优雅地关闭被调试的程序(如上面所述),已在 调试适配器协议 中添加了新的 terminate 请求和相应的 supportsTerminateRequest 功能。如果调试适配器为 supportsTerminateRequest 功能返回 true,则 VS Code 将在停止调试会话时首先向调试适配器发送 terminate 请求。调试适配器中 terminate 请求的实现应请求被调试的程序自行终止。在基于 Unix 的操作系统上,这可以通过向被调试的程序发送 SIGINT 信号轻松实现。

Webview 图标

Webview 现在可以提供在选项卡栏和打开的编辑器视图中显示的自定义图标

import * as vscode from 'vscode';
import * as path from 'path';

export function activate(context: vscode.ExtensionContext) {

    context.subscriptions.push(vscode.commands.registerCommand('catCoding.start', () => {
        const panel = vscode.window.createWebviewPanel('catCoding',
            "Coding Cat", vscode.ViewColumn.One, { });

        panel.iconPath = vscode.Uri.file(path.join(context.extensionPath, 'media', 'cat.png'));
    });
}

A webview with a custom icon

终端访问 API

终端访问 API 现在是稳定的。它们允许扩展程序访问 Terminal 对象,无论扩展程序是否创建了它们。

export namespace window {
  export const terminals: ReadonlyArray<Terminal>;
  export const onDidOpenTerminal: Event<Terminal>;
}

URI 处理程序 API

URI 处理程序 API 现在是稳定的。它允许扩展程序处理系统范围的 URI

export interface UriHandler {
  handleUri(uri: Uri): ProviderResult<void>;
}

export namespace window {
  export function registerUriHandler(handler: UriHandler): Disposable;
}

它带有一个 onUri 激活事件,只要操作系统打开定向到自身的 URI,该事件就会激活扩展程序。

有关参考实现,请参阅 Git 扩展的 GitProtocolHandler

Node.js 更新

VS Code 运行的 Electron 版本已更新,其中包含了 VS Code 随附的 Node.js 的更新,从 7.9 更新到 8.9。所有扩展程序现在都将在这个较新版本的 Node.js 上运行。

有一些可能会影响扩展程序的更改

  • natives node 模块不再起作用(请参阅 #47569)。
  • 不再支持旧版调试协议和 --debug 标志(请参阅 #55907)。
  • 如果使用 stdio 作为传输方式,以 Node.js 编写的语言服务器在 VS Code 1.26 中遇到问题,则使用 LSP 客户端服务器库的扩展作者,可以通过将传输方式切换为 TransportKind.ipc 而不是 TransportKind.stdio 并重新发布其扩展来解决此问题。

建议的扩展 API

每个里程碑版本都会推出新的提案 API,扩展作者可以尝试使用它们。我们一如既往地希望收到您的反馈。以下是尝试使用提案 API 的步骤:

  • 您必须使用 Insiders 版本,因为提案 API 经常更改。
  • 您必须在扩展的 package.json 文件中包含以下行:"enableProposedApi": true
  • 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目中。

请注意,您不能发布使用提案 API 的扩展。我们很可能在下一个版本中进行重大更改,并且我们绝不希望破坏现有的扩展。

TextSearchProvider、FileSearchProvider、FileIndexProvider

我们添加了一组 API,允许扩展在 VS Code 中实现文本搜索和文件搜索。

当用户使用搜索视图或扩展使用新的 API workspace.findTextInFiles 时,将调用 TextSearchProvider。它通过 progress 回调增量返回文本匹配项。

有两种方法可以实现文件搜索,涵盖两种常见的用例:通过 FileIndexProviderFileSearchProvider。当用户打开“快速打开”时,会调用 FileIndexProvider 一次,并且必须返回工作区中每个文件的数组。然后,VS Code 在此列表中搜索,并应用自己的模糊匹配逻辑,将正确的结果集返回给用户。如果您的扩展能够提供工作区中每个文件的列表,那么实现 FileIndexProvider 是支持文件搜索的更简单方法。

如果您的扩展需要处理用户的搜索查询并返回其自己的过滤结果列表,请实现 FileSearchProvider。它会在用户每次在“快速打开”中按键时调用,并且必须返回一组经过过滤和排序的文件匹配项。

export interface TextSearchProvider {
  provideTextSearchResults(
    query: TextSearchQuery,
    options: TextSearchOptions,
    progress: Progress<TextSearchResult>,
    token: CancellationToken
  ): Thenable<void>;
}

export interface FileIndexProvider {
  provideFileIndex(options: FileIndexOptions, token: CancellationToken): Thenable<Uri[]>;
}

export interface FileSearchProvider {
  provideFileSearchResults(
    query: FileSearchQuery,
    options: FileSearchOptions,
    token: CancellationToken
  ): Thenable<Uri[]>;
}

export namespace workspace {
  export function registerTextSearchProvider(
    scheme: string,
    provider: TextSearchProvider
  ): Disposable;
  export function registerFileIndexProvider(
    scheme: string,
    provider: FileIndexProvider
  ): Disposable;
  export function registerFileSearchProvider(
    scheme: string,
    provider: FileSearchProvider
  ): Disposable;
}

findTextInFiles API

已添加新的提案 API,允许扩展在工作区内搜索文本模式

export namespace workspace {
  export function findTextInFiles(
    query: TextSearchQuery,
    options: FindTextInFilesOptions,
    callback: (result: TextSearchResult) => void,
    token?: CancellationToken
  ): Thenable<void>;
}

这是 workspace.findFiles 的对应项,后者在工作区中搜索文件。

其他

Electron 更新

在此版本中,我们从 Electron 1.7.12 更新到 2.0.5。这带来了 Chromium 从 58 版本到 61 版本的更新,以及 Node.js 从 7.9 版本到 8.9 版本的更新。

新文档

Logpoints 博客文章

您可以阅读 Kenneth 最近的博客文章,了解有关 Node.js 调试 Logpoints 和自动附加的信息。 Logpoints 让您可以快速输出日志信息,而无需更改源代码或中断调试会话。

IntelliCode 常见问题解答

如果您是 Python 开发人员,请查看 IntelliCode,这是一个使用人工智能 (AI) 增强软件开发的新工具。 IntelliCode 扩展为 Python 中的 IntelliSense 提供了一组 AI 辅助功能,例如根据当前源代码上下文推断最相关的自动完成项。

IntelliCode extension

显著变化

  • 53532:编辑器:如果文件已加载,则在后台加载对文件的更改
  • 53586:Node 调试:不记住自动附加模式
  • 53022:编辑器选项卡中用于只读文件的“只读”标签
  • 48275:不再支持 resourceIsFile 上下文键

感谢

最后但同样重要的是,非常感谢以下人员,他们帮助使 VS Code 变得更好

vscode 的贡献

language-server-protocol 的贡献

vscode-chrome-debug 的贡献

vscode-chrome-debug-core 的贡献

vscode-vsce 的贡献

vscode-recipes 的贡献

localization 的贡献

Transifex VS Code 项目团队有 800 多名成员,每月约有 100 名活跃贡献者。感谢您的贡献,无论是提供新的翻译、为翻译投票还是提出流程改进建议。

以下是此版本贡献者的快照。有关该项目的详细信息,包括贡献者姓名列表,请访问项目站点:https://aka.ms/vscodeloc

  • 中文(简体): Joel Yang, Yusong, pluwen, Liu Dingming 刘丁明, hackereric, Simon Chan, 韦煊 王, gzponline, Ziming Wang。
  • 中文(繁体): Duran Hsieh, Will 保哥, Poy Chang, Alan Tsai, Kevin Yang, Winnie Lin, MartinLau, Ben Tsai 蔡和恩, Alan Liu。
  • 法语: Antoine Griffard, Ludovic P, William Thibodeau, Adrien Clerbois, Alain BUFERNE。
  • 德语: Carsten Siemens, Carsten Kneip, Markus Hatvan, Väinämö Lumikero, Ettore Atalan, AlCalzone, Levin Rickert。
  • 意大利语: Alessandro Alpi, Andrea Dottor, Emilie Rollandin, Riccardo Cappello, Aldo Donetti, Massimo。
  • 日语: Satoshi Kajiura, Yuichi Nukiyama, Shunya Tajima, yoshioms, Nakamura Yuta。
  • 韩语: Helloyunho。
  • 俄语: Michel Ace。
  • 西班牙语: Alberto Poblacion, Julián Martínez, Alejandro Medina, José M. Aguilar, Carlos Mendible, Pedro Sanchez, Lio Fleishman。
  • 波斯尼亚语: Bahrudin Hrnjica。
  • 保加利亚语: Любомир Василев。
  • 捷克语: Ľuboš Uličný, Ľubomír Kováč, Frantisek Veris。
  • 荷兰语: Gerald Versluis, RubenJacobse, Armand Duijn, Dirk Doesburg, Maarten van Stam, Dean Wyns。
  • 英语(英国): Matthew John Cheetham, Swotboy2000。
  • 芬兰语: Feetu Nyrhinen, Petri Niinimäki, Make。
  • 希腊语: Ioannis Paraskevopoulos, Theodore Tsirpanis。
  • 匈牙利语: Dóczi Dominik。
  • 印度尼西亚语: Laurensius Dede Suhardiman, Wildan Mubarok, Riwut Libinuko, Bagus Ilman, Lundy Orlando。
  • 挪威语: andreona, Daniel Bjørnbakk。
  • 波兰语: Patryk Brejdak, Sebastian Baran, Igor Śpiączka, Lukasz Woznicki。
  • 葡萄牙语(巴西): Lucas Miranda, Otacilio Saraiva Maia Neto, Roberto Fonseca, Marcelo Camargo, Marcelo Novaes, Victor Hugo Schmidt, Pedro Sereno, Rafael Oliveira, Danilo Dantas, Vitor Dutra Freire, Luan Moreno Medeiros Maciel, Fabio Correia。
  • 葡萄牙语(葡萄牙): Daniel Correia, Pavlo Zakharuk, António Santos, João Mata, Diogo Barros, Danilo Dantas。
  • 罗马尼亚语: Schiriac Robert, Cornel Cocioaba, Dan Ichim, Alexandru Spinu, ovisan, Bogdan Mateescu。
  • 泰米尔语: Jeyanthinath Muthuram, Jam Station。
  • 乌克兰语: Oleksandr, Fedir Gordiienko, Volodymyr Holovka。