现已推出!阅读 10 月份的新功能和修复内容。

2018 年 7 月(版本 1.26)

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

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


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

如果您想在线阅读这些发行说明,请访问 更新 页面,该页面位于 code.visualstudio.com 上。
您还可以查看此 1.26 版本的 亮点视频,该视频由云开发倡导者 Brian Clark 制作。

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

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

内部人员:想尽快看到新功能吗?您可以下载夜间 内部人员 版本,并在新功能发布后立即试用。

工作台

面包屑导航

编辑器现在在其内容上方有一个导航栏,我们称之为 面包屑导航。它显示当前位置,并允许您快速在符号和文件之间导航。要开始使用面包屑导航,请使用查看 > 显示面包屑导航 命令或通过 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) 进行导航,并使用 Space 以在编辑器中显示该元素。

问题面板快速修复

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

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

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

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

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": true会导致 Node.js 调试器在没有源映射的源代码中不停止。这可以通过两种方式发生

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

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

我们进行了更改,因为我们意识到旧的智能步进行为过于激进。跳过插入的代码通常是正确的,但在第一种情况下跳过只对某些项目和用户有意义。此外,在您的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

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

  • 标题用户界面已刷新和清理,仅显示修改后的设置和打开 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-schema 的人都应该将他们的源代码更新到新位置。

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节点模块不再起作用(请参阅#47569)。
  • 旧版调试协议和--debug标志不再受支持(请参阅#55907)。
  • 如果在 VS Code 1.26 中使用 stdio 作为传输的用 Node.js 编写的语言服务器遇到问题,使用 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 中实现文本搜索和文件搜索。

当用户使用搜索视图或扩展使用新的 workspace.findTextInFiles API 时,将调用 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。

新文档

日志点博客文章

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

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, 刘丁明, 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.