十一月 2019 (版本 1.41)
更新 1.41.1:本次更新解决了这些问题。
下载:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap
欢迎使用 Visual Studio Code 2019 年 11 月版本。此版本中包含了许多我们希望您喜欢的新功能,其中一些主要亮点包括
- 文件资源管理器中的紧凑文件夹 - 默认折叠单子文件夹。
- 编辑差异视图的左侧 - 您现在可以在差异视图中编辑两个文件。
- 键入时更新搜索结果 - 全局搜索结果会在您键入时更新。
- 问题面板改进 - 按问题类型筛选,并将输出限制为活动文件。
- 小地图高亮错误和内容更改 - 快速定位文件中的问题和更改。
- 终端最小对比度 - 设置首选对比度以增强可见性。
- HTML 标签中的镜像光标 - 在匹配的 HTML 标签中自动实现多光标。
- JS/TS 中的可选链 - 使用
?.
运算符简化嵌套结构的处理。 - 提取接口重构 - 快速将内联类型提取到 TypeScript 接口。
- 开发容器扩展 - 更好地支持在 Docker 容器中打开存储库。
如果您想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。
Insiders 版:想尽快体验新功能吗?您可以下载每日的 Insiders 版本,一旦有最新更新即可尝试。获取最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们:@code!
工作台
文件资源管理器中的紧凑文件夹
在文件资源管理器中,我们现在以紧凑形式呈现单子文件夹。在这种形式下,单子文件夹将被压缩到一个组合的树元素中。例如,这对于 Java 包结构非常有用。
设置 explorer.compactFolders
控制此行为。默认情况下,此设置处于启用状态。
编辑差异视图的左侧
如果您比较两个可编辑的编辑器(例如,从文件资源管理器中比较两个文件或运行全局查找和替换),现在左侧也可以编辑并保存(⌘S (Windows, Linux Ctrl+S))。
注意:如果您厌倦了按 ⌘S (Windows, Linux Ctrl+S),可以启用自动保存(文件 > 自动保存)。
从速览编辑器中保存
如果您调出速览视图并在其中键入,并且焦点位于该嵌入式编辑器内部,您现在可以通过 ⌘S (Windows, Linux Ctrl+S) 保存更改。
问题面板
更多筛选器
问题面板中添加了更多预定义筛选器。您现在可以按类型(错误、警告和信息)筛选问题,还可以查看仅限于当前活动文件的问题。
主题:GitHub Sharp Dark,字体:FiraCode
在状态栏中显示当前问题
您现在可以配置 VS Code 在状态栏中显示当前问题消息。这使您无需额外的键盘或鼠标操作即可在活动文件中查看所选问题的摘要。
注意:启用此功能需要启用设置 problems.showCurrentInStatus
。
主题:GitHub Sharp Dark,字体:FiraCode
灵活的筛选框布局
问题面板中的筛选框现在会根据面板的位置和大小调整其位置。
主题:GitHub Sharp Dark,字体:FiraCode
改进的字体渲染 (Windows, Linux)
上个里程碑更新到 Electron 6 时,许多用户报告说字体渲染效果下降了。具体来说,字体不像以前那样平滑。我们立即在编辑器中解决了这个问题,并在 1.40 恢复版本中提供了修复。然而,工作台的其他区域仍然存在不太理想的字体渲染问题。
在本次发布中,我们改进了工作台更多部分的字体渲染(适用于 Windows 和 Linux)。下面的截图显示了改进前后的对比(放大以显示差异)。特别是,工作台的许多树和列表元素以前使用灰度抗锯齿渲染,现在使用亚像素抗锯齿渲染。
之前(左)和之后(右)
我们计划继续改进工作台更多部分的字体渲染。您可以查看此文本渲染问题查询以查看进展。
远程场景下的文件读写性能提升
对于文件系统是远程且延迟较高的场景(例如在慢速连接下使用浏览器中的 VS Code 或连接到不在同一区域的远程主机),现在文件读写(从文本编辑器)应该会更快。我们切换到了基于流的读写实现,这大大减少了通信开销。
搜索
键入时更新搜索结果
在全文搜索中,结果现在会在您键入时更新。这对于构建复杂的正则表达式查询等场景特别有用,快速的查询反馈可以帮助您编写正则表达式。
在此,即时反馈有助于构建一个用于采用 TypeScript 可选链语法的正则表达式查找和替换查询
主题:Noctis Hibernus,字体:Hasklig
注意:可以通过将 search.searchOnType
设置为 false
来禁用此功能,并且可以通过 search.searchOnTypeDebouncePeriod
调整键入和搜索之间的延迟,默认为 300 毫秒。
为搜索结果添加光标
我们添加了一个命令,可以为文本搜索的所有匹配项添加光标。在搜索视图中,当焦点位于文件的搜索结果上时,您可以按 ⇧⌘L (Windows, Linux Ctrl+Shift+L) 同时编辑该文件中的所有匹配项。这与在使用查找小部件在单个编辑器内搜索时使用的键盘快捷方式相同。
默认展开所有搜索结果
以前,如果全文搜索在单个文件中返回超过 10 个结果,它将在结果树中显示为折叠状态。但这有时会使查找特定结果变得困难,因此在此版本中,所有结果都将展开显示。
您可以将 search.collapseResults
设置为 auto
以恢复旧的行为。
编辑器
小地图中的错误、警告和内容更改装饰
错误和警告现在在小地图(代码概览)中以内联方式高亮显示。您可以使用新的主题颜色 minimap.errorHighlight
和 minimap.warningHighlight
更改这些装饰的颜色。
下图显示了小地图高亮了一个细微的逗号遗漏错误
内容更改装饰也显示在小地图的装订线中
您可以使用以下颜色修改内容更改颜色
minimapGutter.addedBackground
minimapGutter.modifiedBackground
minimapGutter.deletedBackground
您可以使用 scm.diffDecorations
设置更改源代码管理装饰的可见性,该设置具有以下值
all
- 在所有位置显示源代码管理差异装饰。gutter
- 仅在左侧编辑器装订线中显示。minimap
- 仅在小地图装订线中显示。overview
- 仅在概览尺中显示。none
- 不显示差异装饰。
代码导航备用命令
以前,当您已经在定义处时,选择转到定义,VS Code 不会执行任何操作。在此版本中,可以执行备用命令。例如,可以将转到定义映射为运行转到引用。
这可以通过 editor.gotoLocation.alternativeDefinitionCommand
设置进行自定义。例如,您可以将转到定义的备用命令设置为转到声明,反之亦然。如果您更喜欢旧的行为,可以将设置留空。
速览、转到和查找所有命令
每个速览命令现在都有一个对应的转到命令。例如,现在既有速览实现也有转到实现。速览视图不会更改当前编辑器,并允许快速原地查看源代码。
下面的视频演示了如何使用速览实现在速览视图中查看 ICommandService
接口的所有实现
主题:GitHub Sharp,字体:FiraCode
相比之下,转到实现用于导航,可以快速将您带到某个实现。
下面的视频(使用 "editor.gotoLocation.multipleImplementations": "goto"
设置)通过重复按下 F12 导航到 ICommandService
接口的所有实现
主题:GitHub Sharp,字体:FiraCode
最后但同样重要的是,类似于查找所有引用命令,现在新增了查找所有实现。它将实现呈现在编辑器侧边的稳定列表中。这可以作为一个 TODO 列表使用,例如在执行影响接口所有实现的重构时。
主题:GitHub Sharp,字体:FiraCode
大纲视图和面包屑的特定语言筛选
上个里程碑,我们添加了从大纲视图和面包屑导航中筛选特定类型(如变量)的功能。此版本改进了此功能,并允许特定语言筛选,例如不显示 TypeScript 变量但显示 JavaScript 变量。
下图显示了 value
常量在 JavaScript 文件的大纲视图中显示,但在 TypeScript 版本中不显示。
主题:GitHub Sharp,字体:Fira Code
macOS 上的 IntelliSense 键盘快捷方式
IntelliSense 通常通过 Ctrl+Space 触发。然而,在 macOS 上,当配置了多个输入源时,此键盘快捷方式会被操作系统占用。这经常导致混淆,让用户认为 IntelliSense 出现问题。
现在有两种方法来处理这个问题
- 使用我们为 macOS 添加的新键盘快捷方式 Alt+Escape。
- 在 macOS 偏好设置中,通过 偏好设置 > 键盘 > 快捷键 > 输入法 禁用通过 Ctrl+Space 切换输入法。
屏幕阅读器输出
新增了一个设置 editor.accessibilityPageSize
,用于控制屏幕阅读器一次可以读取的编辑器行数。请注意,对于大于默认值 10 的数字,这会影响性能。
如果您使用屏幕阅读器的朗读全部命令,我们建议将 editor.accessibilityPageSize
设置为 100 或 1000。下一个里程碑,我们将考虑更改此设置的默认值。
新的括号匹配选项
现在可以配置 "editor.matchBrackets": "near"
以获取旧的行为,即仅当光标位于括号两侧时才高亮匹配的括号。默认值为 always
,它会高亮包含当前光标位置的匹配括号。
新的自动缩进选项
设置 editor.autoIndent
现在可以采用不同的值。此设置会影响多个功能,例如按下 Enter、按下 Tab,或在缩进和取消缩进行时。您可以将此设置想象成一个“滑块”,它变得越来越有主见
"none"
: 按下 Enter 将插入\n
,仅此而已。"keep"
: 按下 Enter 将保持当前行的缩进。"brackets"
: 包括上述所有内容,以及特定语言括号相关的特殊逻辑。"advanced"
: 包括上述所有内容,并遵循通过onEnterRules
定义的特定语言规则。"full"
(默认): 包括上述所有内容,并遵循通过indentationRules
定义的特定语言规则。
代码操作菜单键盘快捷方式
代码操作和重构菜单现在会显示自定义键绑定(如果存在)。
集成终端
最小对比度
在终端中处理颜色的应用程序可能很棘手,它们可以使用以下颜色来显示文本
- 默认前景色
- 由终端主题定义的 16 种颜色调色板
- 一组 240 种固定颜色
- 任何 RGB 颜色(1600 万)
问题在于应用程序不知道默认背景色或前景色是什么,也不知道它与应用程序使用的颜色是否具有良好的对比度。为了解决这个问题,终端现在可以动态更改文本的前景色,以满足指定的对比度。
将前景色设置为所需的对比度,范围为 1 到 21
// 4.5 is recommended for baseline website accessibility
"terminal.integrated.minimumContrastRatio": 4.5
终端颜色将增加或减少亮度,直到满足对比度或前景色变为 #000000
或 #ffffff
。
主题:Sapphire,字体:Hack
新的实验性 WebGL 渲染器
终端现在提供了一个基于 WebGL 的新渲染器,与旧的基于 canvas 的方法相比,性能提升高达 900%*。
您可以使用此设置选择使用新渲染器
"terminal.integrated.rendererType": "experimentalWebgl"
速度提升归因于多种因素,但以下是主要亮点
- WebGL 允许我们更直接地与 GPU 通信,而不是通过 Web 平台的
CanvasRenderingContext2D
API。 - 渲染器几乎完全处理数字和类型化数组,这些非常快速。对象和数组的创建也保持在最低限度,以避免不必要的垃圾回收。
- 现在所有字符都缓存在纹理图集中,而不仅仅是具有有限样式集的 ASCII 字符。这意味着重复绘制相同字符要快得多。
我们观察到,使用 canvas 渲染器时,帧渲染时间会根据用户的硬件/环境而变化很大。每帧通常需要 1 毫秒到 40 毫秒,但在极端情况下(硬件问题是一个因素),可能达到 200 毫秒以上。到目前为止,WebGL 似乎更加稳定,通常在 0.2 毫秒到 2 毫秒之间
可靠性是集成此功能后我们期望改进的方面之一。使用 canvas 渲染器时,如果 GPU/canvas 出现问题,浏览器会尝试智能地回退到在 CPU 上渲染,但我们绝不希望发生这种情况,因为我们有一个基于 DOM 的渲染器,它更适合这种情况。使用 WebGL,它应该要么按预期工作,要么彻底失败(无法获取 WebGL 上下文),在这种情况下,我们可以回退到 DOM 渲染器。
由于渲染花费的时间大大减少,CPU 得以释放,可以专注于解析传入的数据,从而渲染更多帧并更快地运行命令。以下性能数据是在 vscode 存储库中运行 ls -lR
生成的
新渲染器还修复了 canvas 渲染器的一个讨厌的 bug,即字符大于单元格大小时其侧边会被剪裁。此问题最常出现在 Linux 上带有下划线的某些字体中。
* 有关基准测试的更多信息,请参阅 xtermjs/xterm.js#1790
源代码管理
Git: git.ignoredRepositories 中的相对路径
git.ignoredRepositories
设置现在支持相对路径,这在配置工作区设置并希望忽略 VS Code 中的某些存储库时非常有用。
Git: 采用 FileSystemProvider
Git 扩展现在使用 FileSystemProvider API,除了修复某些编码问题外,它还提供了一种更高效、更可靠的方式来从 Git 存储库中公开文件的旧版本。
语言
HTML 镜像光标
VS Code 现在在您编辑 HTML 标签时会添加一个“镜像光标”。此行为由设置 html.mirrorCursorOnMatchingTag
控制,默认情况下此设置处于打开状态。
此功能的工作原理是,当您的光标移动到 HTML 标签名称范围内时,会为匹配的标签添加一个多光标。就像在多光标模式下一样,您可以使用按词删除或按词选择。当您将光标移出标签名称范围时,镜像光标会被移除。
一个特殊情况是在开始标签的末尾输入 空格,例如在 div
的末尾,像 <div
|></div
|>
。在这种情况下,VS Code 会移除关闭标签名称后的插入空格并退出镜像光标模式,以便您可以继续编辑 HTML 属性。
主题:Nord,字体:Input Mono
HTML 重命名标签
您现在可以使用 F2 重命名 HTML 中的开始/结束标签对。
自动完成的 CSS 属性排名
CSS 自动完成现在按属性的流行度进行排名
使用数据来源于 ChromeStatus.org。
Sass 模块支持
Sass 最近引入了新的模块系统。
我们已在 SCSS 文件中添加了对 Sass 模块的语法高亮支持和语言特性支持。语言特性包括
@use
和@forward
的自动完成。@use
和@forward
路径的路径完成。- Sass 内置模块的自动完成,例如
sass:math
和sass:color
。 @use
和@forward
导入路径的文档链接。
JSON
为了避免大型 JSON 文件带来的性能问题,JSON 语言支持现在对其计算的折叠区域和文档符号(用于大纲视图和面包屑)数量设置了上限。默认情况下,上限为 5000 项,但您可以通过设置 json.maxItemsComputed
更改此上限。
TypeScript 3.7
VS Code 现在附带 TypeScript 3.7.3。此重要更新带来了一些 TypeScript 语言改进,包括可选链、空值合并和断言函数,以及一些针对 JavaScript 和 TypeScript 的新工具特性。一如既往,此版本还包含许多重要的 bug 修复。
您可以在TS 3.7 博客文章上阅读更多关于 TypeScript 3.7 特性的信息。
JavaScript 和 TypeScript 的可选链支持
得益于 TypeScript 3.7,VS Code 现在原生支持 JavaScript 和 TypeScript 的可选链。这包括语法高亮和 IntelliSense
此外,当您接受可选属性的补全时,VS Code 可以自动插入 ?.
自动插入 ?.
取决于是否启用了严格空检查。可以通过 "typescript.suggest.includeAutomaticOptionalChainCompletions"
或 "javascript.suggest.includeAutomaticOptionalChainCompletions"
设置禁用自动插入 ?.
。
TypeScript 的提取接口重构
新的提取到接口重构允许您快速将内联类型提取到接口中,以便可以重用。
下面您可以看到 'Neural' 接口已从 'keyes' 中提取出来
JavaScript 和 TypeScript 的分号格式化器选项
新的格式化设置 javascript.format.semicolons
和 typescript.format.semicolons
允许您控制格式化程序如何处理 JavaScript 和 TypeScript 文件中的分号。
有效的分号格式化设置值为
ignore
- 不添加或删除分号(默认)。insert
- 在语句末尾插入分号。remove
- 移除不必要的分号。
未调用函数检查
如果您在条件语句中忘记调用函数,VS Code 现在会发出警报。
请考虑以下 TypeScript 代码片段
import * as fs from 'fs';
fs.stat('/path/to/file', function(err, stats) {
if (stats.isDirectory) {
handleDirectory(stats);
}
});
上面的示例使用了 Node.js 的fs.stat
API 来获取文件信息。但这里有一个 bug!.isDirectory
实际上是一个函数,而不是一个属性!这意味着 handleDirectory
将在每个文件上调用,而不仅仅是按预期在目录上调用,因为函数 isDirectory
被定义并评估为 true
。
请注意,只有在启用严格空检查时,您才会看到此诊断。
调试
调试启动视图
我们引入了一个新的调试启动视图,以便用户在新工作区中更轻松地启动和配置调试。根据活动文件,我们将选择合适的调试扩展,并使其可以调试或运行您的应用程序。对于更复杂的调试和运行配置,仍然最好配置一个 launch.json
文件。
下面您可以看到快速开始调试 Express JavaScript 应用程序,如果需要更多控制,则创建一个 launch.json
文件。
在调用堆栈视图中将重启帧作为内联操作
为了提高重启帧操作的可见性,现在调用堆栈视图中有一个悬停时可见的内联操作。重启帧是在命中断点后重新运行之前的源代码的便捷方法。如果调试扩展不支持重启帧,则不显示此操作。
调试控制台显示输入和输出
为了更好地区分调试控制台中的输入和输出,我们在左侧添加了输入 >
和输出 <
装饰。
内联断点显示
新增设置 debug.showInlineBreakpointCandidates
控制在调试时是否在编辑器中显示内联断点候选装饰。默认情况下,它们是可见的。
预览功能
预览功能尚未准备好正式发布,但功能已足够使用。我们欢迎您在开发过程中提供早期反馈。
搜索编辑器
在此里程碑中,我们已开始着手在专用编辑器中显示搜索结果。这提供了更多空间来查看搜索结果,并允许您同时维护多个搜索结果集合。
在此版本中,在搜索编辑器中您可以
- 使用转到定义系列命令导航到结果,包括速览定义和侧边打开定义。
- 重新运行搜索以更新结果列表。
- 查看结果周围的源代码行。
- 将结果持久化到磁盘,以便稍后引用,甚至可以在源代码管理中跟踪。
在未来的版本中,我们将继续增加功能并提高可用性。
主题:A Touch of Lilac,字体:Hasklig
注意:您可以通过将 search.enableSearchEditorPreview
设置为 true
来预览此功能。
调用层级视图
调用层级 API 在稳定版本中可用,并且语言扩展作者正在积极实现它,因此我们添加了调用层级视图。这补充了速览调用层级视图,并与查找所有引用和查找所有实现共享同一侧边栏视图。一旦语言扩展支持调用层级 API,您就可以从上下文菜单或命令面板中选择显示调用层级来查看视图
主题:GitHub Sharp,字体:FiraCode
调用层级视图允许您深入查看符号的调用者和调用。它会高亮活动编辑器中的调用,允许从任何子项重新设置视图的父级,并保留之前运行的历史记录。
JavaScript 调试器
我们正在为 Node.js 和 Chrome 开发一个新的调试器。您可以安装每夜构建扩展 js-debug-nightly
,并通过更新您的设置添加以下内容来将其用作直接替代品
{
"debug.chrome.useV3": true,
"debug.node.useV3": true
}
您无需更改现有的启动配置即可使用新的调试器。
此调试器带来了一系列新功能,例如调试和单步执行 Web Worker 的能力
主题:Earthsong,字体:Fira Code
...无需额外配置或标志即可调试 npm 脚本...
...还有更多!如果您遇到问题,请提交问题。
扩展贡献
远程开发
远程开发扩展的工作仍在继续,这些扩展允许您将容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 用作功能齐全的开发环境。
1.41 版本的功能亮点包括
- 开发容器:更轻松地在容器中试用示例存储库(例如 vscode-remote-try-python)。
- 开发容器:创建容器时的性能改进以及
devcontainer.json
的新选项。 - WSL:支持基于 ARM 的 Windows 10 PC,例如 Surface Pro X。
- 远程资源管理器现在可以将可用视图限定到特定的远程类型。
您可以在远程开发发布说明中了解新的扩展功能和 bug 修复。
您还可以阅读最近关于使用 VS Code 检查容器的博客文章,并尝试更新的在 VS Code 中使用 C++ 和 WSL 教程。
ESLint
ESLint 扩展的改进
- 更好地支持 ESLint 6.x - 在大多数情况下,使用 ESLint 6.x 时无需配置工作目录。
- 改进的 TypeScript 检测 - 一旦在 ESLint 中正确配置了 TypeScript,您就不再需要通过 VS Code 的
eslint.validate
设置进行额外配置。HTML 和 Vue.js 文件也是如此。 - Glob 工作目录支持 - 具有复杂文件夹结构并需要通过
eslint.workingDirectories
自定义工作目录的项目现在可以使用 glob 模式,而无需列出每个项目文件夹。例如,code-*
将匹配所有以code-
开头的项目文件夹。此外,扩展现在默认更改工作目录。您可以使用新的!cwd
属性禁用此功能。 - 改进的保存时自动修复 - 保存时自动修复现在是 VS Code 保存时代码操作基础结构的一部分,并在一次遍历中计算所有可能的修复。它通过
editor.codeActionsOnSave
设置进行自定义。此设置支持 ESLint 特定属性source.fixAll.eslint
。该扩展还遵循通用属性source.fixAll
。
以下设置会为所有提供者(包括 ESLint)启用自动修复
"editor.codeActionsOnSave": {
"source.fixAll": true
}
相比之下,此配置仅为 ESLint 启用自动修复
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
您还可以通过以下方式选择性地禁用 ESLint
"editor.codeActionsOnSave": {
"source.fixAll": true,
"source.fixAll.eslint": false
}
vscode-scss
vscode-scss 扩展为 SCSS 变量、mixin 和函数提供了跨文件语言支持。在此里程碑中,我们协助其开发了新版本 0.8.0。
新版本改进了
- 更好的导入路径解析
- 自动完成颜色变量的颜色预览
- 更好的性能
扩展开发
Figma 设计工具包
我们创建了一个 Figma 设计工具包,以更好地帮助扩展作者为其扩展设计体验。请查阅GitHub 上的工具包仓库,其中包含有关如何访问和使用该工具包的说明。
下面是包含的一些组件示例
所有组件都应该可以调整大小和编辑。
如果您遇到任何问题或对某些组件有任何请求,请在工具包仓库中创建一个 issue,以便我们进行分类和跟踪请求。
调试图标颜色标记
我们为调试视图添加了一组新的颜色标记。
调试工具栏
debugIcon.startForeground
debugIcon.continueForeground
debugIcon.disconnectForeground
debugIcon.pauseForeground
debugIcon.restartForeground
debugIcon.stepBackForeground
debugIcon.stepIntoForeground
debugIcon.stepOutForeground
debugIcon.stepOverForeground
debugIcon.stopForeground
主题: Min Dark, 字体: Input Mono
调试断点
debugIcon.breakpointForeground
debugIcon.breakpointDisabledForeground
debugIcon.breakpointUnverifiedForeground
debugIcon.breakpointStackframeForeground
debugIcon.breakpointCurrentStackframeForeground
主题: Min Dark, 字体: Input Mono
工作区文件事件
文件和文件夹更改时会触发新的事件
vscode.workspace.on[Will|Did]CreateFile
vscode.workspace.on[Will|Did]RenameFile
vscode.workspace.on[Will|Did]DeleteFile
当文件从资源管理器或通过扩展使用 vscode.workspace.applyEdit(WorkspaceEdit)
API 创建、重命名或删除时,这些事件会触发,但当文件在磁盘上更改或通过 vscode.workspace.fs
API 修改时,这些事件不会触发。
这些事件的一个可能用例是语言服务器,它可以在重命名文件之前更新文件内容,或在删除/创建文件后更新项目文件。
SnippetString
SnippetString
类型现在有一个用于 choice-elements 的构建器方法。
严格的 getWordRangeAtPosition
TextDocument.getWordRangeAtPosition
API 现在更加严格,并且不会忽略导致空字符串匹配的无效正则表达式,而是会抛出错误。
已弃用 extensionKind 的字符串类型
扩展作者可以使用 extensionKind
属性在 package.json
中指示扩展在远程情况下应在哪里运行。在 1.40 版本中,此值可以是字符串或数组。从本版本开始,此属性仅支持数组值,使用字符串已被弃用。有关更多信息,请参阅远程开发文档。
将 DAP Source 转换为 URI
VS Code 扩展 API 在引用可以在编辑器中打开的资源时使用文档 URI,而调试适配器协议基于Source 描述符。在此里程碑中,我们添加了一个连接这两个世界的 API。函数 debug.asDebugSourceUri
从 DAP Source 对象创建一个 URI。这使得将 DAP Source 在 VS Code 编辑器中打开变得简单
export async function openDAPSource(
session: vscode.DebugSession,
source: DebugProtocol.Source
) {
const uri = vscode.debug.asDebugSourceUri(source, session);
vscode.window.showTextDocument(vscode.workspace.openTextDocument(uri));
}
提议的扩展 API
每个里程碑都伴随着新的提案 API,扩展作者可以试用。一如既往,我们渴望收到您的反馈。以下是试用提案 API 的步骤
- 您必须使用 Insiders 版本,因为提案 API 会频繁更改。
- 您的扩展的
package.json
文件中必须包含以下行:"enableProposedApi": true
。 - 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目的源代码位置。
请注意,您不能发布使用提案 API 的扩展。下个版本中可能存在重大更改,我们绝不希望破坏现有扩展。
CodeAction.disabled
VS Code 鼓励扩展使用Code Actions 实现重构功能。然而,用户可能难以发现扩展支持哪些重构,也难以理解为什么特定选择下某个重构不可用。CodeAction.disabled
API 提案旨在帮助扩展使其重构更容易被发现。
CodeAction
上提案的 .disabled
属性是一个人类可读的字符串,描述了为什么某个 Code Action 不可用。以下是在我们的CodeAction 示例扩展中使用 .disabled
的示例。
import * as vscode from 'vscode';
export class Emojizer implements vscode.CodeActionProvider {
public provideCodeActions(document: vscode.TextDocument, range: vscode.Range): vscode.CodeAction[] | undefined {
const action = new vscode.CodeAction(`Convert to ${emoji}`, vscode.CodeActionKind.Refactor.append('emojize'));
if (!this.isAtStartOfSmiley(document, range)) {
// Tell the user why our action is not available
action.disabled = 'Selection is not currently on a :)';
return [action];
}
action.edit = new vscode.WorkspaceEdit();
action.edit.replace(document.uri, new vscode.Range(range.start, range.start.translate(0, 2)), '😀');
return action;
}
...
}
如果用户尝试通过键盘快捷方式应用禁用的 Code Action,VS Code 将向用户显示 .disabled
错误消息
此外,为了帮助发现,禁用的 Code Actions 在 重构 和 源操作 上下文菜单中显示为灰色
请注意,禁用的操作不会显示在顶层的灯泡菜单中。
如果您的扩展使用了 Code Actions,并且您认为 CodeAction.disabled
会有用且可以实现,请告诉我们。
自定义编辑器的编辑能力
本次迭代我们继续致力于自定义编辑器提案。提醒一下,自定义编辑器是基于 Webview 的视图,可以用于代替 VS Code 的普通文本编辑器来处理特定文件类型。从 VS Code 1.41 开始,自定义编辑器现在可以与 VS Code 的撤消/重做和保存功能集成,这使得许多有趣的用例成为可能,包括将它们用作可视化和所见即所得编辑器。
您可以在 vscode.proposed.d.ts 中找到当前的 API 提案,我们还准备了一些非常简单的扩展示例,演示了如何将自定义编辑器用于文本文件和二进制文件。
如果您对自定义编辑器感兴趣,请分享您对当前提案的反馈,并告诉我们您是否能够实现它。
语义标记提供者
我们为语义标记提供者添加了新的提案 API。新的 API 允许扩展提供额外的标记信息,编辑器可以使用这些信息来丰富基于 TextMate 的语法高亮显示。
每个语义标记用一个标记 类型 和任意数量的标记 修饰符 注释一个范围。例如,类型 variable
和修饰符 member
以及 modification
将描述对成员变量的写入访问。然后使用标记类型和修饰符在编辑器中添加样式。
样式可以在颜色主题和用户设置中配置
"editor.tokenColorCustomizationsExperimental": {
"variable.member": {
"foreground": "#35166d"
},
"*.modification": {
"fontStyle": "underline"
}
}
如果您对此功能感兴趣,我们希望收到您对当前提案的反馈,并且非常鼓励进行实验和一些早期实现。
完整的示例可在vscode-extensions-samples 仓库中找到。
语言服务器协议
现在通过 LSP 提供了对调用层级视图的提案支持。
浏览器支持
改进了对 Firefox 和 Safari (macOS & iPadOS) 的支持
在此里程碑中,我们专注于改进在浏览器中使用 Firefox 或 Safari 运行 VS Code 的体验。我们修复了许多问题以支持这两种浏览器(Firefox,Safari)。在 Firefox 上,由于上游阻止因素,我们尚未完全支持键盘快捷方式,您可以在跟踪问题 #85252中阅读更多详细信息。
我们还修复了许多问题,以在 iPadOS 上的 Safari 中启用基本的 VS Code 功能。核心 UI 元素现在可通过触控和指针设备访问。然而,仍存在与预定义键绑定(Escape
和 Function
键)、悬停以及触控友好的 UI/UX 相关的主要阻止因素。有关更多信息,请参阅问题 #85254。
在浏览器中运行提供更多功能
上个里程碑,我们引入了支持,可以从我们的仓库运行 yarn web
来设置在浏览器中运行的 VS Code。此设置仍用于测试浏览器中的问题,而非用于开发。
在此里程碑中,我们添加了更多可以测试的功能
- 调试
- 搜索
- 任务
- 问题
以下是演示新功能实际使用的视频
注意:请勿将此设置用于任何严肃的开发。其目的是让社区能够将更改贡献回 VS Code,以改善整体的浏览器体验。
工程
Insiders 版本在 yum 仓库中可用
Insiders 构建版本现在已在 yum 仓库中提供,并像 apt 仓库一样自动发布。按照网站上的说明设置仓库并使用 sudo dnf install code-insiders
进行安装。
Monaco Editor 的持续构建
本次迭代我们为 Monaco Editor 添加了持续构建和测试管道。我们从 VS Code 仓库的主分支构建 Monaco Editor 核心,并执行健全性测试,以便尽早捕获潜在错误或意外的重大更改。
显著修复
- 51039:在另一个选项卡中关闭左侧编辑器时,差异编辑器会关闭
- 83746:Web:无法拖放复合组件 & 视图(活动栏、面板)
- 80026:launch.json 中的灰色属性令人困惑,请删除它们
- 83449:辅助功能:辅助功能模式下的 Ctrl+Right (CursorWordAccessibilityRight) 应跳转到下一个单词的开头,而不是末尾
- 83753:禁用 console.debug.wordWrap 会去除换行符和空白字符
- 85086:禁用
search.usePCRE2
时,全局搜索不支持反向引用 - 36219:Git:“暂存选定范围”命令将编码更改为 UTF-8
感谢
最后但同样重要的是,非常感谢! 以下帮助改进 VS Code 的人员
对问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Alexander (@usernamehw)
- Danny Tuppeny (@DanTup)
对 vscode
的贡献
- Amir Omidi (@aaomidi):使用 isNaN 代替 === NaN PR #83790
- Anirudh Rayabharam (@anirudhrb):Git:修复在空仓库中暂存时的错误 PR #82995
- Anthony Dresser (@anthonydresser):为 git hook 添加过滤器 (dev qol) PR #85159
- Jakub Chodorowicz (@chodorowicz):改进 Monokai 主题对 markdown 文件的支持 PR #85467
- DiamondYuan (@DiamondYuan):修复:修复 CustomEditoInputFactory -> CustomEditorInputFactory 的拼写错误 PR #85090
- George Batalinski (@georgebatalinski):修复(aria-expanded) 在子菜单上添加 aria prop PR #79775
- John Murray (@gjsjohnmurray)
- James Inkster (@Grommers00):修复 #84080 在终端中添加了 cntl-shift-c 和 cntl-shift-v PR #84438
- Vladislav Hadzhiyski (@hadzhiyski)
- Hung-Wei Hung (@hunghw):修复 #83818 - 完善 enablePreviewFromQuickOpen 中的描述 PR #83895
- Andrew Liu (@hypercubestart):修复 #82457,markdown 打开但源选项卡未聚焦 PR #85506
- Andrii Dieiev (@IllusionMH):改进模板字符串支持以匹配 TS PR #80234
- Jason Ginchereau (@jasongin):修复自动化库中的小包装问题 PR #83942
- Jean Pierre (@jeanp413)
- Huáng Jùnliàng (@JLHwung):将
babel.config.json
添加到 JSON 验证模式映射 PR #83758 - Joan Rieu (@joanrieu):记录 problemMatcher.fileLocation="autodetect" 配置选项 PR #83803
- John Combs (@jscombs91):将 force-device-scale-factor 添加到命令行参数 PR #84651
- Robert Jin (@jzyrobert)
- @MartinBrathen:修复首次点击时的缩放问题 PR #83826
- @mltony:使辅助功能模式下的 ctrl+right 跳到单词的开头 PR #83450
- Nilesh Kevlani (@njkevlani):从搜索结果添加多光标的命令和键绑定 PR #82510
- okmttdhr (@okmttdhr)
- @OneQuid:修复文件名中包含 '%' 时打开图像的问题 PR #84667
- Osk (@oskosk):解决 installMissingDependencies 的命令标识符中的拼写错误 PR #84056
- Peter Elmers (@pelmers):为 QuickPick 添加可选的 sortByLabel,以控制是否重新排序结果 PR #77297
- Pieter Vanderpol (@petevdp)
- Samuel Bronson (@SamB):也允许 jsconfig.json 中的尾随逗号 PR #85479
- Shizeng Zhou (@shizengzhou):修复 #84111 PR #84610
- @smilegodly:将 focusSearch() 添加到 clearSearchResults() 并去除了重复函数 PR #83617
- Konstantin Solomatov (@solomatov)
- 空雲 (@SoraKumo001):使本地和远程端口可配置 PR #84958
- Sebastian Pahnke (@spahnke):monaco-editor:在 SimpleEditorModelResolverService 中按资源查找模型 PR #85129
- 酷酷的哀殿 (@sunbohong):支持 utf-8 编码猜测 PR #84504
- Tobias Fenster (@tfenster):实现按标记类型过滤 PR #83797
- Valentin Hăloiu (@vially):为 git clone 命令添加父路径 PR #85459
- Wojciech Buczek (@Wowol):为 git.ignoredRepositories 添加相对路径支持 PR #83466
- ZHAO Jinxiang (@xiaoxiangmoe):将 .cjs 添加到已知 JavaScript 文件扩展名 PR #85460
对 language-server-protocol
的贡献
-
Bradley Walters (@bmwalters):修复 document symbol 中列出的错误客户端能力接口 PR #862
对 vscode-css-languageservice
的贡献
- Piotr Błażejewicz (Peter Blazejewicz) (@peterblazejewicz):修复 linear gradient 描述。 PR #198
- @wongjn
对 debug-adapter-protocol
的贡献
- Ben Clayton (@ben-clayton):更新 sdks.md PR #82
对 vscode-chrome-debug-core
的贡献
- Elmi Ahmadov (@ahmadov):修复设置属性新值时的引用错误问题 PR #546
对 vscode-vsce
的贡献
- Alessandro Fragnani (@alefragnani):通过选项忽略文件 PR #294
- James Inkster (@Grommers00):修复 #400 允许强制取消发布扩展 PR #405
- Chris S. (@LaChRiZ):如果包路径是目录,则使用默认文件名写入 vsix PR #248
- Nate Drake (@ndrake):将 .vsce 权限设置为 0600;修复 #230 PR #295
对本地化的贡献
有 800 多名 Cloud + AI Localization 社区成员使用 Microsoft Localization Community Platform (MLCP),其中有约 100 名活跃的 Visual Studio Code 贡献者。我们感谢您的贡献,无论是提供新的翻译、对翻译进行投票,还是提出流程改进建议。
以下是贡献者的快照。有关项目的详细信息,包括贡献者姓名列表,请访问项目网站:https://aka.ms/vscodeloc。
- Bosnian (Latin, Bosnia and Herzegovina): Sead Mulahasanović, Ismar Bašanović, Adnan Rizvan.
- Danish: Lasse Stilvang.
- Dutch: Lemuel Gomez, Gideon van de Laar.
- English (United Kingdom): Martin Littlecott, Alonso Calderon, Daniel Imms, Kamalsinh Solanki.
- Finnish: Tuula P.
- French: Antoine Griffard, Thierry DEMAN-BARCELÒ, Edouard Choinière, Joel Monniot, Rodolphe NOEL, Alain BUFERNE, Xavier Laffargue, DJ Dakta.
- German: Pascal Wiesendanger, Jakob von der Haar, jan-nitsche, Michael Richter.
- Greek: Valantis Kamayiannis, Θοδωρής Τσιρπάνης.
- Hebrew: Ariel Bachar.
- Hindi: Kiren Paul, Niraj Kumar, Preeti Madhwal, Jaadu Jinn, Mahtab Alam.
- Hungarian: József Cserkó, Kiss Attila Csaba, Krisztián Papp.
- Chinese Simplified: Yizhi Gu, Tingting Yi, Justin Liu, Charles Dong, Peng Zeng, Tony Xia, 斌 项, Yixing Zheng, paul cheung, 普鲁文, Sheng Jiang, 钟越, Joel Yang, 一斤瓜子, Zhiqiang Li, Yiting hu, Alexander ZHANG, 张锐, Libing Yang, ZHENGCHENG CHEN, 光宇 朴, 石岩 詹, 舜杰 杨, WJ Wang, Siam Chen.
- Chinese Traditional: Winnie Lin, 船長, Alan Tsai, TingWen Su.
- Indonesian: Eriawan Kusumawardhono, Arif Fahmi, Laurensius Dede Suhardiman, Christian Elbrianno.
- Italian: Alessandro Alpi, Luigi Bruno.
- Japanese: Takayuki Fuwa, 贵康 内田, Kyohei Uchida, Koichi Makino, TENMYO Masakazu, Aya Tokura.
- Korean: Hongju.
- Latvian: Andris Vilde.
- Norwegian: Frode Aarebrot, Anders Stensaas, Thomas Ødegård, Thomas Isaksen.
- Polish: Makabeus Orban, Wojciech Maj, Kacper Łakomski, Oskar Janczak, Szymon Seliga, Mateusz Redynk, Franx Bar.
- Portuguese (Brazil): Marcelo Fernandes, Albert Tanure, Arthur Lima, Nylsinho Santos, Pudda, Matheus Vitti Santos, Rodrigo Crespi, Roberto Fonseca, Felipe Nascimento.
- Portuguese(Portugal): Francisco Osorio, Luís Chaves, Ricardo Sousa Vieira, João Fernandes.
- Romanian: LaServici, Dan Ichim.
- Russian: Vadim Svitkin.
- Serbian Cyrillic: Dusan Milojkovic.
- Spanish: José María Aguilar, Gustavo Gabriel Gonzalez.
- Tamil: MUTHU VIJAY, Sankar Raj, Kadhireshan S, Pandidurai R, Madhu Chakravarthy, Madhu Maha.
- Turkish: Mehmet Yönügül, mehmetcan Gün, Misir Jafarov, Fırat Eşki, Gökberk Nur, Safa Selim.
- Ukrainian: Arthur Murauskas, Oleksandr Krasnokutskyi.
- Vietnamese: Dat Nguyen, Vương, Dao Ngo, Van-Tien Hoang, ng-hai.