2023年3月(版本1.77)

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

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

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

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


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

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

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。

可访问性

终端可访问缓冲区的改进

终端可访问缓冲区,它通过终端:聚焦可访问缓冲区⌥F2(Windows Alt+F2,Linux Shift+Alt+F2)为屏幕阅读器用户提供对终端内容的访问,现在动态更新并保持活动状态,直到使用EscapeTab结束会话。

当在具有shell集成的终端中聚焦可访问缓冲区时,转到可访问视图中的符号 (⇧⌘O (Windows, Linux Ctrl+Shift+O)) 允许在终端命令之间导航,类似于如何使用转到编辑器中的符号...在编辑器中进行导航。

悬停控制导航

现在可以使用updownhomeendpage uppage down键来聚焦悬停控制并水平和垂直滚动。聚焦悬停控制的键盘快捷键(⌘K ⌘I (Windows, Linux Ctrl+K Ctrl+I))与用于在主光标位置显示悬停的快捷键相同。

接受通知的主要操作

为了接受通知的主要操作,用户传统上需要导航到通知中心。通知:接受通知主要操作 (⇧⌘A (Windows, Linux Ctrl+Shift+A)) 在不离开当前上下文的情况下运行主要操作。

粘性滚动导航

现在可以专注于粘性滚动行并使用updown键进行导航。您可以使用Enter键跳转到选定的行。要专注于粘性滚动,您可以从命令面板运行Focus Sticky Scroll。通过View: Toggle Stick Scroll命令启用粘性滚动UI。

工作台

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

在VS Code桌面版中,为了能够从编辑器边栏创建GitHub永久链接和HEAD链接,您需要安装GitHub Pull Requests and Issues扩展。在vscode.dev中,GitHub仓库的深度链接是开箱即用的。

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

根据文件内容推荐扩展

VS Code 现在可以根据文件内容推荐扩展。例如,如果您打开一个包含笔记本单元格语法的 Python 文件,VS Code 会推荐 Jupyter 扩展来正确渲染和运行这些单元格。

为粘性滚动选择默认提供者

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

终端

改进的标签悬停

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

将鼠标悬停在终端标签上会显示有关终端的详细信息,可以通过键盘快捷键Ctrl/Cmd+K, Ctrl/Cmd+I触发

源代码控制

远程仓库中的Git LFS提交支持

现在,您可以在编辑 GitHub 和 Azure Repos 仓库时提交 LFS 跟踪的文件,而无需安装 Git LFS。要开始使用,请在 VS Code Desktop 上安装 GitHub RepositoriesAzure Repos 扩展,运行 Open Remote Repository 命令以打开您的仓库,并使用源代码控制视图提交您的更改。这些扩展会解析您的 .gitattributes 配置,以确定您更改的文件是否应提交到仓库提供商的 Git LFS 存储中。

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

注意: 对VS Code网页版(vscode.dev)的支持尚不可用。

三向合并编辑器文档

如果您还没有尝试使用三方合并编辑器来帮助您解决合并冲突,请查看源代码控制文档中的三方合并编辑器部分。三方合并编辑器允许您同时查看和选择传入和当前的更改,预览结果,甚至在更改之前查看文件的基础版本。

三方合并编辑器

不要错过The EXTREMELY Helpful Guide to Merge Conflicts YouTube视频,该视频以三向合并编辑器为主角。

笔记本

保存时格式化

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

默认启用的Notebook输出查找功能

当你在笔记本中打开查找控件时,默认情况下它将在单元格输入和输出中搜索文本。你可以通过更改过滤器下拉菜单中的选项来关闭此功能。

可滚动的输出区域

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

语言

TypeScript 5.0

VS Code 现在搭载了 TypeScript 5.0.2。这个重大更新带来了新的 TypeScript 语言特性、性能改进以及许多重要的改进和错误修复。您可以在 TypeScript 博客 上阅读有关 TypeScript 5.0 的信息。

JavaScript 和 TypeScript 的 Switch case 补全

VS Code 现在可以帮助在 JavaScript 或 TypeScript 中基于字面量类型生成 switch 语句的框架:

在switch语句中输入case并接受case ...的建议。这将自动为该类型的所有值插入case。请注意,这仅在切换的值是联合类型或字面量类型时有效。

网页版VS Code

.gitignore 支持

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

下面的短视频将.pxt文件夹添加到.gitignore中,以隐藏源控制视图中的文件。

远程开发

Remote Development extensions 允许您使用 Dev Container、通过 SSH 连接的远程机器或 Remote Tunnels,或者 Windows Subsystem for Linux (WSL) 作为全功能的开发环境。

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

其他远程开发的亮点包括:

  • 远程隧道 - 更好地重用现有隧道。
  • 远程隧道 - 继续在VS Code桌面版中工作命令,快速切换到本地开发。
  • Dev Containers - 更容易清理未使用的Dev Containers和卷。

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

扩展

扩展安装不受签名验证失败的影响

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

对扩展的贡献

Python

移动符号重构

现在,您可以更方便地使用Pylance重构您的Python代码,这要归功于新的将符号移动到代码操作!

要尝试此功能,请在Python文件中选择一个符号,然后点击出现的灯泡(⌘. (Windows, Linux Ctrl+.))。您可以将符号移动到现有文件或新文件中。如果位置是新文件,则会创建一个与符号同名的Python文件。所有适用的导入引用都会随着符号的移动自动更新。

从依赖文件创建环境

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

一个打开的pyproject.toml文件,列出了依赖项,并在编辑器的右下角显示了一个创建环境按钮

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

Python扩展的API用于处理用户机器上可用的Python环境已经最终确定。扩展还可以使用该API访问Python扩展用于运行脚本的所选环境路径,或更新路径到他们偏好的路径。

API 使用示例可以在 Python Environment APIs 维基页面中找到。我们还计划在未来发布一个 npm 类型包,以便更容易跟踪 Python 扩展 API 中的任何更改。

Jupyter

Python环境的Kernel选择器改进

内核选择器现在会列出conda环境,即使其中没有安装Python运行时。

例如,如果使用CLI(如conda create -n envML)创建了一个新的conda环境,这个新环境将显示在Python环境列表中的没有Python的Conda环境部分。

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

Notebook内核选择器,可以选择空的conda环境

GitHub 拉取请求和问题

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

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

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

GitHub Copilot

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的更多详细信息。

预览功能

Notebook 搜索支持输出

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

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

欢迎页面现在支持一个实验性的远程连接选择器连接到..在开始列表中,以帮助您开始使用远程连接(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子句,提供新功能(例如,支持括号)和更好的正确性,但也有更严格的规则。该版本还包括一个用于扩展清单文件(package.json)中when子句的linter,以确保它们在语法上是正确的。我们鼓励您检查您的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锚定在编辑器装订线和编辑器行号上,并提供了一种显示与特定行相关的扩展操作的方式。

要在开发中尝试此功能,请启用contribEditorLineNumberMenu API提案。贡献到此菜单的操作会在命令参数中接收行号,并且可以在它们的when子句中引用editorLineNumber上下文键。您可以在API提案问题 #175945中留下反馈。

Notebook 生命周期事件: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 桌面版将在接下来的几个里程碑中更新到 Electron >=23。随着 Electron 23 的更新,VS Code 桌面版将不再在 Windows 8 / Windows Server 2012 和 Windows 8.1 / Windows Server 2012 R2 上运行。在这个里程碑中,我们为这些受影响的平台上的用户添加了弃用通知,以便他们为迁移做好准备。如果您正在运行这些 Windows 版本之一,请查看我们的 FAQ 以获取更多信息。

Snap 包的基础镜像已更新

在此次迭代中,我们已将Snap包更新为使用Core20(基于Ubuntu 20.04构建)作为基础镜像,取代了之前的Core(基于Ubuntu 16.04构建)。这一更改解决了CLI中缺失的GLIBC符号问题,并修复了Wayland支持等其他问题。您可以在pull request #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的贡献: