参加你附近的 ,了解 VS Code 中的 AI 辅助开发。

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 上的更新页面。
您还可以查看 Cloud Developer Advocate Brian Clark 发布的此 1.26 版本亮点视频

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

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

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

工作台

面包屑导航

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

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

Breadcrumbs enabled

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

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

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

Breadcrumbs active

您还可以在没有选择器的情况下与面包屑导航交互。按⇧⌘; (Windows、Linux Ctrl+Shift+;)将焦点放在最后一个元素上,使用 (Windows、Linux 左箭头) (Windows、Linux 右箭头)进行导航,并使用空格在编辑器中显示元素。

“问题”面板快速修复

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

Quick fixes

注意:灯泡指示器仅在提供快速修复的扩展提供与快速修复相关的诊断信息时显示。

Windows 用户设置

上一个版本中宣布的 Windows 用户设置包现已在稳定版中提供。安装用户设置不需要管理员权限,因为位置将在您的用户本地 AppData (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的扩展,您现在可以将 URI 作为文件夹在 VS Code 中打开。我们引入了一个新的命令行参数--folder-uri来执行此操作。

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

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

Open folder URI

快速渲染

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

Rapid render

快速渲染旨在提高感知性能,因为您看到空白画布的时间减少了。我们有更多关于如何提高渲染性能的想法,我们很乐意听取您的反馈。

输出面板

VS Code 的主进程、窗口进程和共享进程都有自己的日志通道,您现在可以在日志级别设置为“Trace”时查看发送的遥测事件。为了简洁起见,所有遥测事件共有的数据将不可见。每个遥测事件的完整有效负载将记录在名为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+click支持列选择。

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+click)快速导航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设置的新控件使添加或删除全局模式以及查看当前范围适用了哪些模式变得更容易。

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

扩展包重新审视

现在定义扩展包使用一个名为extensionPack的新属性,而不是package.json中的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://msdocs.cn/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://msdocs.cn/debug-adapter-protocol/debugAdapterProtocol.json

在接下来的两个版本(八月和九月)中,我们将保持旧位置的模式是最新的,但我们计划在十月将其删除。

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

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

Webview 图标

Webviews现在可以提供一个自定义图标,该图标显示在标签栏和“打开编辑器”视图中。

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)。
  • 如果使用 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 中实现文本搜索和文件搜索。

当用户使用“搜索”视图或扩展使用新 APIworkspace.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。

新文档

日志点博客文章

您可以阅读 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, 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。