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 月发布版本。此版本中有许多重要的更新,我们希望您会喜欢,主要亮点包括:
- 路径导航(Breadcrumbs) - 路径导航让您可以在工作区中快速跳转到符号和文件。
- 从“问题”面板应用快速修复 - 在查看警告和错误时应用代码修复。
- Windows 用户安装 - 在 Windows 安装过程中不再需要提升权限。
- 终端列选择 - 按住 Alt 并单击以在集成终端中选择文本块。
- 添加所有缺失的导入 - 一键为 JavaScript/TypeScript 文件添加所有缺失的导入。
- JSX 标签补全 - 在 JavaScript/TypeScript 中使用 JSX 标签就像在 HTML 中一样。
- 改进的 JS/TS 错误报告 - 提供简洁、清晰的消息以及相关的源代码链接。
- 改进的扩展搜索 - 筛选 Marketplace 查询以找到您想要的扩展。
- 扩展包管理 - 将扩展包作为一个整体或按单个扩展进行管理。
- 预览:设置编辑器 - 丰富的设置描述显示,"目录"会跟踪滚动位置。
如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。
您还可以观看由云开发倡导者 Brian Clark 制作的 1.26 版本 亮点视频。
发布说明按照与 VS Code 重点领域相关的以下部分进行编排。以下是一些进一步的更新:
- 工作台 - 新的“视图”菜单布局,复制相对路径操作,离线模式。
- 集成终端 - 改进的多行支持,渲染改进。
- 语言 - 将命名导入转换为命名空间导入,JSX 折叠。
- 调试 - 改进的停止会话和智能步进调试。
- 预览特性 - Windows 和 Linux 上可定制主题的工具栏和菜单栏。
- 扩展创作 - QuickInput API,extensionPack 声明,webview 标题栏图标。
Insiders:想尽快体验新特性吗?您可以下载每夜构建的 Insiders 版本,并在最新更新可用时立即试用。有关最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们 @code!
工作台
路径导航
编辑器现在在其内容上方有了一个导航栏 - 我们称之为路径导航(Breadcrumbs)。它显示当前位置,并允许您在符号和文件之间快速导航。要开始使用路径导航,请通过视图 > 显示路径导航命令或通过 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 用户安装包现在已在稳定版本中可用。安装用户安装包不需要管理员权限,因为它将安装在您的用户本地 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
您现在可以在 VS Code 中将 URI 作为文件夹打开,前提是存在为该 URI 贡献 FileSystemProvider
的扩展。为此,我们引入了一个新的命令行参数 --folder-uri
。
如果您安装了 RemoteHub 扩展,以下 CLI 命令会将 VS Code GitHub 仓库作为文件夹打开:
code --folder-uri remotehub://github.com/microsoft/vscode
快速渲染
启动时,基本工作台布局现在恢复得更快。恢复顺序是活动栏、侧边栏和状态栏,然后是标题和图标,最后是资源管理器和编辑器区域填充内容。
快速渲染旨在提高感知性能,因为它减少了您面对空白界面的时间。我们还有更多关于如何提高渲染性能的想法,并对您的反馈很感兴趣。
输出面板
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+单击
支持列选择。
改进的多行支持
在终端中双击选择单词现在会选择跨行分割的单词。
前端和后端现在已同步
进入集成终端的数据流现在与后端的伪终端/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+单击
),可以快速导航 jsconfig.json
和 tsconfig.json
项目引用。
配置中的 extends
路径现在也可点击。
调试
改进的停止调试行为
在以前的版本中,调试:停止操作(可在调试工具栏上找到)总是会立即杀死调试对象及其子进程,而不会给调试对象机会进行优雅清理。一些用户不喜欢这种行为,因为他们在停止调试会话后被迫进行手动清理。
在此版本中,我们通过以下方式改进了调试:停止操作:
-
首次按下停止时,调试对象不再立即被杀死,而是被要求优雅地关闭(并根据需要清理所有内容)。
-
如果该关闭代码中没有断点(或问题),调试对象和调试会话将终止。用户不会看到与 VS Code 以前版本行为有任何差异。
-
但是,如果调试器在关闭代码中遇到断点,或者调试对象本身没有正常终止,则调试会话将不会结束。
-
在这种情况下,再次按下停止按钮将强制终止调试对象。因此,如果您看到按下红色停止按钮时调试会话没有结束,请再次按下该按钮以强制关闭调试对象。
注意:此功能仅受已选择实现它的调试器扩展支持。目前只有内置的 Node.js 调试器支持此功能。我们预计其他调试扩展也很快会支持此功能。
更改了 Node/Chrome 调试的智能步进行为
以前,"smartStep": true
会导致 Node.js 调试器不在没有源映射的源代码中停止。这可能发生在两种情况下:
- 完全没有源映射的文件(未转译的源代码或随 node 模块一起提供的 .js 文件)。
- 具有源映射的转译文件,但有些单独的行没有映射(TypeScript 在向下编译一些功能(如 async/await)时插入的额外行)。
在 VS Code 1.26 中,"smartStep": true
将只影响第二种类型,即源映射中缺失的行。现在,您可以步进到 .js 文件中,同时跳过 TS async/await 代码。
我们更改此设置是因为我们意识到旧的智能步进行为过于激进。跳过插入的代码通常是正确的,但在第一种情况下跳过只对某些项目和用户有意义。此外,在您的 launch.json
配置文件中使用 skipFiles
选项可以更好地涵盖整个文件的情况,因为它能更精确地定位文件并且速度更快。
因此,如果您正在使用 smartStep
并注意到调试器不再自动跳过没有源映射的文件,您可以使用 skipFiles
来恢复以前的行为。有关如何配置 skipFiles
以跳过 node_modules 中的源代码、内部 node 文件或任何其他您不想步进通过的文件的示例,请参阅跳过不相关的代码。
扩展
扩展搜索的智能提示
此版本通过在扩展搜索字段中添加智能提示自动补全功能,使搜索扩展变得更加容易。这将帮助您优化扩展搜索,根据类别和安装状态等进行结果筛选;或者按名称、评分或安装次数对结果进行排序。输入“@”或按下⌃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
设置的新控件使得添加或删除 glob 模式更加容易,并且可以查看当前范围应用了哪些模式:
- 设置编辑器中的控件现在可以设置主题。请参阅新的主题颜色下的新主题颜色。
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
定义提供程序现在可以返回 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 })
)
}
];
}
}
调试扩展
Debug Adapter Protocol 的新主页
我们已将 Debug Adapter Protocol 从其旧位置迁移到了一个新网站 https://msdocs.cn/debug-adapter-protocol 以及相应的仓库 https://github.com/microsoft/debug-adapter-protocol。
一篇配套博客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 月将其移除。
Debug Adapter Protocol 的新 terminate
请求
为了支持上面解释的被调试程序的优雅关闭,Debug Adapter Protocol 中添加了一个新的 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'));
});
}
终端访问 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
。当用户打开快速打开 (Quick Open) 时,会调用 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 到 Text Document Client Capabilities 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): 为 CompletionItem 添加 preselect 字段 PR #515
- Andrey Kolomoets (@muffinmad): 添加了 eglot PR #531
- Olivier FAURE (@PoignardAzur): 修复 specification 中的细微拼写错误 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。