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 月版本。此版本中有许多重要更新,我们希望您会喜欢,其中一些主要亮点包括:
- 面包屑导航 - 面包屑导航让您可以在工作区中跳转到符号和文件。
- 问题面板中的快速修复 - 在查看警告和错误时应用代码修复。
- Windows 用户安装 - Windows 安装期间不再需要提升权限。
- 终端列选择 - Alt+单击可在集成终端中选择文本块。
- 添加所有缺失导入 - 单一操作即可在 JavaScript/TypeScript 文件中添加所有缺失导入。
- JSX 标签补全 - 在 JavaScript/TypeScript 中使用 JSX 标签,就像在 HTML 中一样。
- 更好的 JS/TS 错误报告 - 简洁、清晰的消息以及相关的源代码链接。
- 改进的扩展搜索 - 过滤 Marketplace 查询以找到您想要的扩展。
- 扩展包管理 - 将扩展包作为单个单元或按单个扩展进行管理。
- 预览:设置编辑器 - 丰富的设置描述显示,“目录”跟踪滚动。
如果您想在线阅读这些发行说明,请访问 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.filePath
和breadcrumbs.symbolPath
设置。两者都支持on
、off
和last
,它们定义了您是否看到或看到路径的哪一部分。
要与面包屑导航交互,请使用聚焦面包屑导航命令或按⇧⌘. (Windows, Linux Ctrl+Shift+.)。它将选择最后一个元素并打开一个下拉菜单,允许您导航到兄弟文件或符号。使用← (Windows, Linux Left) 和 → (Windows, Linux Right) 键盘快捷键可转到当前元素之前或之后的元素。当下拉菜单出现时,只需开始输入——所有匹配的元素都将高亮显示,最佳匹配将被选中以进行快速导航。
您也可以在不使用选取器的情况下与面包屑导航交互。按⇧⌘; (Windows, Linux Ctrl+Shift+;) 聚焦最后一个元素,使用← (Windows, Linux Left) 和 → (Windows, Linux Right) 进行导航,并使用Space 在编辑器中显示元素。
问题面板快速修复
您现在可以从“问题”面板应用“快速修复”。当您悬停或选择一个问题条目时,会显示一个指示“快速修复”的灯泡。可以通过单击灯泡或打开问题条目的上下文菜单来应用“快速修复”。
注意:只有当提供快速修复的扩展程序提供了与快速修复相关的诊断信息时,才会显示灯泡指示器。
Windows 用户安装
上个版本宣布的 Windows 用户安装包现已在稳定版中提供。安装用户安装程序不需要管理员权限,因为安装位置将在您的用户本地应用程序数据 (LOCALAPPDATA) 文件夹下。用户安装程序还提供了更流畅的后台更新体验。
如果您是系统范围 Windows 安装的当前用户,系统将提示您安装用户安装程序,我们建议从现在开始使用它。请不用担心,您的所有设置和扩展在过渡期间都将保留。在安装过程中,系统还会提示您卸载系统范围的安装程序。
网格:自动最大化最小化编辑器
在引入网格编辑器布局的上一个里程碑中,我们失去了一个功能,即当编辑器被聚焦且处于最小化状态时,它们会自动最大化。这个功能现在像以前一样工作:
注意:您始终可以通过视图:最大化编辑器组 (workbench.action.minimizeOtherEditors
) 来最大化活动编辑器,或通过视图:重置编辑器组大小 (workbench.action.evenEditorWidths
) 来重置所有编辑器大小。
视图菜单清理
视图菜单变得非常大,我们决定将许多条目移到一个单独的外观子菜单中进行清理。
复制相对路径
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.colors
和explorer.decorations.badges
禁用它们,这将在文件资源管理器、打开的编辑器和自定义视图中禁用它们。
从 package.json 运行 npm 脚本
您现在可以从悬停(如下图所示)或从上下文菜单中运行package.json
文件中的 npm 脚本。
打开文件夹 URI
如果存在为该 URI 提供 FileSystemProvider
的扩展,您现在可以在 VS Code 中将 URI 作为文件夹打开。我们为此引入了一个新的命令行参数 --folder-uri
。
以下 CLI 命令将 VS Code GitHub 存储库作为文件夹打开,前提是您已安装 RemoteHub 扩展。
code --folder-uri remotehub://github.com/microsoft/vscode
快速渲染
启动时,基本工作台布局现在恢复得更快。恢复顺序是活动栏、侧边栏和状态栏,然后是标题和图标,最后是资源管理器和编辑器区域被填充。
快速渲染旨在提高感知性能,因为您看到空白画布的时间减少了。我们有更多关于如何提高渲染性能的想法,并期待您的反馈。
输出面板
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+点击
,集成终端现在支持列选择。
改进的多行支持
现在,在终端中双击选择单词时,会选择跨行分割的单词。
前端和后端现已同步
进入集成终端的数据流现在与后端伪终端/shell 进程同步。这意味着进入终端的数据不再会阻塞 UI 线程并导致无响应,SIGINT (Ctrl+C) 应该始终响应,并且 time
命令应该返回准确的结果。
动态纹理图集
集成终端现在默认为画布渲染使用“动态纹理图集”。这改变了终端用于存储字符字形的缓存策略。字符字形不再是默认背景上的固定字形集,而是根据需要添加到纹理图集,无论使用什么背景。这应该会减少首次终端启动时间以及不使用默认背景的字符的渲染时间,同时提高整体渲染性能。
这来自于对 xterm.js 的上游社区贡献。
语言
TypeScript 3.0
VS Code 现在附带 TypeScript 3.0.1。此重大更新带来了对项目引用的支持、对元组的更好支持以及其他语言和工具功能。您可以在此处阅读有关 TypeScript 3.0 的更多信息。
更好的错误报告
TypeScript 团队做了大量工作,使 JavaScript 和 TypeScript 错误消息更智能、更清晰。一些错误消息现在包含指向源代码中相关位置的链接。
联合类型和其他复杂类型的消息也应该更简洁和有用。例如,JSX 中的一个简单类型错误有时会产生一个复杂的错误消息,如下所示:
得益于 TypeScript 3.0,VS Code 1.26 中的错误信息更具可读性。
JSX 标签补全
在 JavaScript 或 TypeScript 文件中键入>
时,JSX 标签现在会自动关闭。
此行为与 VS Code 在 HTML 文件中已提供的功能相匹配。可以通过设置"javascript.autoClosingTags": false
和"typescript.autoClosingTags": false
来禁用标签自动关闭功能。
添加所有缺失导入的快速修复
“添加缺失导入”快速修复现在可以应用于 JavaScript/TypeScript 文件中所有缺失的导入。
此快速修复只会为具有单个潜在定义的符号添加导入。如果当前项目中某个符号有多个潜在定义,例如两个不同的文件都导出一个名为Button
的符号,则您必须快速修复单独的错误并选择您想要的特定导入。
要在 JavaScript 文件中使用此快速修复,请启用语义检查。
JSX 折叠
使用语法感知折叠时,JSX 标签现在可折叠。
命名导入和命名空间导入之间的转换
两个新的重构功能让您可以在 JavaScript 和 TypeScript 中快速在命名导入和命名空间导入之间进行转换:
jsconfig.json 和 tsconfig.json 项目文件中的可点击链接
通过 Ctrl
单击项目引用路径(macOS 上为 Cmd+click
),快速导航 jsconfig.json
和 tsconfig.json
项目引用。
extends
路径现在也可点击。
调试
改进的停止调试行为
在以前的版本中,调试:停止操作(位于调试工具栏上)总是立即终止被调试程序及其子进程,而不给被调试程序优雅清理的机会。一些用户不喜欢这种行为,因为他们在停止调试会话后被迫进行手动清理。
在此版本中,我们通过以下方式改进了调试:停止操作:
-
首次按下停止时,被调试程序不再立即终止,而是被要求优雅地关闭(并根据需要清理所有内容)。
-
如果该关闭代码中没有断点(或问题),则被调试程序和调试会话将终止。用户将不会看到与旧版本 VS Code 行为有任何不同。
-
但是,如果调试器在关闭代码中遇到断点,或者被调试程序本身未能正确终止,则调试会话将不会结束。
-
在这种情况下,再次按下停止按钮将强制终止被调试程序。因此,如果您发现当您按下红色停止按钮时调试会话没有结束,那么请再次按下该按钮以强制关闭被调试程序。
注意:此功能仅由已选择实现它的调试器扩展支持。目前,这仅限于内置的 Node.js 调试器。我们预计其他调试扩展很快将支持此功能。
Node/Chrome 调试的 smartStep 行为已更改
以前,"smartStep": true
会导致 Node.js 调试器在没有源映射的源代码中不停止。这可以通过两种方式发生:
- 完全没有源映射的文件(未转译的源代码或 Node 模块随附的 .js 文件)。
- 已转译的文件确实有源映射,但其中有些行未映射(TypeScript 在向下编译某些功能(如 async/await)时插入的额外行)。
在 VS Code 1.26 中,"smartStep": true
将只影响第二种类型,即源映射中缺失的行。现在,您将能够单步执行 .js 文件,同时仍跳过 TS async/await 代码。
我们之所以改变这一点,是因为我们意识到旧的 smartStep 行为过于激进。跳过插入的代码通常是正确的,但在第一种情况下跳过仅适用于某些项目和用户。此外,在launch.json
配置文件中使用skipFiles
选项可以更好地覆盖整个文件的情况,因为它可以更精确地定位文件并且速度更快。
所以,如果您正在使用smartStep
并注意到调试器不再自动跳过没有源映射的文件,您可以使用skipFiles
来恢复之前的行为。有关如何配置skipFiles
以跳过node_modules、内部node文件或任何您不想单步执行的源代码的示例,请参见跳过不感兴趣的代码。
扩展
扩展搜索的 IntelliSense
此版本通过在扩展搜索字段中添加 IntelliSense 自动补全功能,使扩展搜索变得更加容易。这将帮助您细化扩展搜索,根据类别和安装状态等进行结果过滤;或按名称、评分或安装次数对结果进行排序。输入“@”或⌃Space (Windows, Linux Ctrl+Space) 触发支持的查询参数建议。
扩展包管理
此版本中,扩展包管理变得更加顺畅。扩展包始终作为一个整体进行安装、卸载、启用或禁用。您现在也可以卸载或禁用属于扩展包的单个扩展,而无需卸载或禁用整个扩展包。
当您打开扩展详细信息时,还有一个新的扩展包选项卡,显示扩展包中捆绑了哪些扩展。
注意:这需要扩展包的采纳。有关更多详细信息,请参阅扩展包重新审视。
从命令行禁用扩展
您现在可以使用新的参数--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.python
和ms-dotnettools.csharp
扩展打开文件夹。
预览功能
预览功能尚未准备好发布,但功能已足够使用。我们欢迎您在开发过程中提供早期反馈。
新设置编辑器
在此里程碑中,我们继续开发用于编辑设置的 GUI。它仍然是一个预览版,但如果您想尝试一下,可以使用首选项:打开设置(预览)命令打开它。我们很乐意听取您的任何反馈——您可以在此 GitHub 问题上留下反馈。
与上个月相比,一些新的变化包括:
- 标题用户体验已刷新和清理,并且只显示修改过的设置和打开 JSON 编辑器的操作已移至右侧的
...
菜单下。 - 左侧的目录现在默认折叠,并随着您的滚动而展开以显示当前部分。
- 设置描述现在以 Markdown 格式呈现。一些设置包含指向相关文档的外部链接,对其他设置的引用现在是可点击的链接,可以滚动到该设置。枚举类型设置的
enumDescriptions
现在显示在设置描述之后(也在 JSON 编辑器中显示)。
files.exclude
和search.exclude
设置的新控件使得添加或删除全局模式以及查看哪些模式适用于当前范围变得更加容易。
- 设置编辑器中的控件现在支持主题化。请参阅新主题颜色下的新主题颜色。
Windows/Linux 的自定义标题栏和菜单
在此里程碑中,当启用自定义标题栏时,我们改进了 Windows 和 Linux 上的自定义菜单。虽然仍处于预览阶段,但您可以通过在settings.json
中将window.titleBarStyle
设置为custom
来尝试此功能。
一些亮点包括:
-
菜单现在可以进行主题化。请参阅新主题颜色下的新主题颜色。
-
键盘和鼠标与菜单的交互更加连贯。以前,有几个焦点指示器使菜单不清晰。现在,菜单的功能方式更加熟悉。
-
许多可访问性问题已解决,以改善需要更大缩放级别或使用屏幕阅读器的人的体验。
我们将继续改进新的菜单和标题栏,并解决标记有workbench-title
或workbench-menu
标签的问题。
扩展创作
QuickInput API
QuickPick
和 InputBox
API 现已稳定。它们允许比现有 showQuickPick
和 showInputBox
API 更灵活地收集用户输入。在示例扩展中提供了 QuickInput API 的用法示例。
扩展包再访
现在,在package.json
中定义扩展包使用一个名为extensionPack
的新属性,而不是extensionDependencies
。这是因为extensionDependencies
主要用于定义扩展之间的功能依赖关系,它阻止在不卸载或禁用依赖扩展的情况下卸载或禁用扩展依赖关系。
扩展包不应与其捆绑扩展存在任何功能依赖关系,并且它们应可独立于包进行管理。以下是定义捆绑了多个调试器扩展的扩展包的extensionPack
条目示例。
"extensionPack": [
"andreweinand.mock-debug",
"ms-vscode.mono-debug",
"ms-vscode.cpptools",
"ms-dotnettools.csharp",
"vscjava.vscode-java-debug"
]
这将使用户管理扩展包及其捆绑的扩展变得更加简单和容易。请参阅扩展包管理。
更好的工作区编辑
WorkspaceEdit
和applyEdit
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
接下来的两个版本(8 月和 9 月)中,我们将保持旧位置的 schema 最新,但我们计划在 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'));
});
}
终端访问 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
回调增量返回文本匹配项。
有两种方法可以实现文件搜索,涵盖两种常见用例,通过FileIndexProvider
或FileSearchProvider
。当用户打开快速打开时,会调用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 辅助功能,例如根据当前源代码上下文推断最相关的自动完成。
值得注意的更改
- 53532:编辑器:如果文件已加载,则在后台加载文件更改
- 53586:Node 调试:自动附加模式未记住
- 53022:编辑器选项卡中只读文件的“只读”标签
- 48275:
resourceIsFile
上下文键不再受支持
感谢
最后但同样重要的是,衷心感谢以下各位,他们为使 VS Code 变得更好做出了贡献:
对vscode
的贡献
- @alexr00:修复 #48714:添加了文件本地大小写到 git 大小写的转换 PR #49397
- Arjun Attam (@arjun27):添加 webview 全选命令 PR #54851
- Adit Bhatt (@avbhatt):添加了对忽略存储库列表的支持 PR #47890
- @coolreader18:修复预览器中如果 @param jsdoc 标签在参数名后带有连字符的双破折号问题 PR #53365
- Geoffrey (@g3offrey):允许使用 Node.js 更新 require 路径 PR #53964
- @HookyQR:改进了对大写蛇形命名的单词部分移动和删除 PR #53470
- HUA Yang (@imhuay):修复 #53590 PR #54257
- Itamar (@itamark)
- Ivor Huang (@ivorhuang):实现推送成功通知 PR #47790
- Josh Beard (@jlbeard84):移除了“在终端中打开”命令中的操作系统特定文本。PR #53636
- Jongkuen Hong (@Jongkeun):将拼写错误从 'occuring' 修正为 'occurring' PR #54239
- Josh Goldberg (@JoshuaKGoldberg):修剪搜索菜单中的文件搜索字符串 PR #54625
- Leonardo Braga (@LeonardoBraga):处理没有扩展 ID 的 --enable-proposed-api 作为“启用所有”PR #52861
- Loic Nageleisen (@lloeki):在代码命令安装时尊重所有权 PR #46962
- Nikolas (@nikolasburk):在周围的配对中添加下划线和星号 PR #55054
- Nilesh Kevlani (@njkevlani):修复 #53372 PR #53503
- Nick James (@omniomi):更新 powershell 语法 PR #52956
- Ori Ashual (@oriash93):支持从 CLI 更新扩展 PR #45533
- Pradeep Murugesan (@pradeepmurugesan)
- Ahmed Tarek (@pushqrdx):修复 SCM 徽章问题 #42940 PR #43256
- Dániel Tar (@qcz):改进 macOptionClickForcesSelection 消息 PR #54264
- Ryuichi Inagaki (@ryu1kn):在初始提交时执行“撤销上次提交”时出错 PR #47578
- Sandy Armstrong (@sandyarmstrong):将 Xamarin .workbook 文件视为 markdown PR #51167
- Guillaume Marcoux (@V-ed):移除混淆的 Start from wordPartLeft 命令 ID PR #55492
- Walter M Barajas Jr (@wmb0117):添加手动添加仓库的选项 PR #48020
- Yogesh Mangaj (@yogeshmangaj):添加聚焦搜索列表命令 PR #54196
- @zhuowei:[WIP] git:在暂存时检测 BOTH_ADDED 文件中的冲突标记 PR #50252
对language-server-protocol
的贡献
- Luke Lau (@Bubba):在文本文档客户端功能中添加 hierarchicalDocumentSymbolSupport PR #538
- Qiming zhao (@chemzqm):添加 coc.nvim PR #537
- Colin Rofls (@cmyr):修复 specification.md 中的拼写错误 PR #499
- @khng300:添加 ccls 作为 C/C++/Objective-C 的 LSP 实现 PR #525
- Michael T Lombardi (@michaeltlombardi):更新 Puppet 语言服务器信息 PR #509
- Mikhail Arkhipov (@MikhailArkhipov):将 preselect 字段添加到 CompletionItem PR #515
- Andrey Kolomoets (@muffinmad):添加了 eglot PR #531
- Olivier FAURE (@PoignardAzur):修复规范中的小拼写错误 PR #529
- Rafał Łasocha (@swistak35):更新 servers.md - 添加新的 ruby 语言服务器 PR #535
- Tyson Andre (@TysonAndre)
对vscode-chrome-debug
的贡献
- Michael Crane (@mrcrane):Windows 上断开连接时终止 Chrome 的竞态条件 PR #703
- Todd Chaffee (@tchaffee):关于 webpack devtools 选项的更清晰的文档。PR #694
对vscode-chrome-debug-core
的贡献
- @digeff
- @Pokute:添加了对 URI 编码源映射的支持 + 测试。PR #344
- Raghav Katyal (@rakatyal)
对vscode-vsce
的贡献
- Jimi (Dimitris) Charalampidis (@JimiC):修复 .vscodeignore 中的模式匹配 PR #271
对vscode-recipes
的贡献
- Fabien Allanic (@fallanic)
- Jesus Abarca (@jabas06):更新以使调试适用于 Angular CLI 版本 6 PR #117
- @NileshParkhe83:Jest 问题 - SecurityError: localStorage 对不透明来源不可用 PR #120
- @NiloCK:#96 区分 vue-cli 2.x / 3.x 的说明 PR #121
对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。