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) 进行导航,并使用 空格键 在编辑器中显示元素。
问题面板快速修复
您现在可以从“问题”面板应用快速修复。当您悬停或选择问题条目时,会显示一个指示快速修复的小灯泡。可以通过单击小灯泡或打开问题条目的上下文菜单来应用快速修复。
注意: 仅当提供快速修复的扩展程序提供与快速修复关联的 诊断 信息时,才会显示小灯泡指示器。
Windows 上的用户安装
在上个版本中宣布,Windows 的用户安装包现在已在稳定版上提供。安装用户安装程序不需要管理员权限,因为位置将在您的用户本地 AppData (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
来执行此操作。
如果您安装了 RemoteHub 扩展程序,则以下 CLI 命令会将 VS Code GitHub 存储库作为文件夹打开。
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+click
在集成终端中支持列选择。
改进的多行支持
双击以选择终端中的单词现在可以选择跨行拆分的单词。
前端和后端现在已同步
进入集成终端的数据流现在与后端的伪终端/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
路径现在也是可单击的。
调试
改进的停止调试行为
在以前的版本中,调试:停止操作(在调试工具栏上找到)总是会立即杀死 debuggee 及其子进程,而不会让 debuggee 有机会优雅地清理。一些用户不喜欢这种行为,因为他们不得不在停止调试会话后进行手动清理。
在此版本中,我们以以下方式改进了调试:停止操作
-
首次按 停止 时,debuggee 不再立即被杀死,而是被请求优雅地关闭(并根据需要清理所有内容)。
-
如果关闭代码中没有断点(或问题),则 debuggee 和调试会话将终止。用户不会看到与以前版本的 VS Code 有任何行为差异。
-
但是,如果调试器在关闭代码中命中断点,或者 debuggee 本身未正确终止,则调试会话将不会结束。
-
在这种情况下,再次按下 停止 按钮将强制终止 debuggee。因此,如果您看到调试会话在按下红色 停止 按钮时没有结束,请再次按下该按钮以强制关闭 debuggee。
注意:此功能仅受已选择实施它的调试器扩展程序支持。目前,这仅是内置的 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、内部节点文件或任何其他您不想逐步执行的文件中的源代码的示例,请参阅跳过不感兴趣的代码。
扩展
扩展搜索的 IntelliSense
此版本通过将 IntelliSense 自动完成添加到扩展搜索字段,使搜索扩展程序变得更加容易。这将帮助您优化扩展搜索,以根据类别和安装状态等内容过滤结果;或按名称、评分或安装计数对结果进行排序。键入“@”或 ⌃空格键(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 问题上留下反馈。
与上个月相比,一些新变化是
- 标头 UX 已刷新和清理,并且仅显示修改后的设置的操作以及打开 JSON 编辑器的操作已移动到右侧的
...
菜单下。 - 左侧的目录现在默认情况下已折叠,并在您滚动以显示当前部分时展开。
- 设置描述现在以 Markdown 格式呈现。某些设置具有指向相关文档的外部链接,并且指向其他设置的引用现在是可单击的链接,可以滚动到该设置。枚举类型设置的
enumDescriptions
现在显示在设置描述之后(也在 JSON 编辑器中)
- 用于
files.exclude
和search.exclude
设置的新控件使添加或删除 glob 模式以及查看哪些模式应用于当前范围变得更加容易
- 设置编辑器中的控件现在是可主题化的。请参阅新主题颜色下的新主题颜色。
Windows/Linux 的自定义标题栏和菜单
当启用自定义标题栏时,此里程碑改进了 Windows 和 Linux 上的自定义菜单。虽然仍处于预览阶段,但您可以通过在 settings.json
中将 window.titleBarStyle
设置为 custom
来试用它。
一些亮点包括
-
菜单现在是可主题化的。请参阅新主题颜色下的新主题颜色。
-
与菜单的键盘和鼠标交互更加连贯。以前,有多个焦点指示器使菜单不清晰。现在,菜单的功能方式更加熟悉。
-
许多辅助功能问题已得到解决,以改善需要更大缩放级别或使用屏幕阅读器的用户的体验。
我们将继续改进新菜单和标题栏,并解决标有 workbench-title
或 workbench-menu
标签的问题。
扩展创作
QuickInput API
QuickPick
和 InputBox
API 现在已稳定。与现有的 showQuickPick
和 showInputBox
API 相比,它们允许更灵活地收集用户输入。在示例扩展程序中提供了 QuickInput API 用法的示例。
重新审视扩展包
定义扩展包现在使用名为 extensionPack
的新属性,而不是 package.json
中的 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
定义提供程序现在可以返回 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
请求
为了支持 debuggee 的优雅关闭,已将新的 terminate
请求和相应的 supportsTerminateRequest
功能添加到 调试适配器协议 中,如上文所述。如果调试适配器为 supportsTerminateRequest
功能返回 true
,则当 VS Code 停止调试会话时,它将首先向调试适配器发送 terminate
请求。调试适配器中 terminate
请求的实现应请求 debuggee 自行终止。在基于 Unix 的操作系统上,这可以通过向 debuggee 发送 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
的对应 API,后者在工作区中搜索文件。
其他
Electron 更新
在此版本中,我们从 Electron 1.7.12 更新到 2.0.5。这带来了从版本 58 到 61 的 Chromium 更新,以及从 7.9 到 8.9 的 Node.js 更新。
新文档
Logpoints 博客文章
你可以阅读 Kenneth 最近的博客文章,了解有关 Node.js 调试 Logpoints 和自动附加的信息。Logpoints 使你可以快速输出日志信息,而无需更改源代码或中断调试会话。
IntelliCode 常见问题解答
如果你是 Python 开发人员,请查看 IntelliCode,这是一种使用人工智能 (AI) 增强软件开发的新工具。IntelliCode 扩展为 Python 中的 IntelliSense 提供了一组 AI 辅助功能,例如根据当前源代码上下文推断最相关的自动完成。
值得注意的更改
- 53532: Editor: load changes to file in the background if file already loaded
- 53586: Node debug: auto attach mode is not remembered
- 53022: "Read-only" label in the editor tabs for files that are read only
- 48275:
resourceIsFile
context key is no longer supported
感谢
最后但同样重要的是,非常感谢!以下人士帮助使 VS Code 变得更好
对 vscode
的贡献
- @alexr00: 修复 #48714: 添加了从文件的本地大小写到 git 大小的转换 PR #49397
- Arjun Attam (@arjun27): 添加了 webview select-all 命令 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): 处理 --enable-proposed-api,不带扩展 ID,作为“启用全部” 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 Language Server 信息 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。