2019年11月(版本1.41)
更新 1.41.1: 此次更新解决了这些问题。
下载:Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap
欢迎来到2019年11月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键的亮点包括:
- 资源管理器中的紧凑文件夹 - 默认情况下,单个子文件夹被折叠。
- 编辑差异视图的左侧 - 您现在可以在差异视图中编辑两个文件。
- Update search results while typing - 在您输入时全局搜索结果会更新。
- 问题面板改进 - 按问题类型过滤并将输出限制为活动文件。
- Minimap 高亮显示错误和内容更改 - 快速定位文件中的问题和更改。
- 终端最小对比度 - 设置首选对比度以提高可见性。
- HTML 镜像光标在标签中 - 在匹配的 HTML 标签中自动多光标。
- JS/TS中的可选链 - 使用
?.操作符来简化嵌套结构的操作。 - Extract interface refactoring - 快速将内联类型提取为TypeScript接口。
- Dev Containers 扩展 - 更好地支持在 Docker 容器中打开仓库。
如果您想在线阅读这些发布说明,请访问更新在code.visualstudio.com上。
内部人员:想要尽快看到新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。要获取最新的Visual Studio Code新闻、更新和内容,请在Twitter上关注我们@code!
工作台
资源管理器中的紧凑文件夹
在文件资源管理器中,我们现在以紧凑形式呈现单个子文件夹。在这种形式下,单个子文件夹将被压缩在一个组合的树元素中。例如,这对于Java包结构非常有用。
设置 explorer.compactFolders 控制此行为。默认情况下,此设置是开启的。

在差异中编辑左侧
如果你比较两个可编辑的编辑器(例如,通过文件资源管理器比较两个文件或运行全局搜索和替换),左侧现在也是可编辑的,并且可以保存(⌘S (Windows, Linux Ctrl+S))。

注意: 如果您厌倦了按 ⌘S (Windows, Linux Ctrl+S),您可以启用自动保存(文件 > 自动保存)。
从Peek编辑器中保存
如果你打开一个Peek视图并在其中输入内容,现在可以通过⌘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.addedBackgroundminimapGutter.modifiedBackgroundminimapGutter.deletedBackground
您可以使用scm.diffDecorations设置更改源代码控制装饰的可见性,该设置具有以下值:
all- 在所有位置显示源代码控制差异装饰。gutter- 仅在左侧编辑器边栏中显示。minimap- 仅在小地图边栏中显示。overview- 仅在概览标尺中显示。none- 不显示差异装饰。
代码导航替代命令
VS Code 过去在已经处于定义位置时选择转到定义时不会执行任何操作。在这个版本中,可以改为执行替代命令。例如,转到定义可以映射为运行转到引用。
这是通过editor.gotoLocation.alternativeDefinitionCommand设置进行自定义的。例如,您可以将转到定义的替代项设置为转到声明,反之亦然。如果您更喜欢旧的行为,可以将此设置留空。
Peek、Go to 和 Find All 命令
每个Peek命令现在都有一个Go to对应项。例如,现在既有Peek Implementations也有Go to Implementations。Peek视图不会改变当前编辑器,并允许快速就地查看源代码。
下面的视频展示了使用Peek Implementations来查看ICommandService接口在Peek视图中的所有实现:

主题: GitHub Sharp, 字体: FiraCode
相比之下,转到实现用于导航,可以快速带你到实现部分。
下面的视频(使用"editor.gotoLocation.multipleImplementations": "goto"设置)通过重复按下F12来导航到ICommandService接口的所有实现:

主题: GitHub Sharp, 字体: FiraCode
最后但同样重要的是,类似于查找所有引用命令,现在有了查找所有实现。它将实现以稳定的列表形式展示在编辑器的一侧。这可以用作TODO列表,例如在执行影响接口所有实现的重构时。

主题: GitHub Sharp, 字体: FiraCode
面包屑和大纲视图的特定语言过滤
上一个里程碑中,我们增加了从大纲视图和面包屑导航中过滤某些类型(如变量)的功能。此版本进一步完善了这一功能,并允许进行特定语言的过滤,例如不显示TypeScript变量但显示JavaScript变量。
下面你可以看到value常量在JavaScript文件的Outline视图中显示,但在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。

主题:蓝宝石,字体:Hack
新的实验性WebGL渲染器
一个新的基于WebGL的渲染器可用于终端,与旧的基于canvas的方法相比,性能提升高达900%*。
您可以通过此设置选择使用新的渲染器:
"terminal.integrated.rendererType": "experimentalWebgl"
速度的提升归功于许多因素,但以下是其中的亮点:
- WebGL 允许我们更直接地与 GPU 通信,而不是通过网页平台的
CanvasRenderingContext2DAPI。 - 渲染器几乎只处理数字和类型化数组,这些操作非常快速。对象和数组的创建也保持在最低限度,以避免不必要的垃圾回收。
- 所有字符现在都缓存在一个纹理图集中,而不是仅限于具有有限样式集的ASCII字符。这意味着重复绘制相同字符的速度要快得多。
我们观察到,使用canvas渲染器时,帧的渲染速度因用户的硬件/环境而有很大差异。每帧通常需要1毫秒到40毫秒不等,但在极端情况下,如果硬件存在问题,可能会超过200毫秒。到目前为止,WebGL似乎更加稳定,通常在0.2毫秒到2毫秒之间:

可靠性是我们期望在集成后改进的一个方面。使用画布渲染器时,如果GPU/画布出现问题,浏览器会尝试智能地回退到CPU上进行渲染,但我们不希望这种情况发生,因为我们有一个基于DOM的渲染器,它更适合这种情况。使用WebGL时,它应该要么按预期工作,要么完全失败(无法获取WebGL上下文),在这种情况下,我们可以回退到DOM渲染器。
由于渲染所需的时间大大减少,CPU可以专注于解析传入的数据,从而渲染更多的帧并更快地运行命令。以下性能数据是在vscode仓库中运行ls -lR生成的:

新的渲染器还修复了画布渲染器中的一个严重错误,即当字符大于单元格大小时,字符的侧面会被裁剪。这个问题在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标签的末尾,如>>。在这种情况下,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。一如既往,此版本还包括一些重要的错误修复。
你可以在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。

请注意,只有在启用了严格空值检查时,您才会看到此诊断信息。
调试
调试 START 视图
我们引入了一个新的调试START视图,使用户在新工作区中启动和配置调试变得更加容易。根据活动文件,我们将选择合适的调试扩展,并使调试或运行您的应用程序成为可能。对于更复杂的调试和运行配置,仍然最好配置一个launch.json文件。
下面你可以看到快速开始调试一个Express JavaScript应用程序,然后如果需要更多控制,创建一个launch.json文件。

在CALL STACK视图中作为内联操作重新启动帧
为了提高重新启动帧操作的可发现性,现在在CALL STACK视图中有一个悬停时可见的内联操作。重新启动帧是在遇到断点后重新运行前面源代码的便捷方式。如果调试扩展不支持重新启动帧,则不会显示此操作。

调试控制台显示输入和输出
为了更好地在调试控制台中区分输入和输出,我们在左侧添加了输入>和输出<的装饰。

内联断点显示
一个新的设置 debug.showInlineBreakpointCandidates 控制调试时是否在编辑器中显示内联断点候选装饰。默认情况下,它们是可见的。
预览功能
预览功能尚未准备好发布,但功能足够使用。我们欢迎您在开发过程中提供早期反馈。
搜索编辑器
在这个里程碑中,我们开始致力于在专用编辑器中显示搜索结果。这提供了更多空间来查看搜索结果,并允许您同时维护多个搜索结果的集合。
通过此版本,在搜索编辑器中您可以:
- 使用转到定义系列命令导航到结果,包括查看定义和在侧边打开定义。
- 重新运行搜索以更新结果列表。
- 查看结果周围的源代码行。
- 将结果持久化到磁盘,以便以后引用,甚至可以在源代码控制中进行跟踪。
我们将在未来的版本中继续增加功能并提高可用性。

主题:一抹紫丁香,字体:Hasklig
注意: 您可以通过将 search.enableSearchEditorPreview 设置为 true 来预览此功能。
调用层次结构视图
调用层次结构API在稳定版中可用,语言扩展作者正忙于实现它,因此我们添加了一个调用层次结构视图。这补充了Peek Call Hierarchy视图,并与Find All References和Find All Implementations共享相同的侧边栏视图。一旦语言扩展支持调用层次结构API,您将能够从上下文菜单或命令面板中选择Show Call Hierarchy来查看该视图:

主题: GitHub Sharp, 字体: FiraCode
调用层次结构视图允许您深入查看符号的调用者和被调用者。它会在活动编辑器中高亮显示调用,允许从任何子项重新设置视图的父级,并保留先前运行的历史记录。
JavaScript 调试器
我们正在为Node.js和Chrome开发一个新的调试器。您可以安装夜间扩展js-debug-nightly,并通过更新您的设置来添加它,作为直接替换使用:
{
"debug.chrome.useV3": true,
"debug.node.useV3": true
}
为了使用新的调试器,您不需要更改现有的启动配置。
调试器带来了一系列新功能,例如能够调试和逐步执行webworkers:

主题:地球之歌,字体:Fira Code
...无需额外配置或标志即可调试 npm 脚本...

...还有更多!如果遇到问题,请提交问题。
对扩展的贡献
远程开发
工作仍在继续在远程开发扩展上,这些扩展允许您使用容器、远程机器或Windows Subsystem for Linux (WSL) 作为全功能的开发环境。
1.41版本的功能亮点包括:
- 开发容器:更容易在容器中尝试示例仓库(例如 vscode-remote-try-python)。
- 开发容器:创建容器时的性能改进以及
devcontainer.json的新选项。 - WSL:支持在基于ARM的Windows 10 PC上,如Surface Pro X。
- 远程资源管理器现在可以将可用视图的范围限定为特定的远程类型。
您可以在远程开发发布说明中了解新扩展功能和错误修复。
你也可以阅读最近的一篇关于使用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 变量、混合和函数的跨文件语言支持。在这个里程碑中,我们帮助其开发了一个新版本,0.8.0。
新版本改进了:
- 更好的导入路径解析
- 自动完成颜色变量的颜色预览
- 更好的性能
扩展开发
Figma 设计工具包
我们创建了一个Figma设计工具包,以更好地帮助扩展作者为他们的扩展设计体验。查看GitHub上的工具包仓库,其中有关于如何访问和使用该工具包的说明。
以下是一些包含的组件示例:

所有组件都应可调整大小和可编辑。

如果您遇到任何问题或对某些组件有任何请求,请在工具包仓库中创建一个问题,以便我们能够分类和跟踪这些请求。
调试图标颜色标记
我们为调试视图添加了一组新的颜色标记。
调试工具栏:
debugIcon.startForegrounddebugIcon.continueForegrounddebugIcon.disconnectForegrounddebugIcon.pauseForegrounddebugIcon.restartForegrounddebugIcon.stepBackForegrounddebugIcon.stepIntoForegrounddebugIcon.stepOutForegrounddebugIcon.stepOverForegrounddebugIcon.stopForeground

主题: Min Dark, 字体: Input Mono
调试断点:
debugIcon.breakpointForegrounddebugIcon.breakpointDisabledForegrounddebugIcon.breakpointUnverifiedForegrounddebugIcon.breakpointStackframeForegrounddebugIcon.breakpointCurrentStackframeForeground

主题: Min Dark, 字体: Input Mono
工作区文件事件
当文件和文件夹发生变化时,有以下新事件:
vscode.workspace.on[Will|Did]CreateFilevscode.workspace.on[Will|Did]RenameFilevscode.workspace.on[Will|Did]DeleteFile
当文件从资源管理器或通过扩展使用vscode.workspace.applyEdit(WorkspaceEdit) API创建、重命名或删除时,会触发事件,但当文件在磁盘上更改或通过vscode.workspace.fs API修改文件时不会触发事件。
这些事件的一个可能用例是语言服务器,它可能在重命名文件之前更新文件内容,或在删除/创建文件后更新项目文件。
SnippetString
SnippetString 类型现在有一个用于选择元素的构建器方法。
严格获取位置处的单词范围
TextDocument.getWordRangeAtPosition API 现在更加严格,不再忽略导致空字符串匹配的无效正则表达式,而是会抛出错误。
已弃用的extensionKind字符串类型
扩展作者可以在package.json中使用extensionKind属性来指示在远程情况下扩展应在何处运行。在发布版本(1.40)中,此值可以是字符串或数组。从本版本开始,此属性仅支持数组值,使用字符串已被弃用。有关更多信息,请参阅远程开发文档。
将DAP源转换为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 提案旨在帮助扩展使其重构功能更易于发现。
提议的.disabled属性在CodeAction上是一个人类可读的字符串,描述了为什么给定的代码操作是不可能的。这里有一个使用.disabled的示例,在我们的CodeAction示例扩展中。
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;
}
...
}
如果用户尝试通过快捷键应用一个禁用的代码操作通过快捷键,VS Code 将向用户显示.disabled错误信息:

此外,为了帮助发现,禁用的代码操作在重构和源操作上下文菜单中以淡色显示:

请注意,禁用的操作不会显示在顶层的灯泡菜单中。
如果您的扩展使用代码操作,请告诉我们,如果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在浏览器中运行。此设置仍旨在用于测试浏览器中的问题,而不是用于开发。
在这个里程碑中,我们添加了更多可以测试的功能:
- 调试
- Search
- 任务
- 问题
这里是一个展示新功能实际操作的视频:

注意: 不要将此设置用于任何严肃的开发。其目的是让社区能够贡献更改回VS Code,以改善浏览器中的整体体验。
工程
Yum 仓库中的 Insiders 版本
Insiders 版本现在可以在 yum 仓库中使用,并且像 apt 仓库一样自动发布。按照网站上的说明设置仓库并使用 sudo dnf install code-insiders 进行安装。
Monaco Editor 的持续构建
在这个迭代中,我们为Monaco Editor添加了持续构建和测试管道。我们从VS Code仓库的主分支构建Monaco Editor核心,并进行健全性测试,以尽早发现潜在的bug或意外的破坏性更改。
显著的修复
- 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(开发体验优化) PR #85159
- Jakub Chodorowicz (@chodorowicz): 改进Markdown文件的Monokai主题 PR #85467
- DiamondYuan (@DiamondYuan): 修复: 修复拼写错误 CustomEditoInputFactory -> CustomEditorInputFactory PR #85090
- George Batalinski (@georgebatalinski): 修复子菜单上的aria-expanded属性,添加aria属性 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): 文档问题匹配器.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): 添加可选的 sortByLabel 到 QuickPick 以控制是否重新排序结果 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): Make local and remote ports configurable PR #84958
- Sebastian Pahnke (@spahnke): monaco-editor: 在 SimpleEditorModelResolverService 中通过资源查找模型 PR #85129
- 酷酷的哀殿 (@sunbohong): Support utf-8 encoding guessing 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): 修复了文档符号中列出的错误客户端功能接口 PR #862
对 vscode-css-languageservice 的贡献:
对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
对localization的贡献:
有超过800名Cloud + AI Localization社区成员使用微软本地化社区平台(MLCP),其中约有100名活跃贡献者参与Visual Studio Code的本地化工作。我们感谢您的贡献,无论是提供新的翻译、对翻译进行投票,还是建议流程改进。
这是贡献者的快照。有关项目的详细信息,包括贡献者名单,请访问项目网站https://aka.ms/vscodeloc。
- 波斯尼亚语(拉丁文,波斯尼亚和黑塞哥维那): Sead Mulahasanović, Ismar Bašanović, Adnan Rizvan.
- 丹麦语: Lasse Stilvang.
- 荷兰语: Lemuel Gomez, Gideon van de Laar.
- 英语(英国): Martin Littlecott, Alonso Calderon, Daniel Imms, Kamalsinh Solanki.
- 芬兰语: Tuula P.
- 法语: Antoine Griffard, Thierry DEMAN-BARCELÒ, Edouard Choinière, Joel Monniot, Rodolphe NOEL, Alain BUFERNE, Xavier Laffargue, DJ Dakta.
- 德语: Pascal Wiesendanger, Jakob von der Haar, jan-nitsche, Michael Richter.
- 希腊语: Valantis Kamayiannis, Θοδωρής Τσιρπάνης.
- 希伯来语: Ariel Bachar.
- 印地语: Kiren Paul, Niraj Kumar, Preeti Madhwal, Jaadu Jinn, Mahtab Alam.
- 匈牙利语: 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.
- 印尼语: Eriawan Kusumawardhono, Arif Fahmi, Laurensius Dede Suhardiman, Christian Elbrianno.
- 意大利语: Alessandro Alpi, Luigi Bruno.
- Japanese: Takayuki Fuwa, 貴康 内田, Kyohei Uchida, Koichi Makino, TENMYO Masakazu, Aya Tokura.
- 韩语: Hongju.
- 拉脱维亚语: Andris Vilde.
- 挪威语: Frode Aarebrot, Anders Stensaas, Thomas Ødegård, Thomas Isaksen.
- 波兰语: Makabeus Orban, Wojciech Maj, Kacper Łakomski, Oskar Janczak, Szymon Seliga, Mateusz Redynk, Franx Bar.
- 葡萄牙语(巴西): Marcelo Fernandes, Albert Tanure, Arthur Lima, Nylsinho Santos, Pudda, Matheus Vitti Santos, Rodrigo Crespi, Roberto Fonseca, Felipe Nascimento.
- 葡萄牙语(葡萄牙): Francisco Osorio, Luís Chaves, Ricardo Sousa Vieira, João Fernandes.
- 罗马尼亚语: LaServici, Dan Ichim.
- 俄语: Vadim Svitkin.
- 塞尔维亚西里尔文: Dusan Milojkovic.
- 西班牙语: José María Aguilar, Gustavo Gabriel Gonzalez.
- 泰米尔语: MUTHU VIJAY, Sankar Raj, Kadhireshan S, Pandidurai R, Madhu Chakravarthy, Madhu Maha.
- 土耳其语: Mehmet Yönügül, mehmetcan Gün, Misir Jafarov, Fırat Eşki, Gökberk Nur, Safa Selim.
- 乌克兰语: Arthur Murauskas, Oleksandr Krasnokutskyi.
- 越南语: Dat Nguyen, Vương, Dao Ngo, Van-Tien Hoang, ng-hai.