2019 年 11 月(版本 1.41)
更新 1.41.1:此更新解决了这些 问题。
下载:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap
欢迎使用 2019 年 11 月发布的 Visual Studio Code。此版本包含一些我们希望您喜欢的更新,一些主要亮点包括
- 资源管理器中紧凑的文件夹 - 默认情况下,单个子文件夹会折叠。
- 编辑差异视图左侧 - 您现在可以在差异视图中编辑两个文件。
- 在您键入时更新搜索结果 - 全局搜索结果在您键入时更新。
- 问题面板改进 - 按问题类型过滤并限制输出到活动文件。
- 小地图突出显示错误和内容更改 - 快速定位文件中的问题和更改。
- 终端最小对比度 - 设置首选对比度以提高可见性。
- HTML 标签中的镜像光标 - 在匹配的 HTML 标签中自动多光标。
- JS/TS 中的可选链式调用 - 使用
?.
运算符简化嵌套结构的操作。 - 提取接口重构 - 快速将内联类型提取到 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),您可以启用自动保存(文件 > 自动保存)。
从窥视编辑器保存
如果您调出窥视视图并输入内容,现在可以通过 ⌘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
最后但并非最不重要的,与查找所有引用命令类似,现在有了查找所有实现。它将实现作为稳定列表显示在编辑器旁边。例如,在执行影响接口所有实现的重构时,可以将其用作待办事项列表。
主题: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 的新渲染器,与旧的基于画布的方法相比,它可以将性能提升高达 900%*。
您可以使用此设置选择使用新渲染器
"terminal.integrated.rendererType": "experimentalWebgl"
速度改进归因于许多因素,但以下是重点
- WebGL 使我们能够更直接地与 GPU 交谈,而不是通过 Web 平台的
CanvasRenderingContext2D
API。 - 渲染器几乎完全处理数字和类型化数组,它们非常快。对象和数组的创建也被降至最低,以避免不必要的垃圾回收。
- 所有字符现在都缓存在纹理图集中,而不是像以前那样只缓存具有有限样式集的 ASCII 字符。这意味着重复绘制相同的字符要快得多。
我们观察到,使用画布渲染器时,帧渲染速度会根据用户的硬件/环境而大幅波动。每一帧通常需要 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 镜像光标
当您编辑 HTML 标签时,VS Code 现在会添加一个“镜像光标”。此行为由设置 html.mirrorCursorOnMatchingTag
控制,默认情况下已启用。
此功能通过在光标移动到 HTML 标签名称范围内时,向匹配的标签添加一个 多光标 来实现。就像在多光标模式下一样,您可以使用逐词删除或逐词选择。当您将光标移动到标签名称范围之外时,镜像光标将被移除。
一种特殊情况是在光标位于开始标签的末尾时输入 Space,例如,在 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 的一些新的工具功能。与往常一样,此版本还包含许多重要的错误修复。
您可以在 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 获取有关文件的信息。但有一个错误!.isDirectory
实际上是一个函数,而不是一个属性!这意味着 handleDirectory
将在每个文件上调用,而不仅仅是在目录上调用,因为函数 isDirectory
已定义并评估为 true
。
请注意,只有在启用严格空检查时,您才会看到此诊断信息。
调试
调试 START 视图
我们引入了一个新的调试 START 视图,以便用户更轻松地在新的工作区中启动和配置调试。根据活动文件,我们将选择合适的调试扩展,并使您能够调试或运行应用程序。对于更复杂的调试和运行配置,仍然建议配置 launch.json
文件。
下面您可以看到快速开始调试 Express JavaScript 应用程序,然后在需要更多控制时创建 launch.json
文件。
在 CALL STACK 视图中将重启帧作为内联操作
为了提高 重启帧 操作的可发现性,现在在 CALL STACK 视图中有一个悬停时可见的内联操作。重启帧是一种在遇到断点后重新运行前面源代码的便捷方法。如果调试扩展不支持重启帧,则不会显示此操作。
调试控制台显示输入和输出
为了更好地区分调试控制台中的输入和输出,我们在左侧添加了输入 >
和输出 <
装饰。
内联断点显示
一个新的设置 debug.showInlineBreakpointCandidates
控制在调试时是否在编辑器中显示内联断点候选装饰。默认情况下,它们是可见的。
预览功能
预览功能尚未准备好发布,但功能已经足够强大,可以投入使用。欢迎您在它们开发过程中提供早期反馈。
搜索编辑器
在本里程碑中,我们开始在专用编辑器中显示搜索结果。这为查看搜索结果提供了更多空间,并允许您同时维护多个搜索结果集合。
在此版本中,您可以在搜索编辑器中执行以下操作
- 使用 转到定义 系列命令(包括 预览定义 和 将定义打开到侧面)导航到结果。
- 重新运行搜索以更新结果列表。
- 查看围绕结果的源代码行。
- 将结果持久化到磁盘,以便稍后引用,甚至可以在源代码控制中跟踪。
我们将继续在后续版本中添加功能并提高可用性。
主题:淡紫色,字体:Hasklig
注意:您可以通过将 search.enableSearchEditorPreview
设置为 true
来预览此功能。
调用层次结构视图
调用层次结构 API 在稳定版中可用,语言扩展作者正在积极地实现它,因此我们添加了调用层次结构视图。它补充了 预览调用层次结构 视图,并与 查找所有引用 和 查找所有实现 共享相同的侧边栏视图。一旦语言扩展支持调用层次结构 API,您就可以从上下文菜单或命令面板中选择 显示调用层次结构 来查看视图。
主题:GitHub Sharp,字体:FiraCode
调用层次结构视图允许您深入了解符号的调用者和调用。它会突出显示活动编辑器中的调用,允许从任何子项重新定位视图,并保留先前运行的历史记录。
JavaScript 调试器
我们正在为 Node.js 和 Chrome 开发一个新的调试器。您可以安装 nightly 扩展 js-debug-nightly
,并通过更新设置添加以下内容来将其用作直接替换。
{
"debug.chrome.useV3": true,
"debug.node.useV3": true
}
您无需更改现有的启动配置即可使用新的调试器。
调试器带来了一系列新功能,例如调试和单步执行 WebWorker 的功能
主题:大地之歌,字体:Fira Code
...无需额外配置或标志即可调试 npm 脚本...
...等等!如果您遇到问题,请 提交问题。
对扩展的贡献
远程开发
对 远程开发扩展 的工作仍在继续,这些扩展允许您使用容器、远程机器或 Windows 子系统 Linux (WSL) 作为功能齐全的开发环境。
1.41 中的特性亮点包括
- 开发容器:更轻松地在容器中试用示例存储库(例如 vscode-remote-try-python)。
- 开发容器:创建容器时的性能得到提升,并为
devcontainer.json
提供了新的选项。 - WSL:支持 Windows 10 基于 ARM 的 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 变量、mixin 和函数提供跨文件语言支持。在本里程碑中,我们帮助其开发了一个新的版本 0.8.0。
新版本改进
- 更好的导入路径解析
- 自动完成的颜色变量的颜色预览
- 性能提升
扩展编写
Figma 设计工具包
我们创建了一个 Figma 设计工具包,以更好地帮助扩展作者为其扩展设计体验。查看 GitHub 上的工具包存储库,其中包含有关如何访问和使用工具包的说明。
下面是包含的一些组件的示例
所有组件都应该是可调整大小和可编辑的。
如果您遇到任何问题或对某些组件有任何要求,请在工具包存储库中创建一个问题,以便我们对请求进行分类和跟踪。
调试图标颜色标记
我们添加了一组用于调试视图的新颜色标记。
调试工具栏
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
类型现在具有用于选择元素的构建器方法。
严格的 getWordRangeAtPosition
TextDocument.getWordRangeAtPosition
API 现在更加严格,它会抛出错误,而不是忽略导致空字符串匹配的无效正则表达式。
扩展种类弃用字符串类型
扩展作者可以在 package.json
中使用 extensionKind
属性来指示扩展应该在远程情况下运行的位置。在发布版(1.40)中,此值可以是字符串或数组。从该版本开始,此属性仅支持数组值,使用字符串已弃用。有关更多信息,请参阅 远程开发文档。
将 DAP 源转换为 URI
VS Code 扩展 API 在引用可以在编辑器中打开的资源时使用文档 URI,而 调试适配器协议 基于 源 描述符。在本里程碑中,我们添加了一个 API 来连接这两个世界。函数 debug.asDebugSourceUri
从 DAP 源对象创建 URI。这使得将 DAP 源打开到 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 鼓励扩展使用 代码操作 来实现重构功能。然而,用户可能难以发现扩展支持哪些重构,以及难以理解为什么某个重构对于特定选择不可用。CodeAction.disabled
API 提案旨在帮助扩展提高其重构的发现能力。
在 CodeAction
上提出的 .disabled
属性是一个人类可读的字符串,描述了为什么某个代码操作不可行。以下是在我们的 代码操作示例扩展 中使用 .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;
}
...
}
如果用户尝试通过 键绑定 应用一个禁用的代码操作,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。此设置仍然旨在用于测试浏览器中的问题,而不是用于开发。
在本里程碑中,我们添加了可以测试的更多功能。
- 调试
- 搜索
- 任务
- 问题
以下视频展示了新功能的实际应用。
注意: 不要将此设置用于任何严肃的开发。目的是允许社区将更改贡献回 VS Code,以改善浏览器中的整体体验。
工程
Insiders 可在 yum 存储库中使用
Insiders 版本现在可以在 yum 存储库中使用,并且会像 apt 存储库一样自动发布。请按照 网站上的说明 设置存储库,并使用 sudo dnf install code-insiders
安装。
Monaco 编辑器的持续构建
在本次迭代中,我们为 Monaco 编辑器添加了 持续构建和测试管道。我们从 VS Code 存储库主分支构建 Monaco 编辑器核心,并执行健全性测试,尽早发现潜在的错误或意外的重大更改。
重大修复
- 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 钩子添加过滤器(开发质量改进) PR #85159
- Jakub Chodorowicz (@chodorowicz):改进 Monokai 主题以用于 markdown 文件 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):在 JSON 验证模式映射中添加
babel.config.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+右键跳转到单词开头 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): 修复列出的错误的客户端功能接口,用于文档符号 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 名 云 + AI 本地化 社区成员使用 Microsoft 本地化社区平台 (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。
- 简体中文: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。
- 繁体中文:Winnie Lin、船長、Alan Tsai、TingWen Su。
- 印度尼西亚语:Eriawan Kusumawardhono、Arif Fahmi、Laurensius Dede Suhardiman、Christian Elbrianno。
- 意大利语:Alessandro Alpi、Luigi Bruno。
- 日语: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。