现已发布!阅读 10 月份的新功能和修复。

2022 年 6 月(版本 1.69)

更新 1.69.1:此更新解决了这些 问题

更新 1.69.2:此更新解决了这些 问题

下载:Windows:x64 Arm64 | Mac:通用 英特尔 | Linux:deb rpm tarball Arm snap


欢迎使用 Visual Studio Code 2022 年 6 月版。此版本中有很多更新,我们希望您会喜欢,其中一些关键亮点包括

如果您想在线阅读这些发行说明,请访问 更新,位于 code.visualstudio.com 上。

观看发布派对:收听 VS Code 团队讨论一些新功能。您可以在我们的 YouTube 频道上找到 活动记录

内部人士:想尽快尝试新功能吗?您可以下载夜间版 内部人士 构建,并在新功能可用时尝试最新的更新。

工作区

三方合并编辑器

在此版本中,我们继续在三方合并编辑器上进行工作。此功能可以通过将 git.mergeEditor 设置为 true 来启用,并将默认情况下在将来的版本中启用。

合并编辑器允许您快速解决 Git 合并冲突。启用后,可以通过单击源代码管理视图中的冲突文件来打开合并编辑器。可以使用复选框来接受和合并 他们的你的 中的更改。

所有语言功能都在合并编辑器中可用(包括诊断、断点和测试),因此您可以立即获得有关合并结果中任何问题的反馈。

结果也可以直接编辑。注意复选框如何按预期更新。

关闭合并编辑器或接受合并时,如果未解决所有冲突,则会显示警告。

合并编辑器支持词级合并 - 只要更改不重叠,就可以应用两边。如果插入顺序很重要,则可以交换它。在任何时候,也可以手动解决冲突。

我们很乐意听到您的反馈!要与我们分享合并冲突,请使用命令 合并编辑器(开发):从 JSON 复制输入、基本内容和结果的内容并将内容粘贴到您的 GitHub 问题中。

命令中心

命令中心已完成,现在可以尝试了。通过 window.commandCenter 设置启用它。

命令中心替换了正常的标题栏,并允许您快速搜索项目中的文件。单击主部分以显示包含最近文件和搜索框的快速打开下拉菜单。

The Command Center and its hover message atop the window

主题:GitHub 主题

命令中心还在右侧有一个按钮,用于通过“?”显示快速访问选项。左侧是 后退前进 按钮,用于浏览编辑器历史记录。

设置编辑器修改指示器

设置编辑器现在显示何时设置具有语言覆盖。就上下文而言,语言覆盖始终优先于非语言特定覆盖,因此,如果设置的值似乎不会影响特定文件类型的设置行为,则可能是该设置具有语言覆盖。

指示器文本已更改为更清晰简洁。下面的短视频显示了新的 在其他地方修改 指示器。将鼠标悬停在指示器上会显示一个悬停,显示语言覆盖(如果适用)。视频随后显示了新的默认覆盖指示器,文本为 默认值已更改

主题:浅粉色

勿扰模式

启用后,新的勿扰模式会隐藏所有非错误通知弹出窗口。进度通知将自动显示在状态栏中。隐藏的通知仍然可以在通知中心中查看。

Do Not Disturb mode shown in the Status bar and Notification center

您可以通过打开通知中心(选择状态栏右侧的铃铛图标)并单击斜线铃铛图标来切换勿扰模式。状态栏中的斜线铃铛图标表示勿扰模式。

切换浅色和深色主题

一个新命令允许您在您喜欢的浅色和深色主题之间切换,即 首选项:在浅色/深色主题之间切换。在浅色主题中,该命令切换到深色主题,反之亦然。

在高对比度主题中,该命令保持高对比度并切换到相反颜色主题的首选高对比度主题。

首选主题由以下设置定义

  • workbench.preferredDarkColorTheme
  • workbench.preferredLightColorTheme
  • workbench.preferredHighContrastColorTheme
  • workbench.preferredHighContrastLightColorTheme

迷你地图上下文菜单

VS Code 迷你地图在编辑器侧面显示源代码文件的概览。您可以通过 视图:切换迷你地图 命令来切换迷你地图的可见性,或者使用 编辑器 > 迷你地图:启用 (editor.minimap.enabled) 设置完全禁用迷你地图。在此版本中,现在有一个上下文菜单可以轻松地显示或隐藏迷你地图。

Minimap context menu

您还可以使用 大小 (editor.minimap.size)、缩放比例 (editor.minimap.scale) 和 滑块 (editor.minimap.showSlider) 设置来调整外观。如果迷你地图隐藏,您仍然可以通过右键单击侧边沟来显示上下文菜单。

共享菜单

复制 vscode.dev 链接 命令可以从 文件 > 共享 子菜单中使用,以快速获取您打开的 GitHub 存储库的 vscode.dev 链接。共享 子菜单也可以从编辑器上下文菜单中使用。

终端

Shell 集成

自 1 月份发布以来一直处于预览状态的 PowerShell、bash 和 zsh 的 Shell 集成现已退出预览!我们计划在 1.70 版本中默认启用它。

要启用 shell 集成功能,请在设置编辑器中选中 终端 > 集成 > Shell 集成:启用,或在 settings.json 中设置值。

"terminal.integrated.shellIntegration.enabled": true

Shell 集成允许 VS Code 的终端更多地了解 shell 内部发生的事情,以便启用更多功能。Shell 集成的一个目标是使其能够 无需任何配置 地工作。这可以通过在启用设置时通过 shell 参数和/或环境变量将 shell 集成脚本自动“注入”到 shell 会话中来实现。在某些情况下,这不起作用,例如在子 shell 或某些复杂的 shell 设置中,但我们也为那些更高级的案例提供了手动安装路线。

下面是 shell 集成当前提供的功能的摘要

命令装饰和概览标尺

Shell 集成能够获取在终端内运行的命令的退出代码。使用此信息,会在行的左侧添加装饰,以指示命令是否成功或失败。这些装饰还会显示在滚动条中的概览标尺中,就像在编辑器中一样。

Blue circles appear next to successful commands, red circles with crosses appear next to failed commands. The color of the circles appears in the scroll bar

装饰可以支持上下文操作,例如重新运行命令

Clicking a successful command decoration shows a context menu containing items: Copy Output, Copy Output as HTML, Rerun Command and How does this work?

可以使用以下设置配置命令装饰

  • terminal.integrated.shellIntegration.decorationIcon
  • terminal.integrated.shellIntegration.decorationIconSuccess
  • terminal.integrated.shellIntegration.decorationIconError

命令导航

由 Shell 集成检测到的命令会馈送到命令导航功能(Ctrl/Cmd+UpCtrl/Cmd+Down),使其拥有更可靠的命令位置。此功能允许在命令之间快速导航并选择其输出。

运行最近的命令

终端:运行最近的命令命令会从各种来源中快速选择历史记录,提供类似于 shell 的反向搜索(Ctrl+R)的功能。最近的命令来自当前会话的历史记录、此 shell 类型之前的会话历史记录以及公共 shell 历史记录文件。

The "run recent command" command shows a Quick Pick with commands ran previously that can be filtered similar to the Go to File command

该命令的其他功能

  • 在当前会话部分,快速选择框的右侧有一个剪贴板图标,单击该图标将在编辑器中打开命令输出。
  • 按住 Alt 键可在不运行命令的情况下将文本写入终端。
  • terminal.integrated.shellIntegration.history 设置决定了“先前会话”部分中存储的历史记录量。

目前默认情况下没有为 运行最近的命令分配键绑定,但例如,可以使用以下键绑定将其连接到 Ctrl+Space

{
    "key": "ctrl+space",
    "command": "workbench.action.terminal.runRecentCommand",
    "when": "terminalFocus"
},

转到最近的目录

与运行最近的命令功能类似,终端:转到最近的目录命令会跟踪访问过的目录,并允许快速筛选和导航 (cd) 到这些目录

<video src="/assets/updates/1_69/terminal-si-go-to-dir.mp4" autoplay loop controls muted title="转到最近的目录命令会显示一个快速选择框,其中包含之前导航到的目录,选择一个目录将运行 "cd path"">

按住 Alt 键可在不运行命令的情况下将文本写入终端。

当前工作目录检测

Shell 集成会告诉我们当前工作目录是什么。以前,如果不使用一些 hack 方法,就无法在 Windows 上确定此信息,并且需要在 macOS 和 Linux 上进行轮询,这对性能不利。

当前工作目录用于解析相对链接、显示最近运行的命令所在的目录,以及支持拆分当前工作目录 "terminal.integrated.splitCwd": "inherited" 功能。

不断增长的 shell 设置支持

在本版本中,我们改进了对 bash-preexec 的集成,增加了对 powerlevel10k 的基本支持,并检测了更多 shell 集成无法正常工作的情况,并优雅地禁用了该功能。预计随着时间的推移,我们将在这方面不断改进。

SetMark 序列支持

终端现在支持由 iTerm2 最初创建的序列 'OSC 1337 ; SetMark ST',这使得可以在行的左侧以及滚动条中添加标记。

When the sequence is written to the terminal, a small grey circle will appear to the left of the command, with a matching annotation in the scroll bar

主题:Sapphire Theme

以下是一些在脚本中触发此功能的示例。

  • bash:echo -e 'Mark this line\x1b]1337;SetMark\x07'
  • pwsh:Write-Host "Mark this line`e]1337;SetMark`a"

简单 Powerline 字符的自定义渲染

现在,四个常见的尖括号 Powerline 符号在终端启用 GPU 加速时,会与 框绘制和块字符 相似地进行自定义渲染,这带来了一些好处。

  • 永远不会使用次像素抗锯齿,这可能会导致两侧出现难看的红色或蓝色轮廓,从而破坏“powerline”。
  • 这些字符无需安装修补后的字体即可工作。
  • 行高会影响这些字符。

之前

Line height would not be respected, leading to a Powerline symbol with a different height to adjacent cells. Additionally, a blue outline could appear when sub-pixel anti-aliasing was used

之后

Line height is now respected and greyscale anti-aliasing is used for improved rendering

来自 VS Code 的消息的一致格式

以前,终端中直接由 VS Code(而不是进程)写入的消息使用多种不同的格式。现在,所有消息都使用一致的格式,包括响亮的格式和更微妙的格式。

Loud formatting starts the line with an asterisk with the inverted style, followed by a message using a blue background

Subtle formatting starts the line with an asterisk with the inverted style, followed by a message using the default background

辅助功能改进

在本迭代中,终端对辅助功能进行了多项改进。

  • 现在,终端:打开检测到的链接...命令默认情况下提供了更多链接,并且可以搜索终端缓冲区的其余部分。
  • 终端:运行最近的命令命令现在允许在按住 Alt 键的情况下输入生成的命令而不运行它。
  • 在终端中查找功能已改进了屏幕阅读器公告。
  • 在导航模式(Ctrl+Up)中可以使用上键和下键,而无需使用修饰键。
  • 现在,可以在导航模式(Ctrl+Up)中使用 Page Up 和 Page Down 键以页为单位滚动。

进程重新连接和恢复改进

终端持久性收到了一些用户体验和可靠性改进。

  • 以前,重新加载窗口 n 次会显示 n 个会话恢复消息。现在,会话恢复消息应该只在该特定会话收到输入时显示。
  • 以前包含日期的会话恢复消息已简化为简单的“历史记录已恢复”,以减少噪音。
  • 以前通知用户有关扩展想要更改环境(例如,为了支持自动 Git 身份验证)的“环境变量收集”功能现在可以在重新加载后工作。

任务

装饰

几年前,我们借助 Shell 集成功能,在终端缓冲区和概述标尺中添加了装饰,以改进终端导航。装饰现在还标记了任务的兴趣点,可以使用命令导航功能 (Ctrl/Cmd+UpCtrl/Cmd+Down) 跳转到这些点。

对于启动/停止任务,会在任务的开始处显示一个装饰,并且会根据运行的退出代码(如果有)对其进行样式设置。

A task fails and an error decoration is added. A task succeeds and a success decoration is added

对于监视任务,会在每次编译的第一个报告问题旁边显示一个装饰。

A watch task's first error is marked with a decoration

图标和颜色支持

现在,可以使用 Codicon id 和终端 ANSI color 属性为任务设置 icon。例如

{
  "label": "test",
  "type": "shell",
  "command": "echo test",
  "icon": { "id": "light-bulb", "color": "terminal.ansiBlue" }
}

The task custom icon appears in the terminal tabs list

kind 属性设置为 test 的任务默认情况下使用 beaker 图标。

源代码管理

用于 Git 存储库的“提交操作按钮”

1.61 版本 中,为 Git 存储库添加了 发布同步更改“操作按钮”。在本里程碑中,我们添加了一个 提交 按钮,它具有一个主要操作和一组次要操作。次要操作可以使用 git.postCommitCommand 设置进行控制,并允许您在提交后执行推送或同步操作。

添加了 提交“操作按钮”后,将添加一个新的设置 git.showActionButton,您可以使用它来控制在源代码管理视图中显示的 Git 操作按钮。您仍然可以使用一般的 scm.showActionButton 设置来全局禁用实现源代码管理提供程序的扩展贡献的任何操作按钮的可见性。

使用编辑器编写提交消息

在本里程碑中,您现在可以使用完整的文本编辑器编写提交消息,无论何时在提交输入框中未提供消息。要使用此新流程,请单击 提交 按钮,而不提供提交消息。

现在,您可以在编辑器中编写提交消息。要接受提交消息并完成提交操作,请关闭编辑器选项卡或选择编辑器工具栏中的 接受提交消息 按钮。要取消提交操作,您可以清除文本编辑器的内容并关闭编辑器选项卡,或者选择编辑器工具栏中的 放弃提交消息 按钮。

您可以禁用此新流程,并回退到使用快速输入控件的以前体验,方法是切换 git.useEditorAsCommitInput 设置。更改设置后,您需要重新启动 VS Code 才能使更改生效。

要在集成终端中执行的 git commit 命令中使用相同的流程,请启用 git.terminalGitEditor 设置。启用此设置后,您需要重新启动终端会话。

分支保护指示器

上一个里程碑 中添加了 git.branchProtection 设置,您可以使用它来配置要保护的特定分支。在本里程碑中,在状态栏和分支选择器中为受保护的分支添加了视觉指示器(锁定图标)。

状态栏

The branch protection icon is shown in the Status bar

分支选择器

The branch protection icon is shown in the branch picker

调试

改进的“单步进入目标”UI

一些调试器允许在源代码行暂停时直接单步进入特定的函数调用。在本迭代中,我们改进了此 UI。

  • 右键单击源代码行上的目标区域并选择 单步进入目标 将自动单步进入目标区域(如果有)。
  • 在命令面板中以及使用 ⌘F11 (Windows、Linux Ctrl+F11) 键盘快捷键可以使用新的命令 调试:单步进入目标

在调试控制台中导航

通过快速访问菜单访问控制台

现在,有一个快速访问菜单可以查看调试控制台列表。在菜单中,您可以选择一个控制台名称以将其显示在底部面板中。在这里,您可以搜索和筛选控制台名称。

主题:GitHub Dark Dimmed

有三种不同的方法可以访问此快速访问菜单。

  • 在快速打开菜单 (⌘P (Windows、Linux Ctrl+P)) 中键入 ?,然后选择查看调试控制台的选项。

  • 使用 调试:选择调试控制台命令。

  • 在快速打开菜单中手动键入 debug consoles (带尾随空格字符)。

通过“视图”菜单访问控制台

您也可以从现有的“视图”菜单中访问调试控制台列表。在快速打开菜单中键入 view (带尾随空格字符)并向下滚动到 调试控制台 面板标题。您将看到可用调试控制台的列表。

在控制台之间切换

现在您可以使用 ⇧⌘[ (Windows、Linux Ctrl+PageUp) 导航到上一个调试控制台,并使用 ⇧⌘] (Windows、Linux Ctrl+PageDown) 导航到下一个控制台。

加载的脚本搜索和过滤

以前,您只能在 **运行和调试** 菜单中的树形视图中查看加载的脚本。现在,您可以使用新的 **调试:打开加载的脚本...** 命令搜索和导航到脚本。它的工作原理与 **转到文件...** 命令相同,但您可以导航到加载的脚本。

JavaScript 调试

源映射切换

您现在可以通过单击调用堆栈视图标题中的 🧭 指南针图标轻松地打开和关闭源映射。当源映射关闭时,在源代码中设置的断点仍然有效,但会被移动到已编译代码中的等效位置,调试器将逐步执行已编译代码而不是源代码。

主题:Codesong

当源映射关闭时,调试工具栏中会显示一个类似的按钮,可以将其重新打开。切换状态在工作区中保留。

toString() 变量预览

如果变量或属性具有自定义的 toString() 方法,它将被调用以在 **变量** 视图和悬停中呈现预览。对于具有良好字符串表示的复杂类型,这比通用对象预览有所改进。

例如,VS Code 的 Range 具有一个 toString 方法,使其更容易一目了然。

Displaying the toString() method output in the Variables view

支持单步执行目标

JavaScript 调试器现在支持 **单步执行目标**,使您能够轻松地单步执行代码行上的函数调用。

Step Into Targets dropdown

可以通过 **调试:单步执行目标** 命令 (⌘F11 (Windows、Linux Ctrl+F11)) 或右键单击该行来访问它。

JavaScript 调试中未绑定断点的警告图标

如果您正在调试 TypeScript/JavaScript 项目并且在配置源映射或使断点绑定方面遇到问题,VS Code 现在将在断点视图中显示一条提示消息,其中包含指向 JavaScript 调试器断点故障排除工具的链接。您在将鼠标悬停在编辑器中的灰色断点图标上时也会看到提示。

hovering the breakpoint warning icon

当显示此提示的 API 最终确定后,其他调试器将能够使用其自己的适当消息显示此提示。

编辑器

使用预览重构

以前,无法查看重构将应用的更改。为了改善重构体验,现在有一个 **使用预览重构** 命令,可以从命令面板访问。**使用预览重构...** 的工作原理与 **重构...** 命令相同,但将打开一个重构预览面板。用户可以选择一个重构预览,以便在编辑器中打开重构预览的更大视图。此迭代主要侧重于预览来自重构的代码更改,未来的功能和自定义代码操作菜单控制将随之而来。

Refactor preview panel showing a refactoring that results in two changes

**使用预览重构...** 在工作台中打开一个窗格,并打开重构预览编辑器视图。

语言

Markdown 允许您使用尖括号来编写包含空格或其他特殊字符的链接目标。

[Some link](<path to file with spaces.md>)

在此迭代中,我们改进了对尖括号链接的支持,以便它们在编辑器中正确地突出显示和可点击。

Emmet 行内补全设置

Emmet 具有一个新的设置 emmet.useInlineCompletions,允许行内补全在文件中发生。目前,最好仅为编辑 HTML 和 CSS 文件启用此设置。

以下短视频是在 editor.quickSuggestions 设置对所有条目设置为 off 的情况下录制的。

语言指示器中的 JSON 通知

当折叠范围、文档符号或颜色修饰符太多而无法显示时,VS Code 不再使用通知,而是使用 JSON 语言指示器来通知用户。

JSON notifications from the Status bar JSON language indicator

HTML 最后换行格式化程序设置更改

设置 html.format.endWithNewline 已被 files.insertFinalNewline 取代。

files.insertFinalNewline 适用于所有编程语言。如果您希望每种语言有不同的设置,您可以使用语言范围。

{
  "[html]": {
    "files.insertFinalNewline": true
  }
}

笔记本

支持笔记本内扩展推荐

为了帮助改进笔记本的入门体验,当未安装所需的扩展时,我们更新了扩展推荐流程,并允许您直接从笔记本窗口安装扩展。这极大地减少了从未安装扩展到 VS Code 内可运行单元格所需的步骤数量。此迭代为 Python Jupyter 笔记本启用了此体验,更多笔记本类型和语言将在之后发布。

A Quick Pick depicting two entries. The top entry is selected that has a light bulb to its left and says 'Install suggested extensions Python + Jupyter'

评论

切换编辑器注释

新的命令 **注释:切换编辑器注释** 切换所有编辑器注释功能,包括注释范围槽线装饰、行悬停上的 "+" 以及所有编辑器注释小部件。在禅模式下,注释将自动禁用。

拖动以进行多行注释

可以拖动 “添加注释” "+" 按钮以添加多行注释。

企业

Windows 上的 UpdateMode 组策略

VS Code 现在支持 基于 Windows 注册表的组策略,这允许系统管理员在他们管理的机器上创建和部署策略。

第一个受支持的 VS Code 策略是 UpdateMode,它覆盖 update.mode 设置并控制 VS Code 是否在发布新版本时自动更新。

请参阅 企业 文档中的 Windows 上的组策略,了解更多信息。

Web 版 VS Code

主题测试器支持内置主题

主题测试器是 vscode.dev 中的一条路线,可用于展示和尝试颜色主题,而无需安装它。这对于市场上的主题扩展通过指定扩展 ID 和主题名称已经可用。例如,要查看 GitHub 主题扩展(扩展 ID github.github-vscode-theme)的“GitHub Dark Default”主题,您可以使用以下 URL 启动 vscode.dev:

https://vscode.dev/editor/theme/github.github-vscode-theme/GitHub%20Dark%20Default

Color theme tester with vscode.dev showing GitHub Theme extension GitHub Dark Default

主题测试器现在也可以与 VS Code 中的内置主题一起使用。将 vscode.theme-defaults 用于扩展 ID 占位符,然后是您要查看的主题名称。

例如,要测试“高对比度浅色”主题,您可以使用以下 URL:

https://vscode.dev/editor/theme/vscode.theme-defaults/Default%20High%20Contrast%20Light

对扩展的部分本地化支持

vscode.dev 中的上次迭代中,我们引入了对核心产品提供的字符串的本地化。在此迭代中,我们包含了更多字符串——特别是扩展在其扩展清单中提供的静态字符串。扩展提供的字符串中仍然有其他部分需要本地化(在其源代码中声明的字符串),因此我们将在下一次迭代中继续进行这项工作。

配置显示语言命令

对于某些用户,无法配置其浏览器使用的语言。为了解决这个问题,VS Code for the Web 现在提供了一个 **配置显示语言** 命令,允许您覆盖浏览器的默认语言。

此外,您可以使用 **清除显示语言首选项** 命令删除此覆盖。

VS Code Server(私有预览版)

在 VS Code 中,我们希望用户能够无缝地利用使他们最有效率的环境。 VS Code 远程开发扩展 允许您在适用于 Linux 的 Windows 子系统 (WSL) 中工作,通过 SSH 访问远程机器,以及直接从 VS Code 使用开发容器。这些扩展在远程环境中安装一个服务器,允许本地 VS Code 与远程源代码和运行时平滑地交互。

我们现在正在提供一个独立的 **“VS Code Server”** 的私有预览版,它是在与远程扩展使用的相同底层服务器的基础上构建的服务,还提供了一些额外的功能,例如交互式 CLI 和促进与 vscode.dev 的安全连接,而无需 SSH 连接。

The VS Code Server's help menu and a remote VS Code connection

我们的最终目标是增强 您今天使用的 code CLI,以便打开 VS Code 的桌面和 Web 实例,无论您的项目存储在哪里。虽然我们正在积极地朝着这个目标努力,但 VS Code Server 是一个重要的里程碑,我们迫不及待地将其作为私有预览版发布,以获得您的反馈。

您可以在其公告 博客文章视频 中了解有关如何开始使用 VS Code Server 的更多信息,并在其 文档 中查看更多详细信息。

对扩展的贡献

ESLint

ESLint 扩展的 2.2.6 版本现已发布。除了各种 错误修复 之外,现在还支持所有受支持 ESLint 语言的笔记本单元格中的 linting。

ESlint validating notebook cells

Jupyter

IPyWidgets

IPyWidgets 现在支持除 Python 之外的其他内核,例如 Common LispIHaskell

已解决了许多与资源(图像、脚本等)加载相关的 IPyWidget 问题,从而改进了对以下小部件的支持:VegaFusionipyleafletChemiscopemobilechelonianipyturtle

其他值得注意的 IPyWidget 修复包括在 Jupyter 输出小部件 中显示复杂和嵌套(包括交互式)输出。

Web 扩展

我们在支持 Jupyter 扩展的 Web 版本中的更多核心功能方面取得了进展。

本月,以下功能移植到 Web 扩展中

  • 导出交互式窗口
  • 调试交互式窗口
  • 交互式窗口中的可折叠单元格

如果您想尝试这些功能,请使用以下命令从本地机器启动 Jupyter:

jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net

然后,使用 vscode.dev 中的命令 **Jupyter:指定 Jupyter 服务器以进行连接** 连接到它。

有关更多信息(以及评论),请参阅此 讨论项

GitHub 拉取请求和问题

GitHub 拉取请求和问题 扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。此版本的亮点包括

  • 新增了一个设置 "githubPullRequests.ignoredPullRequestBranches",用于忽略拉取请求的分支。
  • 使用设置 "githubPullRequests.pushBranch",在创建拉取请求时可以跳过 **发布分支?** 对话框。
  • **概述** 编辑器中现在提供了一个自动合并复选框。

查看 扩展 0.46.0 版本的更新日志,以了解其他重点内容。

预览功能

TypeScript 4.8 支持

此更新包含对即将发布的 TypeScript 4.8 版本的支持。有关 TypeScript 团队目前正在进行的工作的更多详细信息,请参阅 TypeScript 4.8 迭代计划

要开始使用 TypeScript 4.8 nightly 构建版本,请安装 TypeScript Nightly 扩展。

我们继续完善 Markdown 文件中的链接验证。此实验性功能可以帮助捕获 Markdown 文件中指向图像或标题的断开链接。

除了修复了一些错误和提高性能之外,我们还重命名了一些设置,使它们的功能更加清晰。以下是新的设置名称

  • markdown.experimental.validate - 启用/禁用所有链接验证功能。
  • markdown.experimental.validate.fileLinks.enabled- 启用/禁用对指向本地文件的链接的验证:[link](/path/to/file.md)
  • markdown.experimental.validate.fileLinks.markdownFragmentLinks- 启用/禁用对指向本地文件的链接的片段部分的验证:[link](/path/to/file.md#some-header)
  • markdown.experimental.validate.fragmentLinks.enabled- 启用/禁用对当前文件中的标题的链接的验证:[link](#_some-header)
  • markdown.experimental.validate.referenceLinks.enabled- 启用/禁用对引用链接的验证:[link][ref]
  • markdown.experimental.validate.ignoreLinks - 跳过验证的链接列表。如果您链接到磁盘上不存在但 Markdown 发布后存在的文件,这很有用。

试一试,让我们知道您对新功能的看法!

设置配置文件

在过去的几个月里,我们一直在努力支持 VS Code 中的 **设置配置文件**,这是社区最受欢迎的要求之一。在此里程碑中,我们很高兴地宣布,此功能已准备好通过 workbench.experimental.settingsProfiles.enabled 设置在 Insiders 版本中进行预览。请尝试此功能并通过在我们 VS Code 存储库 中创建问题或在 问题 #116740 中发表评论来告诉我们您的反馈。

设置配置文件包含设置、键盘快捷键、扩展、状态、任务和代码片段。您可以针对不同的开发环境(如 Web、机器学习)或多个编程语言课堂(如 Python、Java)或个人模式(如工作或演示)定制 VS Code,并将它们保存为设置配置文件。您可以根据您正在处理的项目、您正在参加的课堂或您正在演示时,同时打开具有不同配置文件的多个工作区(文件夹)。

以下演示了如何为 Web 开发环境定制 VS Code 并从中创建设置配置文件。

下面显示了如何轻松地从开发配置文件切换到演示配置文件。

您可以像以下图片所示,同时在 Web 开发配置文件中打开您的 React 项目,在 Python 课堂配置文件中打开 Python 课堂项目。

Multiple opened Profiles

您可以使用设置中的以下颜色定制键来定制设置配置文件状态栏条目的前景和背景颜色。

"workbench.colorCustomizations": {
    "statusBarItem.settingsProfilesBackground": "#ce4918",
    "statusBarItem.settingsProfilesForeground": "#e0dfdb",
}

您可以使用设置齿轮菜单中的 **设置配置文件** 子菜单中提供的 **删除设置配置文件...** 操作来管理和删除设置配置文件。

Removing Settings Profiles

即使您可以为每个配置文件定制 VS Code,也有一些设置只能在应用程序级别进行定制。例如,所有应用程序范围的设置(如 update.mode、语言包扩展、设置同步启用和工作区信任状态)都在应用程序级别跨所有配置文件进行定制。

跨 Web 和桌面版 VS Code 访问编辑会话

在此里程碑中,我们宣布了 VS Code 中 **编辑会话** 的预览。编辑会话使您能够在使用 VS Code 的任何地方(无论是 Web 版 VS Code、桌面版 VS Code 还是不同的机器)继续处理存储库时,将未提交的更改带到一起。

例如,您可以使用编辑会话来传输和访问工作更改

  • github.dev 中的存储库到该存储库的本地桌面克隆。
  • 从 Windows 设备上存储库的克隆到 macOS 设备上存储库的克隆。

编辑会话目前在 workbench.experimental.editSessions.enabled 设置后面进行预览。在此初始版本中,您可以使用以下命令来存储和恢复工作更改

  • 编辑会话:存储当前编辑会话
  • 编辑会话:恢复最新编辑会话

要开始使用编辑会话,请使用 **编辑会话:存储当前编辑会话** 命令,并在出现提示时使用 GitHub 或 Microsoft 身份验证登录。然后在另一台机器或 VS Code 实例上的存储库中使用 **编辑会话:恢复最新编辑会话** 命令将所有已修改文件的活动内容恢复到工作区。您可以随时使用 **编辑会话:退出** 命令退出编辑会话。

随着我们继续迭代编辑会话体验,请试用它,并通过在 问题 #141293 中发表评论来与我们分享您的反馈。

扩展开发

可迭代的 vscode.d.ts 集合类型

为了便于使用 vscode.d.ts 中的集合类型,在此迭代中,我们使它们全部可迭代。这使您可以使用 for...of 循环和这些类型的展开

const data: vscode.DataTransfer = ...;
for (const [mime, item] of data) {
    const str = await item.asString();
    ...
}

新可迭代类型的完整集合是

  • DiagnosticCollection
  • DataTransfer
  • EnvironmentVariableCollection
  • TestItemCollection

可扩展的笔记本渲染器

笔记本渲染器 使扩展能够定制如何在笔记本中渲染单元格和输出。在此迭代中,我们扩展了笔记本渲染器 API,使渲染器能够增强另一个渲染器,包括 VS Code 中的一些内置渲染器。这使扩展能够在不重新实现完整渲染器的情况下,向笔记本渲染添加新功能。这也提供了一种更好的用户体验,因为用户无需在新的渲染器之间切换以查看正确渲染的内容。

笔记本扩展 Markdown 渲染器示例 演示了扩展如何使用表情符号支持扩展 VS Code 的内置 Markdown 渲染器。让我们快速浏览一下关键部分!

可扩展的笔记本渲染器的 API 是有意地松散定义的。要开始,我们的扩展需要贡献一个新的笔记本渲染器。因为我们正在扩展现有的渲染器,所以我们在此处使用 entrypoint 字段来指定要扩展的渲染器的 ID(在本例中,是 VS Code 的内置 vscode.markdown-it-renderer),以及要加载的渲染器脚本的路径

"notebookRenderer": [
    {
        "id": "sample.markdown-it.emoji-extension",
        "displayName": "Markdown it Emoji renderer",
        "entrypoint": {
            "extends": "vscode.markdown-it-renderer",
            "path": "./out/emoji.js"
        }
    }
]

现在,每当激活 vscode.markdown-it-renderer 时,此渲染器就会被激活。

现在要扩展 vscode.markdown-it-renderer,我们的渲染器可以调用基本渲染器上的方法。此方法特定于基本渲染器。在本例中,我们首先使用 getRenderer 获取基本渲染器,然后在它上面调用 extendMarkdownIt 来增强它用于渲染的 Markdown-It 实例

import type * as MarkdownIt from 'markdown-it';
import type { RendererContext } from 'vscode-notebook-renderer';

interface MarkdownItRenderer {
    extendMarkdownIt(fn: (md: MarkdownIt) => void): void;
}

export async function activate(ctx: RendererContext<void>) {
    // Acquire the base renderer
    const markdownItRenderer = await ctx.getRenderer('vscode.markdown-it-renderer') as MarkdownItRenderer | undefined;
    if (!markdownItRenderer) {
        throw new Error(`Could not load 'vscode.markdown-it-renderer'`);
    }

    // Load our Markdown-It extension
    const emoji = require('markdown-it-emoji');

    // Call the base renderer's extension method (extendMarkdownIt) to augment
    // the Markdown-It with emoji support.
    markdownItRenderer.extendMarkdownIt((md: MarkdownIt) => {
        return md.use(emoji, {});
    });
}

这里要注意的关键部分是 extendMarkdownIt 只是基本渲染器返回的方法。其他可扩展的渲染器可以轻松地返回自己的扩展点。

查看 笔记本扩展 Markdown 渲染器示例,以了解扩展 VS Code 的内置 Markdown-It 渲染器的完整示例。

从 DataTransfers 读取外部文件

扩展现在可以使用 DataTransfer 读取外部文件。这可以在树拖放 API 中使用,也可以在向编辑器中拖放的 API 建议中使用

export class TestViewDragAndDrop implements vscode.TreeDataProvider<Node>, vscode.TreeDragAndDropController<Node> {

    public async handleDrop(target: Node | undefined, sources: vscode.DataTransfer, token: vscode.CancellationToken): Promise<void> {
        // Get a list of all files
        const files: vscode.DataTransferFile[] = [];
        sources.forEach((item) => {
            const file = item.asFile();
            if (file) {
                files.push(file);
            }
        });

        const decoder = new TextDecoder();

        // Print out the names and first 100 characters of the file
        for (const file of files) {
            const data = await file.data();
            const text = decoder.decode(data);
            const fileContentsPreview = text.slice(0, 100);
            console.log(file.name + ' — ' + fileContentsPreview + '\n');
        }

        ...
    }
}

Webview 中的高对比度浅色

Webview 现在可以使用 vscode-high-contrast-light CSS 类来定位 高对比度浅色颜色主题

.vscode-high-contrast-light .error {
    color: red;
}

vscode-high-contrast-light 类会自动添加到 webview 的 body 元素中。

测试项目标签中的图标

现在可以在标准 $(icon) 格式的 Codicons 中使用 TestItem.label,以便在测试资源管理器视图以及测试结果中显示图标。

源代码管理输入框启用

扩展作者现在可以使用 enabled 属性切换源代码管理视图中输入框的启用。

JSON 词语模式更改

每种语言都带有一个词语模式,用于定义该语言中的哪些字符属于一个词。JSON 与所有其他语言不同,它包含字符串文字的引号和完整的字符串文字内容。它现在遵循其他语言,仅包含字母、数字和连字符。

更改将修复在扩展选择(命令:扩展选择)时出现的问题,允许在字符串中进行词语补全,并修复一些代码建议异常。

依赖于词语模式的扩展(例如,用于代码补全中的默认替换范围)需要更新它们的实现,以便为所有补全明确声明替换范围。

调试适配器协议

  • 为了提升**“Step Into Target”**功能的用户体验,我们向 DAP 的 `StepInTarget` 类型添加了额外的信息。借助四个属性:`line`、`column`、`endLine` 和 `endColumn`,现在可以将步进目标链接到相应的源代码范围。
  • 将程序参数传递给调试目标受两个相互矛盾的目标制约:一些用户希望能够将**所有字符**传递给调试目标,而另一些用户则希望使用**某些字符**与底层 shell 进行交互。为了更好地支持这两种用例,我们正在努力改进 DAP 的 `runInTerminal` 请求,以控制程序参数中特殊字符的转义。一个提案已经发布。如果您是调试扩展作者并对这个 DAP 新增功能感兴趣,我们非常感谢您的反馈。
  • 此外,我们还解决了一些关于调试适配器协议文档的问题。这些问题包括对“客户端”和“假值”术语的澄清、对校验和和日期字符串的更精确规范以及对 `Source.origin` 的措辞改进。

建议的 API

每个里程碑都伴随着新的 API 提案,扩展作者可以尝试使用它们。与往常一样,我们希望获得您的反馈。以下是尝试使用 API 提案的步骤:

  1. 找到您想尝试的提案,并将它的名称添加到 `package.json#enabledApiProposals` 中。
  2. 使用最新的 vscode-dts 并运行 `vscode-dts dev`。它会将相应的 `d.ts` 文件下载到您的工作区。
  3. 您现在可以针对提案进行编程了。

您不能发布使用 API 提案的扩展。在下一个版本中可能会有重大更改,我们不想破坏现有的扩展。

粘贴编辑提供程序

我们已经更新了 `documentPaste` API 提案,以便更容易正确实现,特别是在处理多个光标时。

提醒一下,这个 API 允许扩展程序挂钩到文本编辑器中的复制和粘贴操作。扩展程序可以使用它来修改粘贴时插入的文本。 文档粘贴扩展示例 演示了更新后的 API 的实际应用。

/**
 * Provider that maintains a count of the number of times it has copied text.
 */
class CopyCountPasteEditProvider implements vscode.DocumentPasteEditProvider {
  private readonly countMimeTypes = 'application/vnd.code.copydemo-copy-count';

  private count = 0;

  prepareDocumentPaste?(
    _document: vscode.TextDocument,
    _ranges: readonly vscode.Range[],
    dataTransfer: vscode.DataTransfer,
    _token: vscode.CancellationToken
  ): void | Thenable<void> {
    dataTransfer.set(this.countMimeTypes, new vscode.DataTransferItem(this.count++));
    dataTransfer.set('text/plain', new vscode.DataTransferItem(this.count++));
  }

  async provideDocumentPasteEdits(
    _document: vscode.TextDocument,
    _ranges: readonly vscode.Range[],
    dataTransfer: vscode.DataTransfer,
    _token: vscode.CancellationToken
  ): Promise<vscode.DocumentPasteEdit | undefined> {
    const countDataTransferItem = dataTransfer.get(this.countMimeTypes);
    if (!countDataTransferItem) {
      return undefined;
    }

    const textDataTransferItem = dataTransfer.get('text') ?? dataTransfer.get('text/plain');
    if (!textDataTransferItem) {
      return undefined;
    }

    const count = await countDataTransferItem.asString();
    const text = await textDataTransferItem.asString();

    // Build a snippet to insert
    const snippet = new vscode.SnippetString();
    snippet.appendText(`(copy #${count}) ${text}`);

    return { insertText: snippet };
  }
}

export function activate(context: vscode.ExtensionContext) {
  // Enable our provider in plaintext files
  const selector: vscode.DocumentSelector = { language: 'plaintext' };

  // Register our provider
  context.subscriptions.push(
    vscode.languages.registerDocumentPasteEditProvider(
      selector,
      new CopyCountPasteEditProvider(),
      {
        pasteMimeTypes: ['text/plain']
      }
    )
  );
}

Web 上的 WebUSB、WebSerial 和 WebHID 访问

现在可以使用来自web 扩展WebUSBWeb 串行端口WebHID,但目前仍处于实验阶段。

要访问这些 API,您的扩展首先需要通过运行以下命令之一来请求对所需设备的访问权限:

  • workbench.experimental.requestUsbDevice
  • workbench.experimental.requestSerialPort
  • workbench.experimental.requestHidDevice

这些命令将提示用户选择一个设备。每个命令都接受一个设备过滤器列表 作为其参数。例如:

import * as vscode from 'vscode';

await vscode.commands.executeCommand('workbench.experimental.requestUsbDevice', {
  filters: [
    { vendorId: 0x404 } // Your custom filter or empty if you want users to select any device
  ]
});

命令完成之后,您的扩展可以使用正常的 web API 来访问用户已授予访问权限的任何设备。

const devices = await navigator.usb.getDevices();
// Do something with devices

所有正常的 web 设备 API 都应该可以正常工作,除了那些需要向用户显示 UI 元素的 API(例如requestDevice)。

目前,此功能仅适用于 web,并且支持仅限于 Chrome 和 Edge 浏览器。还要记住,此功能仍处于实验阶段,因此我们可能会对其设计进行迭代。请尝试一下,并分享您的反馈!

工程

Electron 18 更新

在本里程碑中,我们完成了将 Electron 18 打包到 VS Code 桌面版的探索,并感谢所有参与 Insiders 自托管的人员。此更新包含 Chromium `100.0.4896.160` 和 Node.js `16.13.2`。

文档

TypeScript 编辑和重构

有两个新主题重点介绍了 VS Code 中的 TypeScript 编辑重构。在那里您将了解到特定功能,例如针对 TypeScript 的 内联提示CodeLens格式化 选项,以及可用的代码 重构

值得注意的修复

  • 109565 使用 Caps Lock 键切换输入源时,终端始终显示大写字母
  • 146491 活动和非活动菜单之间的颜色差异丢失
  • 149538 无法在中国登录 Microsoft 或 GitHub 帐户
  • 149890 无法将项目拖放到空树视图中
  • 150934 RPM 不应该将捆绑库列为“provides”
  • 151158 保存笔记本时保留无标题笔记本中的选定内核
  • 151664 提高使用屏幕阅读器单步执行代码时的公告效率
  • 151739 第一次回复评论主题时,workbench.action.submitComment 不起作用,编辑评论时令人困惑
  • 152067 仅在展开评论时显示评论主题范围
  • 152141 进程退出时丢弃任务状态
  • 152642 添加了一个按钮,只需单击一下即可删除监视表达式

谢谢

最后但并非最不重要的是,衷心感谢 VS Code 的贡献者们。

web 扩展

启用作为web 扩展 运行代码的扩展的扩展作者(以下列表介于 2022 年 6 月 7 日至 7 月 4 日之间)

问题跟踪

对我们问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-generator-code 的贡献

vscode-js-debug 的贡献

vscode-pull-request-github 的贡献

debug-adapter-protocol 的贡献

devcontainers/cli 的贡献