在 VS Code 中试试

2022 年 8 月 (版本 1.71)

更新 1.71.1:本次更新解决了这个安全问题

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

下载:Windows: x64 Arm64 | Mac: 通用 Intel Apple 芯片 | Linux: deb rpm tarball Arm snap


欢迎来到 2022 年 8 月的 Visual Studio Code 发布。8 月是许多 VS Code 工程师休假的时间,但此版本中仍有许多更新,希望您会喜欢。

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

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

工作台

合并编辑器改进

从有冲突的文件中打开合并编辑器

现在,有冲突的文件将自动显示一个在合并编辑器中打开按钮,用于在文本和合并编辑器之间切换。

合并编辑器文件打开时未修改

VS Code 在合并编辑器中打开文件时不再修改结果文件(冲突区域被基础版本替换)。相反,冲突标记保留在文件中,但在结果视图中隐藏。可以使用复选框将冲突标记替换为其中一方,或双方的组合,或通过取消选中它们,替换为基础版本。

恢复旧的冲突装饰器

旧的内联冲突装饰器不再禁用,因此可以同时使用合并编辑器和内联体验。当合并编辑器打开时,您可以通过在编辑器工具栏中单击一下来获得之前的体验。

通过单击源代码管理视图中文件名旁边的相同图标,您可以完全跳过合并编辑器。

但是,您可以随时在新旧体验之间切换,甚至并行使用它们。

复选框改进

我们现在确保冲突的复选框始终可见,即使冲突大于视口。颜色用于强调未处理冲突的复选框。

差异算法改进

我们开始探索替代的差异算法,以提高冲突的质量。可以通过以下设置启用新的实验性差异算法:

"mergeEditor.diffAlgorithm": "experimental",

这种新算法尚未针对性能进行优化,但改进了许多边缘情况下的合并编辑器体验。

展望未来

在此版本中,我们专注于合并编辑器最重要的用户体验问题,并修复了许多错误。如果您仍然对新的合并编辑器感到困惑,我们很乐意听取您的意见!请在我们的存储库中创建新问题,分享屏幕截图和您的合并编辑器状态(使用复制合并编辑器状态为 JSON命令)。我们非常感谢到目前为止收到的所有反馈,更多的反馈将帮助我们为每个人提供出色的合并编辑器体验。

我们未来的工作将重点放在单独的基础视图冲突最小化、差异算法优化和其他改进

FFmpeg 编解码器支持

VS Code 作为一部分发布的 FFmpeg 共享库以前只支持 FLAC 编解码器。在此版本中,该库已更新以支持以下编解码器和容器列表。这将允许更多音频和视频文件从笔记本或通过将音频和视频嵌入到 Web 视图的扩展播放。

  • Vorbis
  • Flac
  • H.264
  • VP8
  • WAV
  • MP3
  • Ogg

主题: fairyfloss (在 vscode.dev 上预览)

资源管理器重命名选择改进

在文件上启动重命名操作后,按下 F2 键将在文件名、整个选择和文件扩展名之间循环,以便实现更灵活的仅键盘交互。

圆角按钮

我们已将所有按钮更新为略带圆角,以更好地符合我们的设计美学。

An example of a button with rounded corners

主题: Material Theme Palenight 高对比度

Windows 上的窗口控件覆盖

在 1.68 版本中,VS Code 采用了 Electron 的 窗口控件覆盖 功能支持,但默认情况下是关闭的,并且处于实验性标志之后。我们已经解决了影响 VS Code 的此功能的其余问题,允许我们为所有 Windows 用户默认启用它。

窗口控件覆盖功能允许 Windows 11 上的 VS Code 用户选择贴靠布局,将 VS Code 放置在桌面上。

Windows Snap Layouts control in the right of the VS Code title bar

树视图展开模式

设置 工作台 > 树:展开模式 (workbench.tree.expandMode),它控制树节点是单次点击展开还是双次点击展开,现在将受扩展贡献的树视图尊重。

编辑器

粘滞滚动

粘滞滚动显示视口顶部的当前范围。该功能不再是实验性的,可以通过设置 editor.stickyScroll.enabled 启用。进一步的改进是:

  • 可以使用编辑器 > 粘滞滚动:最大行数 (editor.stickyScroll.maxLineCount) 设置来设置要显示的最大行数。默认最大值为 5 行。
  • 您可以在粘滞滚动中使用 Ctrl/Cmd + 单击,导航到定义。

新代码操作控件

我们彻底改进了代码操作控件。它不再是简单的代码操作菜单,现在是一个自定义控件,让您更容易找到所需的代码操作。

The new Code Action control showing Quick Fixes and refactorings

新控件还允许 VS Code 显示额外的信息。例如,您现在可以将鼠标悬停在禁用的代码操作上,以了解它们被禁用的原因。

Hovering over a disabled Code Action to understand why it is disabled

您还可以通过修改以下命令的键盘快捷方式来自定义用于导航代码操作列表的快捷键:

  • selectNextCodeAction
  • selectPrevCodeAction
  • acceptSelectedCodeAction

展望未来,新的代码操作 UI 为进一步的用户体验改进奠定了坚实的基础。如果您有任何建议,请务必告诉我们!

配置建议匹配

有一个新设置可以配置 IntelliSense 筛选。默认情况下,第一个字符必须匹配单词开头,例如 c 必须匹配 consoleWebContext 但不匹配 descriptioneditor.suggest.matchOnWordStartOnly 设置更改了此行为。禁用时,筛选会考虑任何匹配项 - 这会导致更多结果,但筛选仍通过匹配质量进行。

在下面的短视频中,您可以看到当 matchOnWordStartOnly 被禁用时,对“dir”的建议包含更多项目,例如“mkdir”和“makedirs”。

源代码管理

提交操作按钮改进

用户可以使用 git.postCommitCommand 设置全局控制成功提交操作后执行的次要操作(例如,pullsync)。在这个里程碑中,我们添加了一个新设置 git.rememberPostCommitCommand,可以启用此设置以记住每个存储库上次执行的次要操作。

终端

Shell 集成改进

此版本对 shell 集成进行了以下改进:

  • Fish shell 集成目前仅作为实验性手动安装提供。有关如何安装它,请参阅Shell 集成文档
  • Windows 版 Git bash shell 集成目前仅作为实验性手动安装提供。有关详细信息,请参阅手动安装部分
  • 支持常见的替代当前工作目录序列:OSC 6 ; scheme://<cwd> STOSC 1337 ; CurrentDir=<cwd> STOSC 9 ; 9 ; <cwd> ST
  • 更好地处理各种 shell 集成边缘情况

平滑滚动

终端现在支持平滑滚动,它将在短时间内动画滚动,帮助您在滚动后看到您的位置,类似于编辑器和列表。要启用平滑滚动,请设置:

"terminal.integrated.smoothScrolling": true

下划线样式和颜色

现在使用最初由 kitty 终端首创的转义序列支持下划线样式和颜色。对于支持的程序,这些新下划线应该会自动点亮,只要它们将这些序列发送到 VS Code 终端。

The terminal can now display straight, double, curly, dotted, and dashed underlines in any color

此更改包括在启用 GPU 加速时改进的下划线渲染,它避免了具有长下行字符的字形和下划线重叠。

An example showing that characters with descenders such as 'g' and 'p' no longer overlap with underlines

由于 ConPTY 中存在一个悬而未决的问题,Windows 目前不支持下划线样式和颜色。

渲染改进

终端渲染方面进行了多项改进:

  • 一个长期存在的错误,即工作台放大或缩小时有时会导致模糊,现已修复!

    Text is now more crisp as canvas is no longer stretched, which caused anti-aliasing to look poorly

  • 最小对比度启用且需要翻转文本亮度以满足对比度时,文本的色调现在将保留。

    Bold yellow text on red in some themes will now display as dark yellow instead dark grey

  • 新的主题键 terminal.inactiveSelectionBackground 可用于显示不同的选择背景颜色,以更好地与编辑器对齐,无论终端是否处于焦点。

    Most themes now dim the selection background color when not focused

  • 自定义 Powerline 字形渲染改进了边缘裁剪。这在半圆形字符上最明显,它们现在应该是平滑曲线。

    Powerline glyphs are no longer cut off on the edges

任务

窗口重新加载时重新连接

监视任务现在在窗口重新加载时会重新连接,从而在 VS Code 更新或扩展状态更改时实现不间断的工作。任务重新连接默认启用,但可以通过 task.reconnection 设置禁用。

调试

launch.json 中的 suppressMultipleSessionWarning 选项

当您尝试使用启动配置开始调试时,如果该配置已经有一个活动的调试会话,VS Code 将在启动第二个实例之前显示警告对话框。这很容易意外发生,通常不是您想做的。但是,如果运行相同配置的多个实例是您工作流的一部分,您现在可以通过在 launch.json 配置文件中添加 "suppressMultipleSessionWarning": true 来禁用此警告。

评论

筛选

“评论”视图新增了筛选功能,您可以按评论文本和已解决/未解决状态进行筛选。

编辑器装饰

评论编辑器侧边栏装饰现在使用 codicons 并具有新的样式。

语言

TypeScript 4.8

VS Code 现在附带 TypeScript 4.8.2。此重大更新带来了类型检查和类型推断的语言改进。在工具方面,您还应该看到一些不错的性能改进和错误修复!

有关此更新的更多信息,请查看TypeScript 4.8 公告

TypeScript 直播

如果您错过了 VS Code 关于 TypeScript 的直播,请查看与Matt Pocock 的两场最近的会话。

VS Code livestreams page

对扩展的贡献

Jupyter

笔记本图像粘贴

Jupyter 扩展现在允许用户将屏幕截图或图像文件粘贴到其笔记本中的 Markdown 单元格中。目前仅支持 image/png MIME 类型。要使用该功能,请添加/启用以下设置:

"ipynb.experimental.pasteImages.enabled": true
"editor.experimental.pasteActions.enabled": true

使用 Pylance 改进 Jupyter 笔记本的 IntelliSense

得益于语言服务器协议的更新以包含笔记本支持,当使用 Pylance 时,Jupyter 笔记本与 Python 内核的 IntelliSense 支持现在好得多。

您不仅在笔记本文件中编写 Python 代码时会获得改进的自动完成选项,还可以使用重构功能,例如提取变量、提取方法和重命名符号,以及自动导入和语义突出显示。

主题: Horizon Extended (在 vscode.dev 上预览)

实时预览

实时预览扩展现在正式支持多根工作区!尽管用户以前在技术上可以在多根工作区中使用实时预览,但现在有一个更简洁的实现支持它。

Live Preview 扩展现在为多根工作区中的每个根启动一个新服务器;因此,当预览多根工作区时,相对于项目根目录的链接(以 / 开头的链接)将正常工作。

主题: GitHub 暗淡主题 (在 vscode.dev 上预览)

您可以通过将鼠标悬停在 Live Preview 的状态栏指示器(位于右下角)上来查看扩展打开的服务器。在下图中,为每个工作区启动了一个服务器(端口 3000 和 3002),并为不属于任何打开工作区的文件生成了另一个服务器(端口 3004)。

Live Preview multi-root ports displayed from the Status bar indicator

立即安装实时预览扩展并尝试一下吧!📡✨🔎

GitHub 拉取请求和问题

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

  • 拉取请求通知。
  • 可以直接从拉取请求概览中解决/取消解决评论。

查看扩展 0.50.0 版本的更新日志以了解其他亮点。

远程开发

远程开发扩展的工作仍在继续,这些扩展允许您将容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 用作功能齐全的开发环境。

您可以在远程开发发布说明中了解新的扩展功能和错误修复。

预览功能

厌倦了在移动或重命名文件时意外地破坏 Markdown 中的链接或图像?试试新的 markdown.experimental.updateLinksOnFileMove.enabled 设置!

启用此新的实验性设置后,当文件在 VS Code 资源管理器中移动或重命名时,VS Code 将自动更新 Markdown 中的链接和图像。

此新行为可以使用 markdown.experimental.updateLinksOnFileMove.enabled 设置启用。您可以使用 markdown.experimental.updateLinksOnFileMove.externalFileGlobs 控制受影响的文件类型。

试试这个新功能,并务必分享反馈。

设置配置文件

在过去几个月里,我们一直致力于在 VS Code 中支持设置配置文件,这是社区最受欢迎的需求之一。此功能可通过 workbench.experimental.settingsProfiles.enabled 设置进行预览。尝试一下,并通过在 vscode 存储库中创建问题或在问题 #116740 中发表评论来向我们提供反馈。

命令行界面

在这个里程碑中,我们增加了对设置配置文件的命令行界面 (CLI) 支持。您现在可以使用 --profile 参数传递配置文件名称,并使用该配置文件打开文件夹或工作区。下面的命令行使用“Web Development”配置文件打开 web-sample 文件夹:

code ~/projects/web-sample --profile "Web Development"

如果指定的配置文件不存在,则会创建一个具有给定名称的新空配置文件。

临时设置配置文件

现在还支持临时设置配置文件,可以创建并临时将其与文件夹或工作区关联。临时配置文件一旦不再与任何文件夹或工作区关联,就会自动删除。

在下面的短视频中,当用户打开一个文件夹并选择设置配置文件:创建临时设置配置文件命令时,将创建一个新的“Temp 1”配置文件,并在配置文件列表中可见。当文件夹关闭时,“Temp 1”配置文件将被删除。

您还可以使用 --profile-temp 开关通过 CLI 创建临时设置配置文件并将其与文件夹或工作区关联。以下命令行将打开 try-out-sample 文件夹,并带有一个临时配置文件,该文件在关闭文件夹后将被删除:

code ~/projects/try-out-sample --profile-temp

在不同开发环境之间移动时随身携带更改

当您浏览 GitHub 或 Azure Repos 存储库(例如https://vscode.dev/github/microsoft/vscode)时,您可以使用继续在此处工作命令选择一个不同的开发环境来与您的存储库一起使用。

以前,如果您的虚拟工作区中有待处理的编辑,您需要将它们推送到 GitHub 或 Azure Repos 才能在其他地方查看它们。在这个里程碑中,我们在继续在此处工作功能中添加了编辑会话集成,以便您的未提交更改会自动随您一起传输到您的目标开发环境,例如 GitHub codespace。

在下面的视频中,用户在使用 VS Code for Web 时对 TypeScript 文件所做的更改,在他们创建并切换到新的 GitHub codespace 中工作时,会得到应用。

要试用此功能,请在设置中将 "workbench.experimental.editSessions.enabled": true,启用设置同步,然后在 VS Code for Web 或桌面版中运行编辑会话:登录命令。

当您使用 VS Code for Web 时,您的未提交更改将在您使用继续在此处工作时随您一起传输到:

  • GitHub Codespaces 中的新云托管环境
  • GitHub 存储库的新本地克隆
  • 具有相同虚拟 GitHub 存储库的本地 VS Code 实例

当您使用桌面版 VS Code 和远程存储库扩展时,您未提交的更改将在您使用继续在此处工作时随您一起传输到:

  • GitHub Codespaces 中的云托管环境(可通过 GitHub Codespaces 扩展获得)
  • GitHub 存储库的新本地克隆
  • 容器卷中 GitHub 存储库的新克隆(可通过 开发容器 扩展获得)
  • https://vscode.dev
  • 包含存储库克隆的现有本地文件夹

扩展创作

TerminalExitStatus.reason

扩展作者现在可以通过新的 TerminalExitReason API 更好地了解终端退出的原因。

export enum TerminalExitReason {
  Unknown = 0,
  Shutdown = 1,
  Process = 2,
  User = 3,
  Extension = 4
}

枚举设置 enumItemLabels 文档

设置编辑器中的枚举设置支持 enumItemLabels 键,它允许扩展作者指定与 enum 值对应的下拉列表中显示的值。

Example of enumItemLabels with a mock setting. The select box displays the label value, and the dropdown options display both the label value and the enum value, though the enum values are rendered less prominently.

主题: 浅粉色 (在 vscode.dev 上预览)

新的 activeWebviewPanelId 上下文键

新的 activeWebviewPanelId 上下文键跟踪当前聚焦的 Web 视图面板的 viewType。您可以在 when 子句中使用它,以便在 Web 视图聚焦时启用命令或菜单项。

"when": "activeWebviewPanelId == 'markdown.preview'"

Web 上的 TypeScript 服务器插件

Web 上现已支持TypeScript 语言服务插件。这适用于通过 typescriptServerPlugins 贡献点由扩展贡献的插件。

首先,您必须通过在 package.json 中除了 main 之外添加一个 browser 入口点来告知 TypeScript 您的插件已启用 Web 功能:

"main": "out/main.js",
"browser": "out/main.browser.js"

browser 入口点必须是一个导出激活插件的默认函数的 JavaScript 模块。

export default function init(modules: { typescript: typeof import("typescript/lib/tsserverlibrary") }) {
  ...
};

请记住,在 Web 上,您的插件将在正常的 Web Worker 环境中运行,因此您不能使用 Node.js API,例如 fs

禁用树项

其启用子句解析为 false 的命令的树项将显示为已禁用。

Markdown 语言服务器

VS Code 中的 Markdown 支持已重新实现为功能齐全的语言服务器。您可以阅读Matt Bierner他的 Markdown 语言服务器博客文章中的旅程,其中他描述了为 Markdown 文件添加编程语言功能,例如查找所有引用重命名符号和断链检测。

即将对“view/title”菜单上下文的更改

在 8 月,我们尝试将视图树的焦点和选择传递给贡献到树视图的 view/title 菜单的命令。在此版本中,我们恢复了此更改,因为它给某些扩展造成了问题。我们希望在 9 月恢复并发布此更改。如果此更新会破坏您的扩展,或者您认为此行为不理想,请在问题 #42903 中留言。

调试适配器协议

“startDebugging”请求的提案

目前 VS Code 支持多个并发调试会话,但调试适配器协议 (DAP) 只覆盖单个会话。这意味着以编程方式创建新的调试会话不属于 DAP 的一部分,只能在 DAP 或调试适配器之外完成,通常在包含调试适配器的调试扩展中。这样做的后果是,多会话功能(例如调试子进程)对于只重用调试适配器而不重用 VS Code 特定的调试扩展的非 VS Code DAP 客户端来说并不容易获得。

为了改善这种情况,我们计划向 DAP 添加一个新的反向请求,以在调试适配器内部创建新的调试会话。经过几轮讨论,我们为 startDebugging 反向请求准备了提案。如果您是调试扩展或 DAP 客户端作者,并且对此 DAP 协议的添加感兴趣,我们将不胜感激您的反馈。

工程

Electron 19 更新

在这个里程碑中,我们完成了将 Electron 19 打包到 VS Code 桌面版的探索,我们感谢所有参与 Insiders 自我托管的人。此次更新包含了 Chromium 102.0.5005.167 和 Node.js 16.14.2

Windows 7 支持已终止

Microsoft 于 2020 年 1 月终止了对 Windows 7 的支持。然而,Electron 通过修补 libuv 库继续支持 Windows 7。随着 Electron 19 的更新,libuv 补丁不再起作用,我们建议用户更新到更新的 Windows 版本以使用 VS Code 桌面版。VS Code 将不再在 Windows 7 上提供产品更新和安全修复。您可以在 support.microsoft.com 上了解有关升级 Windows 的更多信息。

值得注意的修复

  • 115768 Windows:不同显示器上不同缩放级别无法在正确位置恢复窗口
  • 133444 将设置选项卡拖到另一个编辑器组会清除搜索查询
  • 140305 主窗口跨多个屏幕时,重新打开时无法恢复位置
  • 146683 打开时窗口布局样式错误
  • 148492 对工作区文件使用平台无关路径
  • 154963 修复了扩展教程中的 codicon 支持
  • 155341 如果数据写入延迟,管道传输到 VS Code 失败
  • 156075 [Emmet] 按语言“在制表符上触发扩展”
  • 156385 运行最近命令显示已解析的别名 - ls--color=auto 附加到执行的命令

感谢

最后但同样重要的是,衷心感谢 VS Code 的贡献者。

问题跟踪

对我们问题跟踪的贡献:

拉取请求

vscode 的贡献:

vscode-extension-samples 的贡献:

devcontainers/cli 的贡献: