在 VS Code 中试用

2023 年 3 月 (版本 1.77)

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

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

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

下载:Windows:x64 Arm64 | Mac:通用 Intel Apple 芯片 | 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)) 可在终端命令之间导航,类似于编辑器使用转到编辑器中的符号...进行导航的方式。

悬停控件导航

现在可以使用 `up`、`down`、`home`、`end`、`page up` 和 `page down` 键聚焦于悬停控件并进行水平和垂直滚动。聚焦悬停控件的键盘快捷键 (⌘K ⌘I (Windows、Linux Ctrl+K Ctrl+I)) 与在主光标位置显示悬停的快捷键相同。

接受通知的主要操作

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

粘性滚动导航

现在可以聚焦于粘性滚动行并使用 `up` 和 `down` 键进行导航。您可以使用 `Enter` 键转到选定的行。要聚焦于粘性滚动,您可以从命令面板运行聚焦粘性滚动。通过视图:切换粘性滚动命令启用粘性滚动 UI。

工作台

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

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

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

按文件内容推荐扩展

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

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

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

终端

改进的选项卡悬停

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

Hovering the terminal tab will reveal details about the terminal, this can be triggered with the keyboard via Ctrl/Cmd+K, Ctrl/Cmd+I

源代码管理

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

现在,在编辑 GitHub 和 Azure Repos 仓库时,无需安装 Git LFS 即可提交 LFS 跟踪文件。要开始使用,请在 VS Code 桌面版中安装 GitHub RepositoriesAzure Repos 扩展,运行打开远程仓库命令以打开您的仓库,然后使用源代码管理视图提交更改。这些扩展会解析您的 .gitattributes 配置,以确定您的更改文件是否应提交到仓库提供商的 Git LFS 存储。

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

注意:尚不支持 VS Code for the Web (vscode.dev)。

三向合并编辑器文档

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

3-way merge editor

不要错过解决合并冲突的 EXTREMELY Helpful Guide YouTube 视频,其中介绍了三向合并编辑器。

笔记本

保存时格式化

现在可以为笔记本启用保存时格式化。这会在保存时格式化整个笔记本。您可以通过将 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 的 Switch Case 自动补全

VS Code 现在可以帮助在 JavaScript 或 TypeScript 中为字面量类型构建 Switch 语句

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

VS Code for the Web

.gitignore 支持

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

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

远程开发

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

开发容器允许您将容器用作功能齐全的开发环境。开发容器规范旨在丰富现有格式,使其包含常见的开发设置、工具和配置,同时仍提供简化的、非编排的单容器选项。您可以在The Changelog 播客的第 529 集中了解有关开发容器和规范的更多信息。

其他远程开发亮点包括:

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

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

扩展

扩展安装不因签名验证失败而受阻

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

对扩展的贡献

Python

移动符号重构

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

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

从依赖文件创建环境

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

A pyproject.toml file open with dependencies listed, and a Create Environment button displayed on the bottom right corner for the editor

针对扩展作者的已定稿环境 API

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

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

Jupyter

Python 环境的内核选择器改进

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

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

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

Notebook kernel picker with ability to select empty conda environments

GitHub 拉取请求和问题

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

  • 拉取请求可以在 vscode.dev 的拉取请求视图中打开。
  • 创建拉取请求视图中新增了一个设置,用于检查自动合并选项:githubPullRequests.setAutoMerge

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

GitHub Copilot

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

GitHub Copilot extension

我们很高兴地宣布在 VS Code 中进行更深层次的 Copilot 集成预览。通过使用 GitHub Copilot Chat 扩展,您将能够试用新功能,例如:

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

您可以要求 Copilot 查找错误、解释复杂代码、创建测试,甚至提出关于 VS Code 的问题。

Copilot chat example asking how to change VS Code colors

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

预览功能

笔记本输出搜索支持

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

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

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

扩展创作

即将进行的 Electron 22 更新可能需要更改原生模块

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

我们计划提供一个自定义内存分配器,以便未更新的原生模块仍然可以继续工作,但仍然建议您检查已分配的外部内存的使用情况。请遵循 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

源代码管理输入中的行内补全

源代码管理输入框现在支持行内补全

The inline suggestions extension sample running in the Source Control input

源代码管理输入框的文档语言标识符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 中留下反馈。

笔记本生命周期事件: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 版本之一,请查看我们的常见问题解答以获取更多信息。

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 的贡献