– 代理会话日,2月19日

2023年5月 (版本 1.79)

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

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

下载:Windows: x64 Arm64 | Mac: Universal 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 - 在 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 文件夹),则将其标记为只读可以避免意外更改。

针对此用例,有新的设置可以将文件路径标记为只读,在资源管理器和文本和 Notebook 编辑器中

  • files.readonlyInclude - 匹配时使文件变为只读的路径或 glob 模式。
  • files.readonlyExclude- 匹配 files.readonlyInclude 时跳过文件变为只读的路径或 glob 模式。
  • files.readonlyFromPermissions - 是否应将磁盘上没有写入权限的文件设为只读。

根据设置规则,如果路径被视为只读,则无法从资源管理器对其进行修改(例如删除),并且文本或 Notebook 编辑器是只读的。

对于更即兴地切换只读模式,有新的命令可以更改当前会话中的模式,从而覆盖您的设置配置

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

Windows UNC 主机允许列表改进

作为 重要的安全修复 的一部分,VS Code 引入了 UNC 主机的允许列表。在本里程碑中,我们解决了 Windows 用户在使用 UNC 路径进行日常 VS Code 工作时报告的许多可用性问题。

对话框改进

启动时允许 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 时,或者当您在同一存储库的不同计算机之间切换时。

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

编辑器

粘贴为

将文件粘贴到文本编辑器时,可能有多种插入方式。您可能需要指向文件的绝对路径。您可能需要相对于当前工作区的路径。或者您可能需要特定于当前编辑器语言的内容,例如将 Markdown 链接插入到粘贴到 Markdown 中的文件。

VS Code 的新“粘贴为”功能让您控制粘贴内容的插入方式。

粘贴后,如果还有其他插入粘贴内容的方式,VS Code 现在会显示一个小的“粘贴为”控件。您可以单击它或使用 ⌘. (Windows, Linux Ctrl+.) 键盘快捷键打开“粘贴为”控件。只要您开始键入或将光标移出插入的文本,粘贴选择器就会消失。您还可以使用 "editor.pasteAs.showPasteSelector": "never" 完全禁用下拉选择器控件。

例如,当您将内容粘贴到 Notebook 的 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 53, SGR 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

Notebook

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

使用新的笔记本搜索切换,您还可以过滤您想要在其中搜索的单元格内容类型。

改进的单元格输出交互

添加了新的上下文键 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 文档的 glob 映射到图像目标。图像目标也可以使用一些简单的变量。有关可用变量的信息,请参阅 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 文档中时,VS Code 现在会插入一个 <audio> 元素。

带有行 (JSONL) 文件的 JSON 的语法高亮显示

带有行 (JSONL) 的 JSON 描述了由换行符分隔的一系列 JSON 对象。如果使用文件扩展名 jsonl,VS Code 将提供语法高亮显示。

远程开发

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

亮点包括:

  • 在当前或新的 VS Code 窗口中打开新的远程连接(通过远程隧道,到 Dev Container)。
  • 更轻松的工作流程,使转发的端口公开。
  • 初步支持从 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”。在这种模式下,更改将直接应用于文档,并使用嵌入式差异视图显示。让我们看下面的例子

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

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

笔记本改进

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

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

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

GitHub 拉取请求和 Issues 集成

安装并启用 GitHub Pull Requests and Issues 扩展,并在查看评审线程时,现在可以使用 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 提供的回复可能与主题无关或不正确。您可以再次提出问题,但从会话的聊天记录中删除错误的回复也可能有助于使对话保持在正轨上。此外,每个聊天请求可以包含的上下文量有限,因此删除冗长且不佳的回复可能有助于节省您的上下文预算,以获取更有用的信息。

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

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

聊天会话历史记录

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

将聊天会话导出到 JSON 文件

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

代码块导航和键绑定

我们添加了一些命令和键绑定,使您更容易处理聊天回复中的代码块。Chat: Next Codeblock (⌥⌘PageDown (Windows, Linux Ctrl+Alt+PageDown)) 和 Chat: Previous Codeblock (⌥⌘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 文件

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 后重新打开 Notebook 时也是如此。

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

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

Resuming notebook cell execution after closing and reopening VS Code

GitHub 拉取请求和议题

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

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

查看扩展的 0.66.0 版本 的 changelog,以了解其他亮点。

预览功能

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 Repositories 扩展打开的 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 团队一直在研究如何在 VS Code for the Web 中运行通用的 WebAssembly。 如果你对这种方法感兴趣并想了解更多信息,请查看最近的 VS Code 和 WebAssembly 博客文章。

扩展创作

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

当使用 vscode.fs API 处理文件时(你应该这样做!),对本地于扩展宿主的文件进行的操作现在将更快地解析。

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

更严格的状态栏 API

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

任务

任务演示选项以 在任务完成时关闭终端 已完成。

提议的 API

每个里程碑都会带来新的提议 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
});

Share provider

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

Share provider 结果当前显示为顶级 共享... 命令面板操作,以及如果你选择加入 "workbench.experimental.share.enabled": true"window.commandCenter": true命令中心 附近的新图标。

你可以在 API 提案 issue #176316 中提供反馈。

静态状态栏项目

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

workspace.save 和 workspace.saveAs

保存编辑器 API 提案 允许扩展触发保存编辑器的流程,无论是保存到其资源还是要求用户提供资源。

所有保存方法都将返回生成的 Uriundefined(如果操作被取消)。 无标题文件将始终要求用户提供目标,除非已经关联了路径。

Authentication authGetSessions 提案 API

随着我们越来越接近拥有 多帐户 GitHub 支持,我们有一个新的提案身份验证 API,允许你的扩展获取特定作用域集可访问的所有会话。 这些 API 添加的提案 有几点需要说明

  • 引入 vscode.authentication.getSessions 以获取你的扩展可以访问的每个帐户的会话。 如果你想请求其他帐户,请使用 { createIfNone: true, clearSessionPreference: true } 来要求用户选择帐户。
  • forceNewSession 属性现在可以接收一个 { sessionToRecreate: session } 对象,以便消耗扩展可以指定他们想要重创建的会话。
  • createSession 函数,Auth Provider 实现将获得传入要重创建的会话(如果 forceNewSession 的值为 true,则使用扩展的会话偏好设置)。

仍然需要更多的工作才能使它准备好在 GitHub 身份验证扩展中采用,所以如果你感兴趣,你可以关注并 在跟踪此提案的 issue 中提供反馈

窗口活动 API

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

这通过将新的 active 布尔值添加到现有的 WindowState 类型来实现。

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 中建立的每月里程碑是所有其他创建和维护的里程碑的基础。

VS Code 在 Microsoft Build 上

如果你没有机会观看 Microsoft Build 2023 的直播,你可以在 Microsoft Developer YouTube 频道上了解关键主题演讲和会话。

对 VS Code 用户来说特别感兴趣的一些会话包括

值得注意的修复

  • 165933 [emmet] 2023 年的 http-equiv="X-UA-Compatible"
  • 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 的贡献

© . This site is unofficial and not affiliated with Microsoft.