在 VS Code 中试用

2023 年 5 月 (版本 1.79)

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

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

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


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

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

Insiders 版本:想尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新发布后立即体验。

辅助功能

详细程度设置

新增了其他 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 用户在使用 UNC 路径在 VS Code 中日常工作时报告的许多可用性问题。

对话框改进

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

Windows UNC allow dialog

此外,点击了解更多按钮不再关闭对话框。

新增 security.restrictUNCAccess 设置

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

新增标签页大小设置选项 fixed

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 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 status 使用相似度索引(相对于文件大小的添加/删除数量)来确定添加/删除对是否被视为重命名。您现在可以使用 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 图像链接。如果您在 macOS 上按住 Ctrl 键进行截图并复制到剪贴板,这同样有效。

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

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.copyFiles.enabled": false

Markdown 文件中 HTML 路径的 IntelliSense

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

验证链接的文件是否存在于工作区中。

在 Markdown 中插入音频

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

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

远程开发

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

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

  • 主要亮点包括
  • 在当前或新的 VS Code 窗口中打开新的远程连接(通过远程隧道连接到开发容器)。
  • 使转发的端口公开的更简便工作流程。

初步支持从 VS Code Web 版 (vscode.dev) 连接到 WSL。

对扩展的贡献

GitHub Copilot

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

在 Stable VS Code 中使用 Copilot Chat

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

编辑器聊天

  • 我们改进了编辑器聊天功能,最值得注意的是,我们已将其默认模式更改为“livePreview”。在此模式下,更改会直接应用到文档并以嵌入式差异视图显示。请看下面的示例
  • IUserFriendlyStatusItemEntry 类型中新增了一个属性,并且
  • Copilot 相应地更新了 isUserFriendlyStatusItemEntry 检查。
  • 回复通过嵌入式差异视图在编辑器中显示。其右侧可编辑,并由 VS Code 的语言扩展进行检查。

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

这让您可以发现回复中的错误(下方 isMarkdownString 函数不存在),并在接受建议之前修复它。

笔记本改进

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

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

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

GitHub 拉取请求和问题集成

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

实验性快速问题体验

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

"chat.experimental.quickQuestion.enable": true

在此迭代中,我们实验了在不离开上下文的情况下使用聊天功能询问快速编程问题。如果您可以使用聊天体验,可以通过以下设置启用此功能

  • "github.copilot.experimental.quickChat": true
  • 功能概览
  • 向 Copilot 询问快速问题。

使用 ⇧⌥⌘L (Windows, Linux Ctrl+Shift+Alt+L) 切换体验(状态会记忆 30 秒,因此您可以轻松显示、隐藏和再次显示)。

在聊天视图中继续长篇聊天的在聊天中打开按钮。

A chat request with X icon

删除聊天条目

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

为什么您可能想这样做?有时,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 的介绍特定语言的使用方法以及关于开发时有效提示的指南。

Python

在专用终端中运行 Python 文件

Options under the run button menu

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

本月,我们开始以实验的方式推出测试重写功能。此次重写重新设计了扩展中 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 Pull Requests and Issues 扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和议题。亮点包括

  • 两个用于查看已检出 PR 的差异的新操作:将 Base 与拉取请求 Head 进行比较(只读)将拉取请求 Head 与本地进行比较
  • 新的设置 "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 Repositories 扩展打开的 GitHub 仓库。

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

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

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

终端中的图像

现在实验性地支持在终端中显示图像。终端中的图像通常通过将图像像素数据编码为文本,然后通过特殊的转义序列写入终端来工作。当前支持的协议是 sixeliTerm 首创的行内图像协议

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

"terminal.integrated.experimentalImageSupport": true

启用后,要测试此功能,您可以从 libsixel 仓库下载并使用 cat 命令查看 .six 示例文件

Running cat with a sixel file will print an image

或者对 png、gif 或 jpg 文件使用 imgcat python 包imgcat 脚本

Running imgcat with a png file will print the image

此功能的当前限制包括

支持 TypeScript 5.2

此更新包括对即将发布的 TypeScript 5.2 版本的支持。查看 TypeScript 5.2 迭代计划,了解 TypeScript 团队目前正在开发的内容的更多详细信息。即将推出的一些令人兴奋的工具亮点包括

  • 新的内联常量重构。
  • 一个新的移动到文件重构,可让您将符号移动到现有文件中。

要开始使用 TypeScript 5.2 每夜构建版本,请安装 TypeScript Nightly 扩展。

JavaScript 和 TypeScript 的移动到文件重构

TypeScript 5.2 每夜构建版本中的移动到文件重构允许您将类、函数或常量移动到现有文件中。这还会自动更新对该符号的所有引用,并根据需要更新导入。

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

或者,您可以使用选择现有文件...通过普通文件选择器选择文件,或使用输入新的文件路径...指定要创建的新文件。

此功能仍在积极开发中,欢迎试用并分享您的反馈!

VS Code Web 中的 WebAssembly

为了向 vscode.dev 添加更多编程语言支持,VS Code 团队一直在研究如何在 VS Code for the Web 中运行通用 WebAssembly。如果您对此方法感兴趣并想了解更多信息,请查阅最近的 VS Code and 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

此提议添加了可以提供给 EnvironmentVariableMutators 的选项,允许您精确指定环境变量更改何时应用,可以在进程创建时应用,也可以在 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 } 对象,以便使用该 API 的扩展可以指定他们希望重新创建的精确会话。
  • Auth Provider 实现的 createSession 函数现在将传入要重新创建的会话(如果 forceNewSession 的值为 true,则使用扩展的会话偏好设置)。

要使此功能准备好在 GitHub Authentication 扩展中采用,还需要做更多工作,因此如果您感兴趣,可以关注并在跟踪此提议的议题中提供反馈。

窗口活动 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 中建立的每月里程碑将作为创建和维护所有其他里程碑的基础。

Microsoft Build 大会上的 VS Code

如果您错过了 Microsoft Build 2023 的直播,可以在 Microsoft Developer YouTube 频道上观看主题演讲和会议回放。

VS Code 用户特别感兴趣的一些会议包括

重要修复

  • 165933 [emmet] http-equiv="X-UA-Compatible" in 2023
  • 181889 treeView.reveal expand: 3 仅展开第一个第 3 级文件夹

感谢

最后,但同样重要的是,向 VS Code 的贡献者致以衷心的感谢

议题跟踪

对我们的议题跟踪的贡献

拉取请求

vscode 的贡献

vscode-css-languageservice 的贡献

vscode-js-debug 的贡献

vscode-pull-request-github 的贡献

monaco-editor 的贡献