现已推出!阅读 10 月份的新功能和修复。

2023 年 5 月(版本 1.79)

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

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

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


欢迎使用 Visual Studio Code 2023 年 5 月版。此版本包含许多更新,我们希望您会喜欢,以下是一些主要亮点:

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

内部人员:想要尽快试用新功能?您可以下载每日 内部人员 构建,并在新功能发布后立即试用。

辅助功能

详细程度设置

新增了accessibility.verbosity 设置,用于告知屏幕阅读器用户如何在他们获得焦点时与功能进行交互。

对于GitHub Copilot,提供了一些提示,描述了如何访问 Copilot 聊天视图和编辑器代码聊天中的辅助功能帮助菜单,方法是:

  • accessibility.verbosity.panelChat
  • accessibility.verbosity.inlineChat

这些帮助菜单提供有关预期内容、如何从输入框导航到其他元素等的更多信息。

其他新的verbosity 设置提供了针对特定 VS Code UI 的信息

  • accessibility.verbosity.keybindingsEditor - 当处于键盘快捷键编辑器中时。
  • accessibility.verbosity.notebook - 当处于笔记本中时。

accessibility.verbosity 设置默认情况下处于启用状态(设置为“true”),但您可以单独将其静音。

设置编辑器

macOS 上的 VoiceOver 现在会在设置编辑器中读取枚举设置选项的描述。尝试使用枚举设置,例如files.autoSaveeditor.accessibilitySupport

onFocusChange option description of files.autoSave setting being displayed by VoiceOver's high-contrast textbox on macOS

工作台

只读模式

在某些开发场景中,明确将工作区中的某些文件夹或文件标记为只读可能很有帮助。例如,如果文件夹或文件内容由另一个进程管理(例如,由 Node.js 包管理器管理的node_modules 文件夹),将它们标记为只读可以避免意外更改。

对于这种情况,新增了一些设置,用于在资源管理器以及文本和笔记本编辑器中将文件路径标记为只读

  • files.readonlyInclude - 与其匹配的路径或 glob 模式,将文件设为只读。
  • files.readonlyExclude- 当路径与files.readonlyInclude 匹配时,将跳过这些路径或 glob 模式,不会将文件设为只读。
  • files.readonlyFromPermissions - 磁盘上没有写权限的文件是否应设为只读。

根据设置规则,如果路径被认为是只读的,则您无法从资源管理器对其进行修改(例如,删除它),文本或笔记本编辑器也处于只读状态。

为了更方便地切换只读模式,新增了一些命令,用于仅针对当前会话更改模式,覆盖您的设置配置

  • 在会话中设置活动编辑器为只读 - 将活动编辑器标记为只读。
  • 在会话中设置活动编辑器为可写 - 将活动编辑器标记为可写。
  • 在会话中切换活动编辑器只读 - 在只读和可写之间切换。
  • 在会话中重置活动编辑器只读 - 重置会话状态。

Windows UNC 主机允许列表改进

作为重要安全修复的一部分,VS Code 为 UNC 主机引入了允许列表。在此版本中,我们解决了 Windows 用户在日常工作中使用 VS Code 时报告的许多可用性问题,这些问题与他们使用 UNC 路径有关。

对话框改进

允许在启动时使用 UNC 主机的确认对话框现在会更新security.allowedUNCHosts 设置,并在您选中复选框时添加主机。

Windows UNC allow dialog

此外,单击了解详情按钮不再关闭对话框。

新的 security.restrictUNCAccess 设置

新的设置security.restrictUNCAccess 允许您禁用 UNC 主机允许列表,并恢复到此安全修复之前的行为。我们强烈建议不要更改此设置,因为它会使您的系统再次容易受到信息泄露漏洞的影响。

新的选项卡大小设置已修复

workbench.editor.tabSizing 设置新增了一个fixed 选项,该选项使每个选项卡宽度相等。当空间不足时,选项卡会均匀缩小,直至达到最小宽度。新的设置workbench.editor.tabSizingFixedMaxWidth 设置选项卡的初始大小。

在此模式下,当您使用鼠标快速关闭选项卡时,选项卡的宽度保持稳定,以便通过单击同一位置来关闭每个选项卡。当您将鼠标从编辑器选项卡区域移开时,宽度会进行调整。

网络质量指示

当您连接到远程计算机时,VS Code 远程编辑功能的最佳体验需要良好的网络连接,并且延迟较低。在此版本中,我们更新了状态栏中的远程指示器,以便在延迟过高或网络连接似乎处于脱机状态时提供一些反馈。

高延迟(Web、桌面)

我们会定期测量与您连接到的远程的延迟。当达到某个阈值时,远程指示器会更新以反映这一点。

Slow network detection shown in the right of the Status bar

脱机检测(仅限 Web)

如果您使用 Web 浏览器连接到远程,并且突然断开互联网连接,则远程指示器会更新以反映这一点。

Web offline detection displaying "Network appears to be offline" message from the Status bar

继续在…上工作

继续在…上工作 功能允许您在相同仓库的不同 VS Code 开发环境之间存储和检索工作变更,例如,当您从本地 Git 仓库升级到 GitHub Codespace 时,或在处理相同仓库的不同机器之间切换时。

现在,即使 GitHub 仓库在一个环境中配置了 HTTP 远程,而在另一个环境中配置了 SSH 远程,您也可以在开发环境之间传输工作变更。此外,我们已经开始传输其他工作台状态,例如您的源代码管理视图状态首选项,以实现更无缝的过渡。

编辑器

粘贴为

将文件粘贴到文本编辑器中时,您可以通过多种方式插入它。您可能需要使用绝对路径指向文件。您可能需要使用相对于当前工作区的路径。您甚至可能需要根据当前编辑器的语言进行特定操作,例如,在粘贴到 Markdown 中时插入指向文件的 Markdown 链接。VS Code 的新“粘贴为”功能让您可以控制粘贴的内容的插入方式。

粘贴后,如果可以通过其他方式插入粘贴的内容,VS Code 现在会显示一个小型的“粘贴为”控件

您可以通过点击“粘贴为”控件或使用 ⌘. (Windows、Linux Ctrl+.) 键盘快捷键打开它。粘贴选择器会在您开始输入或将光标移出插入文本后立即消失。您也可以使用 "editor.pasteAs.showPasteSelector": "never" 完全禁用下拉选择器控件。

例如,当您将内容粘贴到笔记本中的 Markdown 单元格时,“粘贴为”控件允许您在以下选项之间切换

  • 将图像插入为附件
  • 插入 Markdown 图像引用
  • 插入相对路径(用于工作区中的文件)
  • 插入绝对路径

如果您希望在实际粘贴之前选择剪贴板中的内容应如何粘贴,则可以使用新的 **粘贴为...** 命令。这允许您选择内容的粘贴方式

Using the Paste As... command to select how content is pasted

快速建议和代码片段

快速建议意味着 VS Code 会在您键入时显示建议,而无需按下 ⌃Space (Windows、Linux Ctrl+Space)。此功能非常受欢迎,大约 90% 的建议会话都是通过键入开始的。大量的建议是通过 Tab(而不是 Enter 和键入接受字符)接受的。

当插入代码片段时,Tab 键用于在代码片段占位符之间导航。现在,当快速建议在插入代码片段时变为活动状态时,Tab 键可以接受补全 **或** 导航到下一个代码片段占位符。为了解决此冲突,存在 editor.suggest.snippetsPreventQuickSuggestions 设置,用于在插入代码片段时禁用快速建议。它默认设置为 true,并且只要此设置存在,我们就会收到关于它令人困惑的反馈。因此,我们决定将其默认值更改为 false,以便在代码片段占位符内键入将触发快速建议。

然后,您可以使用以下按键

  • 按下 Tab 键接受补全。
  • 按下 Escape 键隐藏快速建议。
  • 没有建议的 Tab 键将导航到下一个代码片段占位符。

终端

Fish Shell 的自动 Shell 集成

Shell 集成 及其增强的用户体验现在将自动为 Fish Shell 激活。您可能需要更新 Fish 才能使其正常工作。

Shell integration in fish enables several features

上划线支持

ECMA-48 中指定的上面划线转义序列(SGR 53SGR 55)现在在终端中得到支持。此序列最常见的用法是在终端底部的行上添加一条线,位于应用程序的“状态栏”上方。

The overline feature is similar to underline but will draw a line on top of the text

源代码管理

默认分支名称

从本里程碑开始,使用 VS Code 创建的所有新的 Git 存储库将 main 设置为其默认分支。如果您希望默认分支使用其他名称,可以使用 git.defaultBranchName 设置更改它。当该设置为空时,VS Code 将使用在 Git 中配置的默认分支名称。将文件夹发布到 GitHub 也将遵循在 GitHub 上配置的默认分支名称。

分支选择器与 vscode.dev 和 GitHub 的集成

您现在可以从 VS Code 桌面上的分支选择器中检出 vscode.dev 中的分支或在 GitHub.com 上打开它。

在下面的简短视频中,分支选择器下拉菜单中列出的每个分支在右侧都有按钮,可以 **在 GitHub 上打开** 或 **在 vscode.dev 上检出**。

相似度阈值

Git 状态 使用相似度索引(与文件大小相比的添加/删除数量)来确定添加/删除对是否被认为是重命名。您现在可以使用 git.similarityThreshold 设置配置相似度阈值,该设置接受 0100 之间的值。默认值为 50

笔记本

您现在可以从搜索控件中搜索打开的笔记本中的富文本内容。如果您的笔记本已打开,搜索控件将显示基于它在笔记本编辑器中显示方式的结果(而不是搜索原始源文件的內容)。这也允许在笔记本输入中替换文本。

使用新的笔记本搜索切换,您还可以筛选要搜索的单元格内容类型。

改进的单元格输出交互

添加了新的上下文键 notebookOutputInputFocused 来确定单元格输出内的文本框是否具有焦点,以便在输出具有焦点时可以安全地使用原始热键 a/b/j/k。将焦点放在输入框上可防止这些热键触发。

运行时格式化

笔记本现在可以在执行单元格时格式化单元格。这将触发使用 **运行单元格**、**运行全部**、**运行上方/下方** 以及组合的内核+运行命令。可以通过设置 "notebook.formatOnCellExecution": true 打开此功能。

保存时的代码操作

笔记本现在支持在保存时运行代码操作。代码操作可以在 notebook.codeActionsOnSave 设置下指定。扩展程序作者可以使用单元格级代码操作的标准类型定义提供程序,或者使用新的 notebook. 前缀定义管理整个笔记本的代码操作。您可以查看 clean-nb-imports-ext 示例扩展,了解扩展程序如何使用此新设置。

语言

TypeScript 5.1

VS Code 现在附带 TypeScript 5.1.3。此主要更新带来了新的 TypeScript 语言功能、更好的性能以及许多重要的改进和错误修复。您可以在 TypeScript 博客 上阅读有关 TypeScript 5.1 的信息。

JSX 标签的链接编辑

使用链接编辑,当您更改一个 JSX 开始标签时,VS Code 会自动更新对应的结束标签。这可以节省大量时间

该功能默认情况下处于关闭状态,但可以通过设置启用

"editor.linkedEditing": true

您也可以使用 **开始链接编辑** 命令显式启动链接编辑。

使用 F2 重命名匹配的 JSX 标签

当您在 JSX 标签上触发重命名时,VS Code 现在仅重命名匹配的标签,而不是尝试更新对该标签的所有引用

这需要 TypeScript 5.1+,并与 HTML 中的重命名方式相匹配。

您可以使用 javascript.preferences.renameMatchingJsxTagstypescript.preferences.renameMatchingJsxTags 禁用此行为。

JSDoc @param 补全

在编写 JSDoc 注释时,VS Code 现在会显示所有缺少的参数的建议

JS Doc @param completions in a TypeScript file

这可以帮助您快速填写文档。

在 JavaScript 文件中,@param 补全会创建参数类型描述的占位符

在 Markdown 中拖放或粘贴时将外部媒体文件复制到工作区

想要在 Markdown 文档中添加图像或视频?现在,您可以直接将文件拖放到 Markdown 中,而不是先手动将文件复制到工作区,然后再添加链接。如果该文件目前不属于工作区,VS Code 会自动将该文件复制到工作区并插入指向它的链接

这对于剪贴板中的图像数据也非常有用。例如,如果您使用 Windows 上的截图工具截取屏幕截图,您可以在 Markdown 文件中按下 **粘贴**,VS Code 会从剪贴板数据创建一个新的图像文件,并插入指向该新文件的 Markdown 图像链接。如果您 在截取屏幕截图时按住 Ctrl 键 将其复制到剪贴板,则这在 macOS 上也有效。

您还可以使用一些设置自定义此功能的行为

markdown.copyFiles.destination

markdown.copyFiles.destination 设置控制创建新媒体文件的位置。此设置将与当前 Markdown 文档匹配的通配符映射到图像目标。图像目标还可以使用一些简单的变量。有关可用变量的信息,请参阅 markdown.copyFiles.destination 设置说明。

例如,如果我们希望工作区中 /docs 下的每个 Markdown 文件将新的媒体文件放入特定于当前文件的 images 目录中,我们可以编写

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName}/"
}

现在,当将新文件粘贴到 /docs/api/readme.md 中时,图像文件将创建在 /docs/api/images/readme/image.png 中。

您甚至可以使用简单的正则表达式来转换 与代码片段类似的方式 中的变量。例如,此转换在创建媒体文件时仅使用文档文件名的第一个字母

"markdown.copyFiles.destination": {
  "/docs/**/*": "images/${documentBaseName/(.).*/$1/}/"
}

当将新文件粘贴到 /docs/api/readme.md 中时,图像现在将在 /docs/api/images/r/image.png 下创建。

markdown.copyFiles.overwriteBehavior

markdown.copyFiles.overwriteBehavior 设置控制新创建的媒体文件是否覆盖现有文件。

默认情况下,VS Code 永远不会覆盖现有文件。相反,如果您有一个名为 image.png 的文件,并且尝试将其粘贴到工作区中已存在 image.png 的 Markdown 文档中,VS Code 将改为创建一个名为 image-1.png 的新文件。如果您随后尝试粘贴另一个名为 image.png 的文件,它将改为创建为 image-2.png

如果您希望现有文件被新文件覆盖,请设置 "markdown.copyFiles.overwriteBehavior": "overwrite"。现在 VS Code 将始终使用原始文件名,覆盖该路径下任何现有的文件。

禁用将文件复制到工作区

VS Code 仅在文件尚未成为工作区的一部分时才会尝试将文件复制到工作区。此外,我们目前仅将媒体文件(图像、视频、音频)复制到工作区。

但是,如果您发现此新行为过于侵入,可以通过设置来禁用拖放和粘贴

"markdown.editor.drop.copyIntoWorkspace": "never"
"markdown.editor.filePaste.copyIntoWorkspace": "never"

Markdown 文件中 HTML 路径的 IntelliSense

许多 Markdown 方言允许在 Markdown 文档中使用原始 HTML 标签。在此更新中,我们已将 VS Code 的大多数 Markdown IntelliSense 功能扩展到这些 HTML 标签中使用的文件路径。这包括对以下内容的支持

Finding all references to an image file used in an HTML tag

在 Markdown 中插入音频

当您将音频文件拖放到 Markdown 文档中或复制粘贴到 Markdown 文档中时,VS Code 现在会插入一个 <audio> 元素。

JSON with Lines (JSONL) 文件的语法高亮

JSON with Lines 描述了一个由换行符分隔的 JSON 对象序列。如果使用文件扩展名 jsonl,VS Code 将提供语法高亮。

远程开发

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

亮点包括

  • 在当前或新的 VS Code 窗口中打开新的远程连接(通过远程隧道,到开发容器)。
  • 更轻松的工作流程,可以将转发端口设置为公开。
  • 初步支持从 VS Code for the Web (vscode.dev) 连接到 WSL。

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

扩展贡献

GitHub Copilot

在稳定版 VS Code 中使用 Copilot Chat

以前,您必须使用 VS Code Insiders 才能使用 Copilot Chat。从 VS Code 1.79 开始,您也可以在稳定版 VS Code 中使用 Copilot Chat。您仍然需要安装 GitHub Copilot Chat 扩展。

编辑器聊天

我们改进了编辑器聊天,最显著的是我们将默认模式更改为 "livePreview"。在此模式下,更改会直接应用于文档并显示在嵌入式 diff 视图中。让我们看下面的例子

  • 一个新属性被添加到 IUserFriendlyStatusItemEntry 类型中,并且
  • Copilot 据此更新了 isUserFriendlyStatusItemEntry 检查。
  • 回复使用嵌入式 diff 视图显示在编辑器中。其右侧是可编辑的,并由 VS Code 的语言扩展检查。
  • 这使您能够发现回复中的错误(在 isMarkdownString 函数下方不存在),并且您可以在接受建议之前修复它。

Copilot inline chat suggestion with proposed code change displayed as a live preview

笔记本改进

本月我们改进了笔记本编辑器中的聊天体验。在笔记本文档中使用 Copilot 时,Copilot 可以使用笔记本上下文提供更相关的建议。例如,代码建议会使用先前单元格中定义的变量或模块,而无需重新创建或重新导入它们。

在运行笔记本单元格时,Copilot 现在还提供了针对单元格执行失败的建议。您可以通过选择单元格状态栏上的 "使用 Copilot 修复" 操作来显示这些建议。

Copilot 建议也会在单元格执行时自动接受,因此您无需手动接受它们。

GitHub 拉取请求和问题集成

GitHub 拉取请求和问题 扩展安装并启用,并且您正在查看代码审查线程时,现在可以使用 Copilot 直接应用代码审查评论。您可以在评论菜单中通过 "使用 AI 应用建议" 按钮执行此操作。

实验性的快速提问体验

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

在本迭代中,我们尝试使用聊天来提出快速编程问题,而无需离开上下文。如果您有权访问聊天体验,则可以使用以下设置启用此功能

"chat.experimental.quickQuestion.enable": true

功能概述

  • 向 Copilot 提问。
  • 使用 ⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L) 切换体验(状态会保存 30 秒,因此您可以轻松地显示、隐藏和再次显示)。
  • 一个 "在聊天中打开" 按钮,用于将对话继续到聊天视图中的长篇聊天。

删除聊天条目

您现在可以通过单击聊天请求中的 X 图标来删除聊天请求/响应对。

A chat request with X icon

为什么要这样做?有时,Copilot 会提供一个与主题无关或不正确的回复。您可以重新提出问题,但从会话的聊天历史记录中删除错误的回复也有助于使对话保持在正轨上。每个聊天请求可以包含的上下文数量也有限制,因此删除较长的错误响应可能有助于节省上下文预算,以便用于更有效的信息。

将聊天会话从侧边栏移动到编辑器

以前可以通过运行 "聊天:打开编辑器" 命令在编辑器中打开聊天会话,但现在也可以在侧边栏和编辑器之间来回移动聊天会话。您可以在聊天视图标题或编辑器标题菜单中的 "..." 菜单下找到 "在编辑器中打开会话" 和 "在侧边栏中打开会话" 命令。

聊天会话历史记录

您的聊天会话现在已保存到历史记录中,您可以通过选择聊天视图标题菜单中的 "显示历史记录" 按钮来浏览这些历史记录。您可以选择历史记录条目以将该对话加载到聊天编辑器中,然后无缝地继续您之前的内容。您可以通过单击每行上的 X 按钮从历史记录中删除会话。

将聊天会话导出到 JSON 文件

我们添加了一个命令 "聊天:导出会话",它将当前聚焦的聊天会话导出到 JSON 文件中。然后,您可以运行 "聊天:导入会话" 命令来导入此会话并继续对话。您可以将此文件签入到您的代码库中,与他人共享,或者只是保存您的对话以备将来参考。请注意,当您在导入的聊天会话中继续对话时,除非您再次导出会话,否则这些新消息不会保存。

代码块导航和快捷键

我们添加了一些命令和快捷键,使在聊天回复中处理代码块变得更加容易。 "聊天:下一个代码块" (⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown)) 和 "聊天:上一个代码块" (⌥⌘PageUp (Windows, Linux Ctrl+Alt+PageUp)) 将光标移动到当前聊天回复中的下一个或上一个代码块。当代码块处于焦点状态时,代码块工具栏中的命令也可以从命令面板中调用,或者您可以为它们分配快捷键。 "在终端中运行" 默认情况下有一个快捷键 ⌃⌥Enter (Windows, Linux Ctrl+Alt+Enter)。现在,当您在代码块中按下普通复制快捷键且没有选择任何内容时,"复制" 命令也会运行。

我们还添加了快捷键来聚焦聊天窗口 (⌃⌘I (Windows, Linux Ctrl+Alt+I)) 和清除聊天会话 ()。

Copilot YouTube 播放列表

要详细了解 GitHub Copilot 以及技巧和最佳实践,请查看 YouTube 上的 VS Code Copilot 系列。在那里,您会找到 GitHub Copilot 简介特定语言 使用方法以及 在使用 Copilot 进行开发时进行有效提示 的指导。

Python

在专用终端中运行 Python 文件

The Python 扩展现在将为使用编辑器顶部的 "运行" 按钮或 "Python:在终端中运行 Python 文件" 命令运行的每个文件创建一个新终端,并且每次重新运行时都会继续使用此文件的 "专用" 终端。

如果您希望在单独的终端中运行同一个文件,则可以选择 "运行" 按钮菜单下的 "Python:在专用终端中运行 Python 文件"。

Options under the run button menu

测试发现和运行重写

本月,我们开始以实验的方式推出我们的测试重写。此重写重新设计了扩展中针对 unittest 和 pytest 的测试发现和执行背后的体系结构。虽然它没有提供任何向用户公开的额外功能,但它减少了错误行为,并为未来打开了新的功能机会。重写是在实验 pythonTestAdapter 后面推出的,您可以在 settings.json 中使用 python.experiments.optInto 选择加入或退出。最终,我们计划删除此设置并采用此新体系结构。如果您对该实验或重写有任何意见或建议,可以在 vscode-python 代码库中分享。

使用 Pylance 配置索引限制

有一个新的 Pylance 设置允许您配置索引的文件数量限制:"python.analysis.userFileIndexingLimit",默认设置为 2000。当处理非常大的项目并且您愿意牺牲性能以获得增强的 IntelliSense 体验时,此设置可能会有所帮助。

Jupyter

恢复针对远程 Jupyter 内核执行单元格

Jupyter 扩展现在支持恢复针对 远程 Jupyter 内核 执行单元格,如果单元格仍在忙于执行,即使在关闭 VS Code 后重新打开笔记本也是如此。

例如,假设您针对远程 Jupyter 内核执行一段长时间运行的代码,例如模型训练。这可能需要几分钟或更长时间,因此您可能决定在此期间关闭 VS Code。几分钟后,VS Code 重新启动并打开同一个笔记本,如果单元格仍在忙于执行,则此状态将反映在笔记本单元格中,并且任何新的输出将显示在单元格输出中。

另一方面,如果单元格在 VS Code 关闭时已完成执行,则在此期间生成的输出将不会保存在笔记本中。以这种方式恢复执行并显示新的输出仅限于简单的输出,例如纯文本、HTML、图像、图像等。不支持恢复小部件和其他此类复杂输出的状态。

Resuming notebook cell execution after closing and reopening VS Code

GitHub 拉取请求和问题

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

  • 用于查看已检出 PR 的差异的两个新操作:将基线与拉取请求头部进行比较(只读)将拉取请求头部与本地进行比较
  • 新的设置 "githubPullRequests.pullPullRequestBranchBeforeCheckout" 可用于在再次检出同一分支时关闭拉取先前已检出的 PR 分支。

查看该扩展的 0.66.0 版本的变更日志 以了解其他亮点。

预览功能

insiders.vscode.dev 上的项目级 JS/TS IntelliSense

vscode.dev 是 VS Code 的轻量级版本,完全在您的浏览器中运行。在这个版本中,我们显著丰富了 vscode.dev 的 JavaScript 和 TypeScript 支持,使其能够分析工作区中的所有文件,而不是局限于当前打开的文件。这极大地改善了代码导航,让您可以转到定义查找所有引用符号。它还通过确保来自您的 tsconfig.json / jsconfig.json 的设置得到遵守来改善 IntelliSense。我们现在甚至支持在编写代码时自动导入。

在下面的图像中,引用视图显示了工作区中 ITextDocument 的所有引用。

Find All References in a TypeScript project on vscode.dev

这些新的 IntelliSense 功能适用于从本地机器打开的文件夹以及使用 vscode.dev 的内置 GitHub 存储库 扩展打开的 GitHub 存储库。

请记住,vscode.dev 上的 JS/TS IntelliSense 仍然存在一些限制

  • 目前不支持第三方库的 IntelliSense。
  • 目前不支持 JavaScript 项目的自动类型获取
  • 由于上述限制,vscode.dev 上的所有类型错误都被禁用。
  • 项目级 IntelliSense 目前仅在 vscode.dev 的 Insiders 版本:insiders.vscode.dev 上启用。此功能目前在 github.dev 上被禁用。

我们计划在未来解决这些限制,并很高兴继续丰富我们在网络上的 JavaScript 和 TypeScript 支持!

终端中的图像

现在对终端中的图像有实验性支持。终端中的图像通常通过将图像像素数据编码为文本,然后通过特殊的转义序列写入终端来实现。目前支持的协议是 sixeliTerm 开创的内联图像协议

通过设置以下内容来启用此功能

"terminal.integrated.experimentalImageSupport": true

启用后,要对其进行测试,您可以从 libsixel 存储库 下载并 cat 一个 .six 示例文件

Running cat with a sixel file will print an image

或者使用 imgcat python 包imgcat 脚本 与 png、gif 或 jpg 文件一起使用

Running imgcat with a png file will print the image

此功能的当前限制是

TypeScript 5.2 支持

此更新包括对即将发布的 TypeScript 5.2 版本的支持。查看 TypeScript 5.2 版本迭代计划 以了解有关 TypeScript 团队当前正在进行的工作的更多详细信息。一些激动人心的即将推出的工具亮点包括

  • 一个新的内联常量重构。
  • 一个新的 移至文件 重构,它允许您将符号移至现有文件。

要开始使用 TypeScript 5.2 nightly 版本,请安装 TypeScript Nightly 扩展。

JavaScript 和 TypeScript 的移至文件重构

TypeScript 5.2 nightly 版本中的移至文件重构允许您将类、函数或常量移至现有文件。这也会自动更新对该符号的所有引用,并在需要时更新导入。

当您选择移至文件时,VS Code 会向您显示当前 TypeScript 或 JavaScript 项目中所有文件的列表。您可以开始键入以快速找到您想要的那个文件。

或者,您可以使用选择现有文件... 使用常规文件选择器选择一个文件,或者使用输入新的文件路径... 指定应该创建的新文件。

此功能仍在积极开发中,所以请试用一下并分享您的反馈!

VS Code for the Web 中的 WebAssembly

为了向 vscode.dev 添加更多编程语言支持,VS Code 团队一直在研究如何在 Web 版 VS Code 中运行通用 WebAssembly。如果您对这种方法感兴趣并想了解更多信息,请查看最近的 VS Code 和 WebAssemblies 博客文章。

扩展编写

改进的 vscode.fs 针对本地文件的性能

当您使用 vscode.fs API 处理文件(您应该使用!)时,针对扩展主机本地文件的操作现在将得到更快地解决。

以前,扩展主机会将这些操作委托给 VS Code 客户端执行,但现在它们直接在扩展主机中执行,从而节省了往返时间。

更严格的状态栏 API

用于创建状态栏项目的 API createStatusBarItem 允许扩展传递标识符。此标识符用于控制隐藏和显示状态栏项目。该标识符对于扩展应该是唯一的,但直到现在还没有强制执行。在此版本中,我们对此进行了更严格的处理,现在由同一扩展使用相同标识符创建的状态栏项目将合并为一个。

任务

任务呈现选项已最终确定,该选项用于 在任务完成时关闭 终端。

建议的 API

每个里程碑都会带来新的 API 提案,扩展作者可以尝试使用它们。与往常一样,我们希望得到您的反馈。以下是如何尝试使用 API 提案的步骤

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

您无法发布使用 API 提案的扩展。在下一次发布中可能会有重大更改,我们永远不想破坏现有扩展。

EnvironmentVariableCollection.description

此提案允许为 EnvironmentVariableCollection 指定一个描述,该描述会显示在终端选项卡悬停中,解释更改究竟做了什么。

// Example of what the Git extension could use
context.environmentVariableCollection.description = 'Enables a Git authentication provider';

Environment variable collection descriptions are explained in a terminal tab's hover

EnvironmentVariableMutator.options

此提案添加了可以提供给 EnvironmentVariableMutator 的选项,允许您准确指定何时应用环境变量更改,是在进程创建时还是在 shell 集成脚本中(在 shell 初始化脚本运行之后)。

const collection = context.environmentVariableCollection;
// Apply only when the process is created
collection.replace('FOO', 'bar');
// Apply only during the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: false,
  applyAtShellIntegration: true
});
// Apply twice, during process creation and the shell integration script
collection.replace('FOO', 'bar', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

共享提供者

共享 API 提案 允许扩展提供在 VS Code 中共享资源的方式。

共享提供者结果目前会作为顶级的共享... 命令面板操作以及 命令中心 附近的新的图标显示,前提是您已使用 "workbench.experimental.share.enabled": true"window.commandCenter": true 选择加入。

您可以在 API 提案问题 #176316 中留下反馈。

静态状态栏项目

状态栏项目现在可以通过 package.json#contributes/statusBarItems 静态贡献。使用此贡献点,扩展可以延迟激活,并且仅在与状态栏项目交互时(例如,在命令上)激活。激活后,扩展可以通过 vscode.window.createStatusBarItem API 访问其静态状态栏项目。

workspace.save 和 workspace.saveAs

保存编辑器 API 提案 允许扩展触发将编辑器保存到其资源或通过要求用户提供资源来保存编辑器的流程。

所有保存方法都会返回生成的 Uri,如果操作被取消,则返回 undefined。未保存的文件将始终要求用户提供目标,除非已关联路径。

Authentication authGetSessions 提案 API

随着我们越来越接近支持多个 GitHub 账户,我们提出了一种新的身份验证 API,它可以让您的扩展获取特定范围内的所有可访问会话。 这些 API 添加的提案 有一些值得注意的地方。

  • 引入了 vscode.authentication.getSessions 来获取您的扩展可以访问的每个账户的会话。如果您想请求一个额外的账户,请使用 { createIfNone: true, clearSessionPreference: true } 来要求用户选择一个账户。
  • 现在,forceNewSession 属性可以接收 { sessionToRecreate: session } 对象,这样使用扩展的开发者就可以指定他们想要重新创建的特定会话。
  • 身份验证提供程序实现的 createSession 函数现在将传入要重新创建的会话(如果 forceNewSession 的值为 true,则使用扩展的会话首选项)。

要使此功能在 GitHub 身份验证扩展中得到采用,还需要进行更多工作。如果您有兴趣,可以继续关注并在跟踪此提案的问题中提供反馈

窗口活动 API

提供了一个新的 API 来通知扩展窗口是否处于活动状态或非活动状态。这可以用来释放或创建持久的资源或进程,这些资源或进程可以处于空闲状态以节省资源。

这是通过在现有的 WindowState 类型中添加一个新的 active 布尔值来实现的。

vscode.window.onDidChangeWindowState(state => {
  if (state.active && !longRunningProcess) {
    longRunningProcess = startLongRunningProcess();
  } else if (!state.active && longRunningProcess) {
    longRunningProcess.end();
    longRunningProcess = undefined;
  }
});

工程

所有用户启用 Electron 沙箱

我们很高兴地宣布,Electron 沙箱正在向所有用户推出。这项工作始于 2020 年初,现在终于结束。您可以参考将 VS Code 迁移到进程沙箱 博客文章以了解更多详细信息。

扩展主机重启参与

工作台中的一些操作会导致扩展主机重启,而不会重新加载当前窗口。例如,当您切换配置文件时,VS Code 会重启扩展主机以处理为该配置文件运行不同的扩展集。

但是,一些自定义和笔记本编辑器在切换配置文件后可能不再可用,因为该配置文件中没有安装必需的扩展。如果编辑器中有未保存的更改,这可能会导致数据丢失。作为解决方案,VS Code 中的组件现在可以参与扩展主机重启,并在扩展主机重启之前确保所有未保存的更改都被保存。

我们计划在下一个里程碑中进一步开发此体验,敬请期待!

Windows 8 和 8.1 支持已结束

如我们在v1.77 版本说明 中提到的,v1.79 是支持 Windows 8/Windows Server 2012 和 Windows 8.1/Windows Server 2012 R2 的最后一个版本。请参阅我们的常见问题解答 以获取更多信息。

里程碑自动化

我们在所有 GitHub 存储库中实现了里程碑自动复制。这意味着在 microsoft/vscode 中建立的每月里程碑将作为创建和维护的所有其他里程碑的基础。

微软 Build 上的 VS Code

如果您没有机会观看Microsoft Build 2023 直播,您可以在Microsoft Developer YouTube 频道上观看主题演讲和会议。

以下是 VS Code 用户特别感兴趣的一些会议:

值得注意的修复

  • 165933 [emmet] http-equiv="X-UA-Compatible" in 2023
  • 181889 treeView.reveal with expand: 3 only expands the first level 3 folder

感谢

最后,要特别感谢所有为 VS Code 做出贡献的人。

问题跟踪

对我们问题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-js-debug 的贡献

vscode-pull-request-github 的贡献

monaco-editor 的贡献