2022年6月(版本 1.69)

更新 1.69.1:本次更新解决了这些 问题

更新 1.69.2:本次更新解决了这些 问题

下载:Windows:x64 Arm64 | Mac:Universal Intel silicon | Linux:deb rpm tarball Arm snap


欢迎使用 Visual Studio Code 2022 年 6 月版。此版本中包含许多我们希望您会喜欢的更新,其中一些主要亮点包括:

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

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

内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。

工作台

三向合并编辑器

在此版本中,我们继续致力于三向合并编辑器。可以通过将 git.mergeEditor 设置为 true 来启用此功能,未来版本将默认启用。

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

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

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

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

合并编辑器支持单词级合并——只要更改不交叉,就可以应用双方的更改。如果插入顺序很重要,可以交换它们。任何时候,冲突也可以手动解决。

我们很乐意听到您的反馈!要与我们分享合并冲突,请使用命令 Merge Editor (Dev): Copy Contents of Inputs, Base and Result from JSON 并将内容粘贴到您的 GitHub issue 中。

命令中心

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

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

The Command Center and its hover message atop the window

主题:GitHub 主题

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

设置编辑器修改指示器

设置编辑器现在可以显示某个设置是否具有语言覆盖。背景信息是,语言覆盖始终优先于非特定于语言的覆盖,因此如果某个设置的值似乎没有影响特定类型文件的行为,则可能是因为该设置具有语言覆盖。

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

主题:Light Pink

请勿打扰模式

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

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+Up, Ctrl/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 集成告知我们当前工作目录是什么。此信息以前在 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 字形的自定义渲染

当在终端中启用 GPU 加速时,四个常见的角括号 Powerline 符号现在像 方框绘图和块字符 一样进行自定义渲染。这带来了几个好处:

  • 永远不会使用可能导致两侧出现难看的红色或蓝色轮廓并破坏“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) 中使用向上翻页和向下翻页键进行分页滚动。

进程重新连接和恢复改进

终端持久性在 UX 和可靠性方面得到了改进。

  • 以前,重新加载窗口 n 次会显示 n 条会话恢复消息。现在,会话恢复消息仅在特定会话有输入时才会显示。
  • 之前包含日期的会话恢复消息已缩减为仅“历史记录已恢复”,以减少噪音。
  • 通知用户扩展程序希望更改环境(例如,支持自动 Git 身份验证)的“环境变量收集”功能现在可以跨重新加载工作。

任务

装饰

几个迭代前,由于 Shell 集成功能,我们在终端缓冲区和概览标尺中添加了装饰,以改进终端导航。装饰现在还标记了任务的兴趣点,可以使用命令导航功能 (Ctrl/Cmd+Up, Ctrl/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
  }
}

Notebook

支持笔记本扩展推荐

为了帮助改进笔记本的入门体验,当未安装必需的扩展时,我们更新了扩展推荐流程,让您可以直接从笔记本窗口安装扩展。这极大地减少了从没有安装扩展到在 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'

评论

切换编辑器注释

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

拖动以添加多行注释

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

企业

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 占位符,然后使用您想要查看的主题名称。

例如,要测试“High Contrast Light”主题,您可以使用以下 URL:

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

扩展程序的局部化支持

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

配置显示语言命令

对于某些用户,配置浏览器使用的语言是不可能的。为了解决这个问题,Web 版 VS Code 现在有了 配置显示语言 命令,允许您覆盖浏览器设置的默认语言。

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

VS Code Server(私有预览)

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

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

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

我们的最终目标是增强您今天使用的 code CLI,以打开桌面和 Web 实例的 VS Code,无论您的项目存储在哪里。虽然我们正在积极朝这个方向努力,但 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 Output 小部件 中显示复杂和嵌套(包括交互式)输出。

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" 创建 PR 时,可以跳过 发布分支? 对话框。
  • 现在在 概述 编辑器中提供了一个自动合并复选框。

查看该扩展的 0.46.0 版本更新日志 以查看其他亮点。

预览功能

TypeScript 4.8 支持

此更新包括对即将推出的 TypeScript 4.8 版本的支持。查看 TypeScript 4.8 迭代计划 以了解有关 TypeScript 团队目前正在做的工作的更多详细信息。

要开始使用 TypeScript 4.8 每日构建,请安装 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 中支持 设置配置文件,这是社区最受欢迎的要求之一。在此里程碑中,我们很高兴地宣布,此功能已准备好在 Insiders 版本中通过 workbench.experimental.settingsProfiles.enabled 设置进行预览。请试用此功能,并通过在我们的 VS Code 存储库 中创建 issue 或在 issue #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 设置下处于预览阶段。在此初始版本中,您可以使用以下命令来存储和恢复您正在进行的更改:

  • Edit Sessions: Store Current Edit Session
  • Edit Sessions: Resume Latest Edit Session

要开始使用编辑会话,请使用 Edit Sessions: Store Current Edit Session 命令,并在提示时使用 GitHub 或 Microsoft 身份验证登录。然后在另一台机器或 VS Code 实例的存储库中使用 Edit Sessions: Resume Latest Edit Session 命令,将所有已修改文件的正在进行内容恢复到您的工作区。您可以随时使用 Edit Sessions: Sign Out 命令注销编辑会话。

随着我们继续迭代编辑会话体验,请试用它并通过 issue #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,以及 drop into editor 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) 格式的 Codicon 现在可以用于 TestItem.label,以在“测试资源管理器”视图以及测试结果中显示图标。

源代码管理输入框启用

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

JSON 单词模式更改

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

此更改将修复扩展选择(命令:扩展选择)时的问题,允许字符串内的单词补全,并修复一些代码建议异常。

依赖于单词模式的扩展(例如代码补全中的默认替换范围)需要更新其实现,以显式声明所有补全的替换范围。

调试适配器协议

  • 为了为 单步进入目标 功能提供更好的用户体验,向 DAP 的 StepInTarget 类型添加了额外信息。通过四个属性 linecolumnendLineendColumn,单步进入目标现在可以链接到相应的源范围。
  • 将程序参数传递给被调试程序受到两个冲突目标的阻碍:一些用户希望能够将 所有字符 传递给被调试程序,而其他用户希望使用 某些字符 与底层 shell 对话。为了更好地支持这两种用例,我们正在研究 DAP 的 runInTerminal 请求,以控制程序参数中特殊字符的转义。提案已经 可用。如果您是对此 DAP 添加感兴趣的调试扩展作者,我们将不胜感激您的反馈。
  • 此外,我们解决了 调试适配器协议 的几个文档问题。这些包括围绕术语“客户端”和“falsey”的澄清、更精确的校验和和日期字符串规范,以及 Source.origin 的改进措辞。

提议的 API

每个里程碑都会带来新的提议 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 SerialWebHID 的实验性支持。

要访问这些 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 都应该可以工作,除了那些如 requestDevice 需要向用户显示 UI 元素的工作外。

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

工程

Electron 18 更新

在此里程碑中,我们完成了将 Electron 18 捆绑到 VS Code 桌面版的探索,我们要感谢所有参与在 Insiders 上进行自托管的人。此更新随附 Chromium 100.0.4896.160 和 Node.js 16.13.2

文档

TypeScript 编辑和重构

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

值得注意的修复

  • 109565 使用大写锁定切换输入源时,终端总是显示大写字母。
  • 146491 丢失活动菜单和非活动菜单之间的颜色差异。
  • 149538 在中国无法登录 Microsoft 或 GitHub 帐户。
  • 149890 无法将项目拖放到空的树视图中。
  • 150934 RPM 不应将捆绑库列为“提供”。
  • 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 的贡献

© . This site is unofficial and not affiliated with Microsoft.