2023 年 3 月(版本 1.77)

更新 1.77.1:该更新解决了这些问题

更新 1.77.2:该更新解决了此安全问题

更新 1.77.3:该更新解决了这些问题

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


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

如果您想在线阅读这些发行说明,请转至code.visualstudio.com上的更新

业内人士:想尽快尝试新功能吗?您可以下载每晚的预览体验成员版本,并在最新更新可用后立即尝试。

无障碍

终端可访问缓冲区改进

终端可访问缓冲区允许屏幕阅读器用户通过终端访问终端内容:焦点可访问缓冲区( ⌥F2 (Windows Alt+F2、Linux Shift+Alt+F2 ) ),现在动态更新并保持活动状态,直到EscapeTab被按下用于结束会话。

当可访问缓冲区集中在具有 shell 集成的终端中时,终端:导航可访问缓冲区()启用终端命令之间的导航,类似于使用“转到编辑器中的符号...”来导航编辑器的方式。

悬停控制导航

现在可以将注意力集中在悬停控件上,并使用、updownhome和键水平和垂直滚动。用于聚焦悬停控件的键盘快捷键 ( ⌘K ⌘I (Windows、Linux Ctrl+K Ctrl+I ) ) 与用于在主光标位置显示悬停的键盘快捷键相同。endpage uppage down

接受通知的主要操作

要接受通知的主要操作,用户过去需要导航到通知中心。通知:接受通知主要操作( ⇧⌘A (Windows、Linux Ctrl+Shift+A ) ) 运行主要操作而不离开当前上下文。

粘性滚动导航

现在可以专注于粘性滚动线并使用updown键进行导航。您可以使用该Enter键转到选定的行。要关注粘性滚动,您可以从命令面板运行焦点粘性滚动。通过视图:切换粘性滚动命令启用粘性滚动 UI 。

工作台

现在,在 GitHub 存储库中工作时,您可以从编辑器装订线复制编辑器行或范围的深层链接。

在 VS Code Desktop 中,为了能够从编辑器装订线创建 GitHub 永久链接和 HEAD 链接,您需要安装GitHub Pull Requests and Issues扩展。在vscode.dev中,GitHub 存储库的深层链接是开箱即用的。

这些操作也已添加到编辑器选项卡上下文菜单和资源管理器上下文菜单中的共享子菜单中。

按文件内容推荐扩展名

VS Code 现在可以根据文件内容推荐扩展名。例如,如果打开具有笔记本单元语法的 Python 文件,VS Code 会建议使用Jupyter扩展来正确渲染和运行这些单元。

选择粘性滚动的默认提供程序

粘性滚动(视图:切换粘性滚动)使用几种不同的内容模型来创建其标题。现在可以在轮廓提供程序模型、折叠提供程序模型和缩进模型之间进行选择,以确定在粘性滚动 UI 中显示哪些行。如果某个模型不适用于当前语言,VS Code 将按上述顺序回退到下一个模型。最初使用的默认模型可以通过编辑器 > 粘性滚动:默认模型( editor.stickyScroll.defaultModel) 进行更改。

终端

改进的选项卡悬停

终端选项卡悬停现在显示 shell 的进程 ID、完整命令行以及扩展环境变量贡献的改进视图。

将鼠标悬停在终端选项卡上将显示有关终端的详细信息,这可以通过键盘通过 Ctrl/Cmd+K、Ctrl/Cmd+I 触发

源代码控制

远程存储库中的 Git LFS 提交支持

现在,在编辑 GitHub 和 Azure Repos 存储库时,无需安装Git LFS即可提交 LFS 跟踪的文件。首先,在 VS Code Desktop 上安装GitHub 存储库Azure Repos扩展,运行“打开远程存储库”命令来打开存储库,然后使用源代码管理视图提交更改。扩展会解析您的.gitattributes配置,以确定是否应将更改的文件提交到存储库提供商的 Git LFS 存储。

要禁用此行为,您可以设置"githubRepositories.experimental.lfs.write.enabled": false"azureRepos.experimental.lfs.write.enabled": false

注意:尚未提供对 Web 版 VS Code ( vscode.dev ) 的支持。

三向合并编辑器文档

如果您尚未尝试使用三向合并编辑器来帮助您解决合并冲突,请查看源代码管理文档中的三向合并编辑器部分。三向合并编辑器可让您同时查看和选择传入和当前的更改、预览结果,甚至在进行任何更改之前查看文件的基本版本。

3路合并编辑器

并且不要错过YouTube 视频《合并冲突极其有用的指南》 ,该视频以 3 路合并编辑器为主角。

笔记本电脑

保存时格式化

您现在可以为笔记本启用保存格式。这会在您保存时格式化整个笔记本。您可以通过设置为notebook.formatOnSave.enabled来启用此功能true

默认情况下启用笔记本在输出中查找

当您在笔记本中打开“查找”控件时,它现在默认会在单元格输入和输出中搜索文本。您可以通过更改过滤器下拉列表中的选项来关闭此功能。

可滚动输出区域

设置notebook.output.scrolling为 true 时,超出的输出和错误将notebook.output.textLineLimit在可滚动区域内呈现。

语言

TypeScript 5.0

VS Code 现在随 TypeScript 5.0.2 一起提供。此次重大更新带来了新的 TypeScript 语言功能、改进的性能以及许多重要的改进和错误修复。您可以在TypeScript 博客上了解有关 TypeScript 5.0 的信息。

JavaScript 和 TypeScript 的切换大小写完成

VS Code 现在可以帮助在 JavaScript 或 TypeScript 中构建基于文字类型的 switch 语句:

在 switch 语句内部键入case并接受 的建议case ...。这将自动为该类型的所有值插入案例。请注意,这仅当要切换的值是联合或文字类型时才有效。

VS Code 网页版

.gitignore 支持

在此里程碑中,我们.gitignore在 VS Code for the Web 上添加了对 GitHub 和 Azure Repos 存储库中的文件的支持。在下面的视频中,未跟踪的文件.gitignore在资源管理器视图中显示为灰色,并且不会出现在源代码管理视图中。当使用GitHub 存储库Azure Repos扩展远程浏览 VS Code Desktop 上的存储库时,这也适用。

下面的短视频添加了.pxt文件夹,以.gitignore在源代码管理视图中隐藏所包含的文件。

远程开发

远程开发扩展允许您使用 Dev Containers 、通过 SSH 或远程隧道的远程计算机或适用于 Linux 的 Windows 子系统(WSL) 作为全功能开发环境。

Dev Containers 允许您使用容器作为功能齐全的开发环境。开发容器规范寻求通过通用开发设置、工具和配置来丰富现有格式的方法,同时仍然提供简化的、未经编排的单一容器选项。您可以在Changelog 播客的第 529 集中了解有关 Dev Containers 和规范的更多信息。

其他远程开发亮点包括:

  • 远程隧道 - 更好地重用现有隧道。
  • 远程隧道 -继续使用 VS Code Desktop 命令工作以快速过渡到本地开发。
  • Dev Containers - 更轻松地清理未使用的 Dev Containers 和卷。

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

扩展

扩展安装不会因签名验证失败而被阻止

扩展签名验证错误地报告少量有效扩展的错误并阻止安装它们。这些故障是由 VS Marketplace 和 VS Code 中的错误引起的,我们正在积极修复。为了解锁扩展的使用,即使签名验证失败,VS Code 也会安装扩展。一旦VS Marketplace 问题 #619得到解决,我们将重新启用签名验证检查,很可能是在我们的下一个稳定版本中。

对扩展的贡献

Python

移动符号重构

借助新的代码操作移动符号,您现在可以使用Pylance更方便地重构 Python 代码!

要尝试一下,请在 Python 文件上选择一个符号,然后单击显示的灯泡 ( ⌘。(Windows、Linux Ctrl+. ))。您可以将符号移动到现有文件或新文件。如果该位置是新文件,则会创建一个与符号同名的 Python 文件。所有适用的导入参考都会随着符号移动而自动更新。

从依赖文件创建环境

当您打开一个文件requirements.txt或一个文件时,编辑器中pyproject.toml会出现一个新的“创建环境...”按钮,该按钮运行“Python:创建环境”命令,允许您创建新的虚拟环境并安装列出的依赖项。

打开 pyproject.toml 文件,其中列出了依赖项,编辑器右下角显示“创建环境”按钮

为扩展作者提供的最终环境 API

用于在用户计算机上使用可用 Python 环境的 Python 扩展 API 已最终确定。扩展还可以使用 API 访问 Python 扩展用于运行脚本的选定环境路径,或将路径更新为其首选路径。

API 使用示例位于Python 环境 API wiki 页面中。我们还计划将来发布 npm types 包,以便更轻松地跟踪 Python 扩展 API 中的任何更改。

朱皮特

针对 Python 环境的内核选择器改进

内核选择器现在会列出conda 环境,即使其中未安装 Python 运行时也是如此。

例如,如果使用 CLI 创建新的 conda 环境(例如 ) ,则此新环境将显示在Python 环境conda create -n envML列表中的Conda Env Without Python部分下。

当您选择这样的环境时,Python 运行时和必要的依赖项会自动安装到该环境中。

笔记本内核选择器能够选择空的 conda 环境

GitHub 拉取请求和问题

GitHub Pull Requests and Issues扩展取得了更多进展,它允许您处理、创建和管理 Pull Requests 和问题。亮点包括:

  • 可以从Pull Requests视图在 vscode.dev 上打开 Pull 请求。
  • 有一个新设置可以在“创建拉取请求”视图中检查“自动合并”选项:。githubPullRequests.setAutoMerge

查看扩展0.62.0版本的变更日志以查看其他亮点。

GitHub 副驾驶

GitHub Copilot是一款 AI 结对程序员工具,可帮助您更快、更智能地编写代码。您可以使用VS Code 中的Copilot扩展来生成代码、从其生成的代码中学习,甚至配置您的编辑器。

GitHub Copilot 扩展

我们很高兴地宣布 Copilot 可以更深入地集成到 VS Code 中。通过使用GitHub Copilot Chat扩展,您将能够尝试新功能,例如:

  • 内联建议:当您在代码中工作时,Copilot 建议会内联显示。
  • 聊天视图:在 GitHub Copilot 聊天视图中向 Copilot 寻求有关任何任务或问题的帮助。
  • 内联聊天:在文件中内联编写代码时与 Copilot 交谈。

您可以要求 Copilot 查找错误、解释棘手的代码、创建测试,甚至询问有关 VS Code 的问题。

Copilot 聊天示例询问如何更改 VS Code 颜色

您可以在VS Code 和 GitHub Copilot博客文章中详细了解 VS Code 团队在 Copilot 方面的经验和未来。您还可以阅读VS Code 中的 GitHub Copilot文章,了解有关在 VS Code 中使用 Copilot 的更多详细信息。

预览功能

对输出的笔记本搜索支持

上一次迭代,我们在打开的笔记本中引入了对格式化笔记本内容的全局搜索,但仅限于单元格和 Markdown 输入。这次迭代,我们添加了对搜索笔记本输出的支持。当您打开笔记本时,有一个切换开关可让您自定义要在笔记本中搜索的位置。启用search.experimental.notebookSearch试试这个!

欢迎页面上的远程连接选择器

欢迎页面现在支持启动列表中的实验性远程连接选择器Connect to.. ,以帮助您开始使用远程连接(SSH、远程隧道、GitHub Codespaces 等)。workbench.remote.experimental.showStartListEntry该功能默认处于禁用状态,可以通过设置为 来启用true

扩展创作

即将到来的 Electron 22 更新可能需要更改本机模块

我们计划在下一个稳定版本中更新到Electron 22 。由于启用了V8 内存笼,这对使用本机模块的扩展产生了影响:ArrayBuffers不再允许指向外部(“堆外”)内存。

我们计划提供一个自定义内存分配器,以便未更新的本机模块仍然可以继续工作,但尽管如此,还是建议您检查已分配的外部内存的使用情况。请遵循Electron 博客文章中的建议来了解如何采用此更改。

最终支持持续测试运行

对连续测试运行的支持已经完成。此 API 允许用户向测试扩展表明他们想要“监视”测试并在发生更改时继续运行它们。

const profile = ctrl.createRunProfile(/* ... */);
+profile.supportsContinuousRun = true;

function runHandler(request: vscode.TestRunRequest, cancellation: vscode.CancellationToken) {
+  if (request.continuous) {
+    startWatchingAndRunningTests(request);
+  }

  // ...
}

新的when子句解析器

此 VS Code 版本包括一个新的when 子句解析器,提供新功能(例如,对括号的支持)和更好的正确性,但也有更严格的规则。该版本还包括扩展清单文件 ( ) 中 when 子句的 linter,package.json以确保它们在语法上正确。我们鼓励您使用新的解析器检查您的 when 子句是否可能损坏。此外,如果您在 when 子句中使用括号,则您的扩展与 VS Code 版本 1.77 及更高版本兼容。有关更改的更多信息,请参阅问题 #175540

源代码管理输入中的内联完成

源代码管理输入框现在支持内联完成

在源代码管理输入中运行的内联建议扩展示例

源代码管理输入框的文档语言标识符scminput

提议的 API

每个里程碑都附带新提议的 API,扩展作者可以尝试它们。一如既往,我们希望得到您的反馈。以下是尝试建议的 API 的步骤:

  1. 找到您想要尝试的提案并将其名称添加到 中package.json#enabledApiProposals
  2. 使用最新的vscode-dts并运行vscode-dts dev. 该命令将相应的d.ts文件下载到您的工作区中。
  3. 您现在可以根据该提案进行编程。

您无法发布使用建议的 API 的扩展。下一个版本中可能会有重大变化,我们永远不想破坏现有的扩展。

编辑器装订线建议的上下文菜单

建议的菜单editor/lineNumber/context锚定到编辑器装订线和编辑器行号,并提供一种显示与特定行上下文相关的扩展操作的方法。

要在开发中尝试这一点,请启用contribEditorLineNumberMenuAPI 提案。对该菜单做出贡献的操作接收命令参数中的行号,并且可以editorLineNumber在其when子句中引用上下文键。您可以在API 提案问题 #175945中留下反馈。

笔记本生命周期事件:onWillSaveNotebookDocument

onWillSaveNotebookDocument事件在保存笔记本文档之前触发。此事件对于想要在保存笔记本文档之前执行某些操作的扩展非常有用。例如,想要在保存之前清理笔记本单元格输出的扩展可以为此事件注册一个侦听器并返回要应用的单元格输出编辑。

以下是扩展程序如何注册此事件的侦听器:

vscode.workspace.onWillSaveNotebookDocument(e => {
    if (event.reason == vscode.NotebookDocumentSaveReason.Manual) {
      event.waitUntil(new Promise((resolve) => {
        const notebookEdit = new vscode.NotebookEdit(...);
        const edit = new vscode.WorkspaceEdit();
        edit.set(event.document.uri, [notebookEdit]);
        resolve([edit]);
      }));
    }
});

工程

Windows 8 和 8.1 的 EOL 警告

VS Code Desktop 将在接下来的几个里程碑中更新到 Electron >=23。随着 Electron 23 更新,VS Code 桌面将不再在 Windows 8 / Windows Server 2012 和 Windows 8.1 / Windows Server 2012 R2 上运行。在此里程碑中,我们为这些受影响平台上的用户添加了弃用通知,以便他们为迁移做好准备。如果您运行的是这些 Windows 版本之一,请查看我们的常见问题解答以获取更多信息。

更新了 Snap 包的基础镜像

在本次迭代中,我们更新了 Snap 包,以使用 Core20(从 Ubuntu 20.04 构建)作为之前 Core(从 Ubuntu 16.04 构建)的基础映像。此更改解决了 CLI 中缺少的 GLIBC 符号,并修复了 Wayland 支持等问题。您可以在拉取请求#127320中找到更多上下文。

探索扩展主机的自定义内存分配器

为了采用支持 V8 沙箱的 Electron 22,并最大限度地减少对依赖专门使用外部数组缓冲区的本机模块的扩展的影响,我们定制了扩展主机中现有的内存分配器。具体来说,扩展主机现在将这些本机模块的分配容纳在 V8 沙箱内,作为避免致命崩溃的解决方法。如果您对我们如何/为何最终采用此解决方案感兴趣,可以查看问题 #177338了解详细信息。

文档

新的编程语言主题

值得注意的修复

  • 174690评论 API -author.iconPath 如何引用与扩展程序捆绑在一起的文件?
  • 175805 VS Code 不会自动检测用于端口转发的 IPv6 进程

谢谢

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

问题跟踪

对我们问题跟踪的贡献:

拉取请求

贡献vscode

贡献vscode-languageserver-node

贡献vscode-pull-request-github

贡献vscode-docs

贡献monaco-editor

贡献devcontainers/cli