2023 年 1 月(1.75 版本)
更新 1.75.1:此更新修复了以下 问题。
下载:Windows:x64 Arm64 | Mac:Universal Intel silicon | Linux:deb rpm tarball Arm snap
欢迎阅读 2023 年 1 月版的 Visual Studio Code 发布说明。此版本包含许多我们希望您会喜欢的更新,以下是部分主要亮点:
- 配置文件 (Profiles) - 创建并共享配置文件,以配置扩展、设置、快捷键等。
- VS Marketplace 签名 - 已发布的扩展现在默认进行代码签名。
- 无障碍改进 - 终端屏幕阅读器模式,新的键盘快捷键。
- 更轻松的多视图调整大小 - 拖动布局边角可同时调整多个视图的大小。
- 树视图搜索历史记录 - 快速重新运行树视图中的先前搜索。
- 更好的终端链接检测 - 检测包含空格、括号、行和列格式的链接。
- 新的 Git 命令 - 在 VS Code 内暂存更改并删除远程标签。
- Dark+ 和 Light+ V2 主题 - 试用实验性颜色主题并告诉我们您的想法。
- Jupyter Notebook 主题 - 在 Web 上使用笔记本,如何管理 Jupyter 内核。
- VS Code 中的 AI 工具 - 了解由 GitHub Copilot 提供支持的 AI 补全功能。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新页面。
内测版:想尽快尝试新功能?您可以下载每晚的内测版构建,并尽快尝试最新的更新。
内务管理
在之前的发布说明中,团队报告了我们的清理工作,我们也希望在此进行同样的说明。
正如我们 2022 年 11 月所宣布的,我们将 12 月用于清理 GitHub 问题和拉取请求(请参阅我们的 问题清理指南)。在我们所有的仓库中,我们共减少了 3637 个开启的问题和拉取请求。不出所料,大部分清理工作发生在我们的前 5 个仓库中:microsoft/vscode (2520)、microsoft/vscode-jupyter (374)、microsoft/vscode-remote-release (278)、microsoft/vscode-python (220) 和 microsoft/vscode-pull-request-github (160)。
辅助功能
差异导航改进
转到下一个/上一个更改 现在具有音频提示,以指示某行是已插入、删除还是修改。此外,更改行会被选中,以便屏幕阅读器可以读取它。
终端无障碍模式
Terminal: Focus Accessible Buffer (⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2)) 命令允许屏幕阅读器通过键盘导航终端缓冲区。
终端无障碍帮助
与编辑器中的 Show Accessibility Help 命令类似,Terminal: Show Terminal Accessibility Help () 命令为屏幕阅读器用户提供重要信息。

工作区信任编辑器快捷键
为了提高 工作区信任 编辑器的键盘可访问性(可通过 Workspaces: Manage Workspace Trust 打开),您现在可以使用 Ctrl/Cmd+Enter 通过键盘切换当前工作区的信任状态,或使用 Ctrl/Cmd+Shift+Enter 切换父文件夹的信任状态。

改进了设置编辑器指示器的键盘导航
对于具有多个指示器的设置(例如“在其他位置修改”指示器和“默认值已更改”指示器),现在使用左右箭头键在指示器之间导航。此更改允许用户通过单次按 Tab 键跳出指示器。
配置文件
我们很高兴地宣布,配置文件 (Profiles) 功能现已在 VS Code 中正式可用。配置文件可以包含扩展、设置、键盘快捷键、UI 状态、任务和用户代码片段。您可以针对不同的开发场景自定义 VS Code,例如数据科学、文档编写,或针对多种编程语言(如 Python 或 Java)。如果您根据工作流程有不同的 VS Code 设置,例如“工作”或“演示”,也可以将其保存为不同的配置文件。您可以同时打开具有不同配置文件的多个工作区(文件夹)。
下图演示了一个打开的文件夹,其中应用了为工作设置定制的 Work 配置文件。

您还可以导出和导入配置文件,以便与同事、朋友或学生分享,帮助他们快速上手 VS Code。
以下视频演示了如何使用 GitHub Gist 导出配置文件以与他人共享。收到配置文件链接的用户可以在 VS Code for the Web 中预览共享配置文件并将其导入到本地 VS Code 实例中。

注意:配置文件目前在远程场景(如 GitHub Codespaces)中尚无法工作,但我们正在努力启用此功能。您可以在 issue #165247 中跟踪进度。
工作台
改进的多视图调整大小支持
您现在可以通过拖动视图的边角同时调整多个视图的大小。
改进的网格布局
如果编辑器已最小化,在调整整个工作台或侧边栏大小时,网格现在将保持该状态。在下面的短视频中,右侧最小化编辑器的宽度在整个编辑器区域展开时保持不变。
从“自定义布局”命令恢复默认值
使用自定义的 Customize Layout 命令(通过触发命令或使用自定义标题栏中的布局控件)时,您可以使用布局控件右上角的还原箭头按钮 Restore Defaults。

从面板管理面板对齐方式
您现在可以直接从面板上下文菜单调整面板对齐方式,就像调整面板位置一样。

简化了首选项菜单
我们简化了全局设置的 Preferences 菜单,并按更合乎逻辑的顺序和分组整理了选项。

树视图查找历史记录
树视图中的查找控件现在支持历史记录导航。您可以使用上下箭头键浏览之前的搜索历史。
树视图查找连续匹配
树视图查找控件现在除现有的“模糊”匹配外,还支持连续匹配。在下面的视频中,最初搜索 "src" 会匹配到 "resource"。当通过 Fuzzy Match 切换按钮禁用“模糊”匹配时,只有包含连续文本 "src" 的内容会被高亮显示。
列表按页滚动
一个新的设置 workbench.list.scrollByPage,允许您配置在直接点击滚动条时列表是否应按页滚动。
列表类型导航模式
新的 workbench.list.typeNavigationMode 设置允许您配置列表的类型导航模式。默认情况下(设置值为 automatic),输入时会在列表和树中进行导航。如果您希望仅在特定时间启用导航,可以将 typeNavigationMode 设置为 trigger,列表仅在运行 list.triggerTypeNavigation 命令后才会进入类型导航模式。
命令 list.triggerTypeNavigation 默认没有绑定快捷键,但您可以添加自己的。例如,如果您想在按下 / 键后进入类型导航模式,可以添加如下绑定:
{
"key": "/",
"command": "list.toggleKeyboardNavigation",
"when": "listFocus"
}
打开大文件的新确认提示
为了防止意外打开超大文件,特别是在可能因网络传输而产生实际成本的远程环境中,打开文件前会显示确认提示。该限制可通过新的 workbench.editorLargeFileConfirmation 设置进行修改,并根据打开本地文件与远程文件有不同的默认值。

文件监视器支持 files.watcherExclude glob 模式
files.watcherExclude 设置支持 glob 模式,用于文件监视器的强大排除规则。然而,文件监视使用的库此前并未原生支持 glob 模式。在本里程碑中,我们 贡献 了对排除项 glob 模式的支持,以实现更高效的资源使用,特别是在 Linux 上。
对于 Linux,如果您看到文件监视问题,请参考此 FAQ 条目 以获取更多信息。
键盘快捷键编辑器改进
显示贡献快捷键的扩展
键盘快捷键编辑器现在在 Source 列中显示贡献快捷键的扩展。您可以选择扩展名以打开该扩展的详细信息页面。

您还可以使用扩展上下文菜单中提供的 Extension Keyboard Shortcuts 操作搜索任何由扩展贡献的快捷键。

显示 when 子句属性的上下文键建议
键盘快捷键编辑器现在为 when 属性显示上下文键建议。您可以使用 Ctrl+Space 快捷键来触发建议。

搜索带有和弦 (chords) 的快捷键
键盘快捷键编辑器现在支持搜索带有和弦的快捷键。例如,"Ctrl+K" 也将显示所有以 Ctrl+K 为第一个和弦的快捷键。
配置 shell 环境解析超时的设置
一个新的设置 application.shellEnvironmentResolutionTimeout(仅限 macOS 和 Linux)允许您在需要时增加解析 shell 环境的超时时间。默认情况下,VS Code 最多等待 10 秒来解析环境,但在某些具有更复杂 shell 设置的情况下,这可能不够。
请参阅此 FAQ 条目 以获取有关 VS Code 如何解析 shell 环境的更多信息。
新的 VSCODE_RESOLVING_ENVIRONMENT 环境变量
当 VS Code 正在解析用户 shell 环境时,它现在会将一个新的环境变量 VSCODE_RESOLVING_ENVIRONMENT 设置为 1。这对于需要知道它们是否在解析 shell 环境的上下文中运行的用户脚本(例如在 .bashrc 中)非常有用。
更新后更容易关闭发布说明
您现在可以直接从发布说明编辑器中选择在每次更新后不再阅读发布说明。这将反映并更新 update.showReleaseNotes 设置。

编辑器
建议选择模式
有一个新的设置 (editor.suggest.selectionMode),允许您配置建议是在键入时自动选择,还是通过触发字符进行选择。
默认是始终选择最佳建议,以便按下 Enter 或 Tab 键即可插入。如果您不想预选建议,请将值设置为 never、whenQuickSuggestion 或 whenTriggerCharacter。使用这些设置值时,建议仍会显示但不会自动选中,您可以使用箭头键选择一个。
注意,此设置仅适用于自动建议,不适用于通过 Ctrl+Space 显式触发时显示的建议。
代码操作 (Code Action) 列表现在可滚动
一些扩展会生成长代码操作列表。如果空间不足以渲染所有代码操作,您现在可以滚动浏览列表。
颜色装饰限制
编辑器中显示的颜色装饰数量限制为 500 个。这是为了防止打开包含大量颜色的文件时出现性能问题。此限制现在可以通过 editor.colorDecoratorsLimit 设置进行配置。

编辑器查找跳转到匹配
新的 Go To Match... 命令允许您在查找控件打开时,根据计数跳转到文件中的特定匹配项。当您有大量匹配项并想跳转到特定一个时,这很有用。

重新设计的内联建议工具栏
在本里程碑中,我们重新设计了内联建议工具栏,使其更加紧凑且易于使用。它具有用于快速循环切换备选建议以及逐字或完全接受建议的按钮。
在下面的视频中,用户审查了由 GitHub Copilot 提供的建议(在注释提示时触发),然后递增接受了第一个 console 以及下一个单词 console.log。

设置 "editor.inlineSuggest.showToolbar": "always" 可用于在内联建议可用时始终显示工具栏。
我们还添加了用于逐字接受/撤消建议的默认键盘快捷键 (Ctrl+Arrow Left/Arrow Right)。
终端
新的默认快捷键
添加了以下默认快捷键,以提高高级终端功能的可发现性:
打开检测到的链接 - Ctrl/Cmd+Shift+O
Open Detected Link 命令 (⇧⌘G (Windows, Linux Ctrl+Shift+G)) 是打开终端链接的键盘友好方式。该命令会打开一个包含终端视口中所有可用链接的 Quick Pick。

⇧⌘G (Windows, Linux Ctrl+Shift+G) 快捷键被选中是因为它与 Go to Symbol in Editor 类似,但针对的是终端。
转到最近的目录 - Ctrl/Cmd+G
Go to Recent Directory (⌘G (Windows, Linux Ctrl+G)) 会打开一个 Quick Pick,其中包含通过 shell 集成 获取的最近目录。它支持固定和模糊匹配。

选择此快捷键是因为 Ctrl+G 是一个使用率相对较低的 shell 快捷键。
向 shell 发送 Ctrl+G - Ctrl+Alt+G
由于 Ctrl+G 现在用于 Go to Recent Directory,使用 Ctrl+Alt+G 是向 shell 直接发送 Ctrl+G 的新方式。
运行最近的命令 - Ctrl+Alt+R
Run Recent Command (⌃⌥R (Windows, Linux Ctrl+Alt+R)) 会打开一个包含最近运行命令的 Quick Pick,其模型基于大多数 shell 的反向搜索 (Ctrl+R),但在更易于访问且功能更强的包中。它支持固定和模糊匹配。

选择 ⌃⌥R (Windows, Linux Ctrl+Alt+R) 快捷键是因为它是 Ctrl+R 的替代行为,但该快捷键太重要,不能覆盖其默认行为。
无障碍模式覆盖
由于反向搜索对屏幕阅读器来说不太友好,当启用无障碍模式时,Ctrl+R 将触发 Run Recent Command,而 Ctrl+Alt+R 将向 shell 发送 Ctrl+R。
链接改进
本版本中终端的链接检测有许多改进
-
在特定情况下,包含空格的链接会被检测到
- 当整行都是链接时。
- Python 风格的堆栈跟踪链接:
File "<path>", line <line> - 某些编译器错误:
<path>(<line>,<col>) : ... - 独立设置样式的文本部分会被独立检测,因此如果路径带下划线,即使它包含空格,也应该被检测到。
-
包含
[和]字符的链接现在可以工作,它们甚至支持在困难边缘情况下的检测:![Links that end in the ] character will be detected, even when the whole link is wrapped in [ and ]](/assets/updates/1_75/terminal-square-bracket.png)
-
vscode://协议链接现在会被检测到。 -
/mnt/、\\wsl$\和\\wsl.localhost\链接现在可以在 Windows 上被检测到。 -
OSC 超链接支持已在 v1.72 中添加,这些链接中常用的
file://协议现在也受到支持(例如ls --hyperlink)。 -
terminal.integrated.enableFileLinks设置现在具有一个"notRemote"选项,允许其仅在文件存在性检查可能导致性能问题的远程连接上被有条件地禁用。
大多数链接格式也始终支持以下行和列格式
<file>:<line><file>:<line>:<column><file> <line><file> <line>:<column><file>(<line>)<file>(<line>,<column>)<file>(<line>, <column>)<file> (<line>)<file> (<line>,<column>)<file> (<line>, <column>)- 对于这些,单引号或不带引号也可以工作
"<file>",<line>"<file>",<line>:<column>"<file>", line <line>"<file>", line <line>, col <column>"<file>", line <line>, column <column>"<file>":line <line>"<file>":line <line>, col <column>"<file>":line <line>, column <column>"<file>": line <line>"<file>": line <line>, col <column>"<file>": line <line>, column <column>"<file>" on line <line>"<file>" on line <line>, col <column>"<file>" on line <line>, column <column>
终端编辑器文件拖放支持
终端编辑器现在支持按住 Shift 进行拖放,以将文件写入终端,而不是打开编辑器。

"不安全" 配置文件检测
由于 安全漏洞,Windows 上的 Cygwin shell 检测最近被移除。本版本中,我们以更安全的形式将其带回,并检测更多的 shell 配置文件,包括 Cygwin、Cmder 和 MSYS2。为缓解该安全问题,在使用这些配置文件之一前,必须通过 Select Default Profile 命令进行配置。


选择后,在将其添加到 settings.json 文件并像普通配置文件一样运行之前,会出现警告。

如果计算机不是由多个用户使用(例如在企业环境中),此警告可以安全地忽略。
切换终端视图中的命令
长期以来的一个请求是将 Clear Terminal 命令添加到终端视图操作中,但我们一直担心 UI 的臃肿。得益于一项新的内部功能,我们有了默认隐藏的新操作,它们出现在溢出菜单中,但可以通过右键点击切换以显示。


Ctrl+C 在 Windows 上取消选择
Windows 在复制选择和向 shell 发送 SIGINT 之间共享 Ctrl+C,具体取决于是否有选择。一个常见的困扰是,如果您不小心进行了选择,Ctrl+C 可能不会发送 SIGINT。为了缓解这种情况,Ctrl+C 复制选择现在也会清除选择,因此连续按两次 Ctrl+C 将可靠地发送 1 次或 2 次 SIGINT。
添加终端制表符宽度设置
有一个新的设置 terminal.integrated.tabStopWidth,用于配置终端的制表符宽度。当程序输出 \t 字符而不是在其配置中设置制表符大小时,这很有用。
Powerline 三角形和对角线自定义字形
GPU 加速终端现在获得像素完美的自定义字形,用于三角形和对角线 Powerline 额外符号字形 (U+E0B8-U+E0BF)。这些字符是否为单宽度或双宽度字符存在歧义,并根据使用的字体而异,因此我们选择将它们渲染为单宽度。
之前

之后

"在活动终端中运行选定文本" 中使用的括号粘贴模式
Run Selected Text In Active Terminal 命令现在将使用“括号粘贴模式”运行文本(在支持的 shell 中),因此多行选择将被视为单个输入,而不是多个命令。这使得运行实际脚本更加直观,错误更少。
之前

之后

针对 Pwsh Preview 反馈提供程序的快速修复
PowerShell Preview 最近实现了一种 新的可插拔反馈提供程序系统,允许在命令失败时打印建议。

终端现在从 [General] 和 [cmd-not-found] 反馈提供程序提取快速修复。可以通过点击灯泡或使用 Ctrl/Cmd+. 打开快速修复对话框。
源代码管理
新命令
Git 2.35 为 git stash 命令引入了新的 --staged 模式。这种新模式允许您轻松仅暂存已暂存的更改。如果您有支持此新模式的 Git 版本,可以使用新的 Git: Stash Staged 命令来利用它。
VS Code 已经支持使用 Git: Delete Tag 命令删除本地标签。在本里程碑中,我们启用了使用新的 Git: Delete Remote Tag 命令删除远程标签的功能。
父文件夹中的 Git 仓库
VS Code 使用 git rev-parse --show-toplevel 来确定 Git 仓库的根目录。在大多数情况下,Git 仓库的根目录位于工作区内,但在某些场景下,Git 仓库的根目录位于工作区或打开文件的父文件夹中。虽然在工作区或打开文件的父文件夹中打开 Git 仓库对于高级用户来说是一个很好的功能,但对于新用户来说可能会造成混淆。我们已经看到这种混淆导致从这些 Git 仓库中丢弃更改,从而导致数据丢失。
为避免混淆并降低数据丢失风险,从本里程碑开始,VS Code 将显示通知和源代码控制视图中的新欢迎视图,并且不会自动从工作区和打开文件的父文件夹打开 Git 仓库。

主题:Dark+ V2 以及 MacOS Modern 产品图标
Open Repository 按钮将打开一个 Quick Pick,其中列出了在工作区或打开文件的父文件夹中发现的所有 Git 仓库。打开父文件夹中的 Git 仓库的选择会被记住。
用户可以使用 git.openRepositoryInParentFolders 设置来控制如何处理父文件夹中的 Git 仓库。想要恢复旧行为的用户可以将 git.openRepositoryInParentFolders 设置为 always。
命令禁用
根据 Git 仓库的大小或各种 Git 钩子的存在,某些 Git 操作可能需要很长时间才能完成。我们过去曾看到,在之前的命令仍在进行时启动新命令可能会导致意外结果(例如,在提交操作进行时丢弃文件上的更改)。
为了防止这种情况,我们在以下操作进行时禁用大多数 Git 命令:Checkout、Commit、Push 和 Pull。这意味着当这些操作运行时,大多数 Git 命令将不会出现在命令面板中,并在源代码控制视图和状态栏中被禁用。
用户界面改进
在本里程碑中,我们润色了一些源代码控制用户界面元素
- 源代码控制视图中 Commit 和 Publish Branch 操作按钮的工具提示现在包含分支名称。
- Checkout 状态栏项现在根据签出的引用类型(分支、标签或提交)使用不同的图标。
- Checkout 状态栏项现在在签出操作进行时显示一个旋转的进度图标。
Notebook
内核选择器改进
我们继续改进 MRU(最近使用)内核选择器。可以通过将 notebook.kernelPicker.type 设置为 mru 来启用它。未使用的内核将被移动到二级选择器 Select Another Kernel... 中。当您安装了最新的 Jupyter 和 Python 扩展时,此选择器将按来源(例如:Jupyter Kernel、Python 环境等)对所有内核进行分组。

合并选定单元格
有一个新的命令 Join Selected Cells (notebook.cell.joinSelected) 用于将多个选定的单元格合并为一个单元格。

将输出回退渲染为支持的 mime 类型
Jupyter Notebooks 中的富输出(如 IPyWidgets)仅在内核生命周期内可见。这意味着当笔记本关闭并重新打开时,输出不再可见。然而,在其中许多情况下,可以使用回退机制渲染输出。例如,IPyWidget 在某些情况下(取决于所使用的微件)可以渲染为静态图像或 HTML 内容。
因此,打开带有 matplotlib 微件(或类似微件)现有笔记本的用户现在可以在无需重新执行代码的情况下看到输出。

新文档
有两个新主题可以帮助您在 VS Code 中使用 Jupyter Notebooks。
- Jupyter Notebooks on the web - 在 vscode.dev 或 GitHub Codespaces 中运行笔记本。
- Manage Jupyter Kernels - 了解如何将笔记本连接到各种 Jupyter 内核。
调试
JavaScript 调试
改进了 Node.js 启动性能
用于 Node.js 调试的“断点预测器”已被重写和改进,以显着提高大型项目的速度。例如,调试 TypeScript 仓库中的单元测试时的启动时间开销减少了 62%,调试和启动 VS Code 仓库中的构建开销减少了 80%。
如果您遇到断点无法命中等问题,请 提交问题。您可以通过在 launch.json 中设置 "enableTurboSourcemaps": false 来禁用新行为,但随着我们获得信心,此选项最终将被删除。
语言
JavaScript React 语言标签现为 JavaScript JSX
JavaScript React 语言模式已重命名为 JavaScript JSX,以反映 JSX 语法不仅仅被 React 使用。TypeScript React 也已重命名为 TypeScript JSX。
请注意,仅更改了 UI 中显示的语言名称。出于兼容性原因,内部语言 ID(javascriptreact 和 typescriptreact)保持不变。
新的 shellscript 语法
VS Code 现在使用来自 better-shell-syntax 的新语法进行 shellscript 语法高亮。
扩展
VS Marketplace 扩展签名
从 2022 年 11 月开始,上传到 Visual Studio Marketplace 的每个扩展都由 VS Marketplace 进行代码签名。当用户通过 VS Code 的扩展视图安装签名扩展时,VS Code 将验证签名,从而证明该扩展确实来自 VS Marketplace 且扩展包未被修改。如果签名验证失败,VS Code 将不会安装该扩展。
VS Marketplace 正在处理所有现有扩展的签名(包括自 11 月以来未更新的扩展)。此过程完成后,在几个月内,VS Code 将要求所有来自 VS Marketplace 的扩展都必须由 VS Marketplace 签名。此要求将保证来自 VS Marketplace 的每个包的完整性,从而提高我们扩展生态系统的整体安全性。
注意:扩展作者无需执行任何操作即可加入 Marketplace 签名。除了 Marketplace 签名外,我们目前正在研究发布者签名。关于发布者签名的更多信息可以在 discussion #137 中找到。
从 CLI 固定扩展版本
当您从 CLI 安装特定版本的扩展 (code --install-extension {publisher}.{name}@{version}) 时,它现在将被固定到该版本。这意味着当您启用自动更新时,该扩展不会自动更新。
同步固定的扩展版本
Settings Sync 现在将同步固定的扩展版本。这意味着当您在一台机器上安装特定版本的扩展时,它将被固定到您同步到的所有其他机器上的该版本。
对扩展的贡献
Python
当从激活的终端启动 VS Code 时自动选择环境
如果用户通过已激活 conda 或虚拟环境的终端启动 VS Code,Python 扩展现在会检测到这一点,然后自动选择环境,或者询问用户是否愿意将其设为所选环境;具体取决于环境。
创建环境时选择需求文件
使用 Python: Create Environment 命令创建虚拟环境时,Python 扩展现在会查找工作区文件夹中的需求文件,并允许用户多选任意数量的需求进行安装。
从 pyproject.toml 选择可选依赖项
Python 扩展检测并加载 pyproject.toml 文件中 [project.optional-dependencies] 部分提供的可选依赖项。如果我们检测到工作区包含 pyproject.toml 以及任何选定的可选依赖项,我们会使用 pip 可编辑安装命令。
使用 Pylance 自动缩进
当为 Python 文件启用 editor.formatOnType 设置时,Pylance 会在键入时自动缩进代码,让您更多地关注代码逻辑而不是格式化。
要试用它,通过将以下内容添加到您的用户 settings.json 文件,为 Python 文件启用 formatOnType
"[python]": {
"editor.formatOnType": true,
},
实时预览
外部浏览器预览设置
Live Preview 扩展现在允许您在默认浏览器之外的其他浏览器中打开外部浏览器预览。使用 livePreview.customExternalBrowser 设置,您可以将外部预览设置为在以下浏览器中打开:
- Microsoft Edge
- Google Chrome
- Mozilla Firefox
- 您的默认浏览器

服务器根目录设置
您现在可以将服务器的根路径设置为工作区中的子文件夹。例如,您可以将 livePreview.serverRoot 设置为 "src",要求 Live Preview 从工作区中的 src 文件夹提供文件。
ESLint
ESLint 扩展已更新至版本 2.4.0。主要新功能包括:
-
支持新的实验性 扁平配置文件 (flat config files)。您需要使用设置
eslint.experimental.useFlatConfig在 VS Code 中单独启用此支持。需要 ESLint 版本 8.21 或更高版本。 -
ESLint 状态指示器已移至 VS Code 的语言状态区域。因此,删除了设置
eslint.alwaysShowStatus。请改用 VS Code 的固定功能。
语言状态项现在会在保存期间计算代码修复时通知您验证时间过长和 ESLint 运行时间过长。可用的时间预算(以毫秒为单位)可通过两个设置
eslint.timeBudget.onValidation和eslint.timeBudget.onFixes进行控制。 -
长问题波浪线可以使用新的设置
eslint.problems.shortenToSingleLine缩短为单行。
GitHub 拉取请求和议题
GitHub 拉取请求和问题扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。亮点包括
- 支持建议和接受更改。
- 注释中的 GitHub 句柄现在已链接化。
- 可以在创建 PR 时添加标签。
- 一个实验性设置
githubPullRequests.experimental.quickDiff将在编辑器左侧栏中显示已签出 PR 中更改行的快速差异视图。
查看扩展的 0.58.0 版本更新日志 以了解其他亮点。
GitHub Copilot
GitHub Copilot 扩展 是一款人工智能代码补全工具,可帮助您更快、更智能地编写代码。您可以在 VS Code 中使用 Copilot 扩展来生成代码,或从其生成的代码中学习。
GitHub Copilot 通过 内联建议 UI 集成到 VS Code 编辑器中,该 UI 让您可以审查各种建议并轻松接受生成代码的全部或部分。
GitHub Copilot 现已面向企业正式发布,具备许可证管理、组织范围的策略控制和隐私保护等功能。您可以在 GitHub Copilot for Business 公告 中了解更多信息。
要开始使用,您可以在 GitHub Copilot 网站 上注册免费试用。
我们还在 VS Code 文档中添加了一个新的 GitHub Copilot in VS Code 主题,这将帮助您开始使用 Copilot。
远程开发
远程开发扩展允许您将容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 用作功能齐全的开发环境。此版本的亮点包括:
- Dev Container 支持多个
devcontainers.json文件。 - Docker 凭据转发。
- X11 & Wayland 转发
您可以在 远程开发发布说明 中了解新的扩展功能和错误修复。
远程隧道 (Remote Tunnels)
防止睡眠
Remote Tunnels 现在可以防止计算机在 Windows、macOS 和基于 systemd 的 Linux 系统上进入睡眠状态。如果您离开桌面以远程工作并希望确保隧道保持可访问,这非常有用。要使用此功能:
- 当从 VS Code UI 开启远程隧道访问时,将设置
remote.tunnels.access.preventSleep更新为true。 - 当在 CLI 上使用
code tunnel时,传入--no-sleep标志。
可靠性改进
修复了远程隧道中的几个连接相关问题,这应该会提高可靠性。
继续工作 (Continue Working On)
“继续工作”功能支持在本地窗口的 Git 仓库中启动,并在远程窗口(如 GitHub Codespace)中继续工作。如果您所在的分支尚未发布到远程,现在当您选择在不同的开发环境中继续工作时,系统会自动提示您发布当前分支,以便您可以在其他地方访问完整的分支上下文。
此外,当您在远程窗口的 Git 仓库中时,现在可以使用 Continue Working in New Local Clone 命令在 VS Code Desktop 上的新本地 Git 克隆中继续工作。
最后,在本地、远程或 Web 窗口中继续工作的所有选项现在都方便地呈现在远程指示器中。这些选项也可在命令面板中找到。

预览功能
Dark+ V2 和 Light+ V2 实验性主题
两个新的颜色主题 Dark+ V2 和 Light+ V2 现已可供使用。这些主题是现有 Dark+ 和 Light+ 主题的演变,旨在更具可访问性并使 VS Code 比以往任何时候都看起来更好!这些主题仍标记为实验性,我们正在寻求早期反馈。

您可以在颜色主题选择器(Preferences: Color Theme ⌘K ⌘T (Windows, Linux Ctrl+K Ctrl+T))中找到列为 Light+ V2 (Experimental) 和 Dark+ V2 (Experimental) 的新主题。
TypeScript 5.0 支持
此更新包含对即将发布的 TypeScript 5.0 的支持。有关 TypeScript 团队目前正在做的工作的更多详细信息,请参阅 TypeScript 5.0 迭代计划。一些编辑器工具亮点:
- 新的
switch和case补全功能可帮助您更快地填充switch语句的两个部分。 - 致力于在 github.dev 和 vscode.dev 上启用全项目 IntelliSense。
要开始使用 TypeScript 5.0 nightly 构建,请安装 TypeScript Nightly 扩展。
命令面板中的“常用”部分
在本里程碑中,我们在命令面板中添加了一个新的“常用”部分。此部分的目的是帮助新用户更好地理解命令面板的用途及其功能。

主题:熊猫主题(在 vscode.dev 上预览)
此部分将显示在“最近使用”部分下方,以免破坏肌肉记忆。随着您运行的命令越来越多并熟悉 VS Code,该部分要么消失(因为“常用”命令移动到“最近使用”中),要么移动到下方折叠且看不见的地方。

主题:熊猫主题(在 vscode.dev 上预览)
目前,我们将此新体验置于设置 workbench.commandPalette.experimental.suggestCommands 之后,但我们计划在不久的将来将其作为默认行为。请告诉我们您的想法!
扩展创作
注释线程状态
CommentThread state API 已最终确定。此 API 控制注释是渲染为已解决还是未解决,并可能影响评论视图中的过滤。您可以在 issue #127473 中了解有关如何使用该 API 的更多信息。
忽略设置同步
您现在可以使用在注册设置时使用 ignoreSync 属性来默认隐藏设置同步。这对于不打算在机器之间同步的设置非常有用。
遥测
新的 TelemetryLogger API 已最终确定。此 API 旨在使扩展作者使用遥测变得更容易,对最终用户更安全。该 API 支持内置机密清理、遥测输出通道、错误处理程序和自动遥测级别管理等功能。这应该会带来更具凝聚力的遥测体验,并保证遵循我们的要求。
提议的 API
每个里程碑都会带来新的提议 API,扩展作者可以尝试这些 API。一如既往,我们希望得到您的反馈。以下是尝试提议 API 的步骤
- 查找您要尝试的提议并将其名称添加到
package.json#enabledApiProposals。 - 使用最新的vscode-dts并运行
vscode-dts dev。它会将相应的d.ts文件下载到您的工作区中。 - 您现在可以根据该提议进行编程。
您不能发布使用提议 API 的扩展。下个版本中可能会有破坏性更改,我们绝不希望破坏现有扩展。
让笔记本渲染器回退到不同的 mime 类型
有时在渲染内容时,笔记本渲染器 可能会意识到它无法正确渲染该项目。例如,渲染器可能要求内核处于某种特定状态。
以前对于这种情况,渲染器唯一的选择是渲染一条错误消息。我们添加了一个新的提案 API,让渲染器可以抛出一个特殊命名的错误,导致 VS Code 静默回退到渲染存储在笔记本输出项上的其他数据。例如,交互式图表渲染器可以抛出此错误,使 VS Code 回退并渲染也存储在当前输出项上的图像数据。
要触发此回退,在 renderOutputItem 中抛出一个名为 vscode.fallbackToNextRenderer 的错误。
throw new class extends Error {
override name = 'vscode.fallbackToNextRenderer';
}();
此特殊错误仅适用于预计在某些情况下渲染会失败的情况。如果您的渲染器遇到意外错误,它应该继续显示一条错误消息。
快速差异 (Quick diff)
快速差异是编辑器中显示添加、更改和删除行的装订线装饰,目前仅由 SCM 提供程序使用。建议的快速差异 API 允许在 SCM 提供程序之外使用快速差异。以下示例来自 GitHub Pull Request 扩展,它使用快速差异 API 显示 PR 中更改行的快速差异:
vscode.window.registerQuickDiffProvider(
{ scheme: 'file' },
{
provideOriginalResource: (uri: vscode.Uri) => {
const changeNode = this.reviewModel.localFileChanges.find(
changeNode => changeNode.changeModel.filePath.toString() === uri.toString()
);
if (changeNode) {
return changeNode.changeModel.parentFilePath;
}
}
},
'GitHub Pull Request',
this.repository.rootUri
);
完整提案位于 quickDiffProvider.d.ts。
持续测试运行
持续测试运行 允许测试扩展指示它们能够在更改发生时监视并重新运行测试。支持此 API 的方法是在测试运行配置文件中指示支持...
const profile = controller.createRunProfile('Run', TestRunProfileKind.Run, runHandler);
+profile.supportsContinuousRun = true;
然后检查 runHandler 中的支持。
const runHandler = (request: TestRunRequest, token: CancellationToken) => {
+ if (request.continuous) {
+ return watchForFileChangesThenRunTests(request, token);
+ }
}
完整提案位于 testContinuousRun.d.ts。
工程
扩展主机的实用程序进程
进程沙盒化 所需的扩展主机的实用程序进程使用现已默认启用。仍然有一个设置 (extensions.experimental.useUtilityProcess),我们很快就会删除它。
通过命令行进行性能测试
我们引入了以下 node 模块来从命令行运行一系列性能测试。
vscode-bisect - 此模块帮助我们快速测量性能回归。运行 npx vscode-bisect --help 以获取操作此工具的方法。
vscode-perf - 此模块帮助我们测量 VS Code 的性能。npx vscode-perf --help 描述了如何操作此工具。
GB18030 认证
VS Code 现已获得 GB18030 认证 - 这意味着中国政府内部的认证委员会已确认 VS Code 可以正确表示全范围的中文字符。测试涵盖了所有内置的使用场景。随着 VS Code 的认证,核心 Visual Studio 系列(包括 Visual Studio 和 Visual Studio for Mac)已根据 GB18030 获得认证。
迁移到 ESM
我们已经开始了将代码库迁移到 ESM 的旅程。VS Code 项目早于原生模块 (ESM),并且我们一直使用异步模块系统 (AMD)。AMD 对我们来说表现良好,但现在是时候前进了。我们已经开始将代码库迁移到 ESM,我们取得了良好进展,并希望在接下来的几个月中完成这项工作。
针对 macOS 10.11 和 10.12 的 EOL 警告
VS Code 桌面版将在接下来的几个里程碑中更新到 Electron 22。随着 Electron 22 的更新,VS Code 桌面版将不再在 OS X El Capitan 和 macOS Sierra 上运行。在本里程碑中,我们为这些受影响平台上的用户添加了弃用通知,以准备他们的迁移。如果您是上述操作系统版本的用户,请查看我们的 FAQ 以获取更多信息。
改进了系统和应用程序语言变量的使用
在之前的版本中,我们开始将应用程序语言传递给 Electron,以便它可以正确布局某些组件,例如窗口控件叠加层 (WCO)。同时,语言推荐器依赖于系统语言,但 app.getLocale() 开始获取应用程序语言而不是系统语言,因此我们使用了较新的 app.getPreferredSystemLanguages() Electron API 来获取用于语言推荐器的系统语言。结果,出现了一个回归,导致扩展视图中的扩展无法渲染,因为新 API 返回了一些 toLocaleString() 无法解析的值。
我们为恢复版本推动的即时解决方案是还原回 app.getLocale() 并暂时中断语言推荐,但事实证明,代码库的许多区域也应该使用应用程序语言变量而不是系统语言变量。
此版本用应用程序语言替换了许多系统语言的使用。反过来,日期现在应该以与应用程序语言而不是系统语言更一致的格式进行本地化。
值得注意的修复
- 99878 预置 PATH 环境变量与 environmentVariableCollection 在 macOS 上不起作用
- 153786 拥有一个命令来打开差异编辑器的任一侧
- 165123 允许打开带有两个无标题侧的差异编辑器
- 167004 Output: Show Output Channels 一个显示输出通道的命令
- 167528 扩展输出通道的日志级别在重新加载窗口后保持不变
感谢
最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢。
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @ArturoDent (ArturoDent)
- @yume-chan (Simon Chan)
拉取请求
对 vscode 的贡献
- @a-stewart (Anthony Stewart):在 browser.ts 中与 matchMedia 调用一致地指定窗口 PR #164020
- @Aaaaash (大表哥):修复
standaloneTheme.defines始终返回 false 的问题。 PR #169221 - @andschwa (Andy Jordan):修复 PowerShell 5.1 的 shell 集成 PR #170516
- @antonioprudenzano (Antonio Prudenzano):Feat/155294 PR #168513
- @babakks (Babak K. Shandiz)
- 在 markdown 语法标记中包含波浪号 (~) PR #146417
- 🖊 在提交按钮弹出窗口中包含分支名称 PR #167827
- 添加无需选择的监视 PR #171449
- @Balastrong (Leonardo Montini):145458 List:支持按页滚动 PR #145788
- @chiefmikey (Mikl Wolfe)
- 删除 repository.ts 默认参数类型 PR #155908
- 更新 git config.followTagsWhenSync 定义 PR #155914
- @chouzz (Chouzz):修复调用层次结构和类型层次结构 API 的错误描述 PR #167718
- @d1y (源来氏佐田):feat:screencast 模式移动缩放 PR #156084
- @davidwengier (David Wengier):更新 Razor 仓库 PR #171560
- @dtivel (Damon Tivel)
- Extensions:在签名验证期间出现 UnknownError 时发出警告而不是失败 PR #169777
- 如果无法验证扩展签名,请勿阻塞 PR #172576
- @fadeevab (Alexander Fadeev):Makefile 测试
else ifeq|ifneq|...语法 PR #170888 - @giannisp (Ioannis Poulakas):改进搜索输入布局 PR #165989
- @gjsjohnmurray (John Murray)
- 向新列表/树搜索/过滤器小部件添加历史记录 (#_155578) PR #159188
- 向树查找小部件添加 'Fuzzy Match' 切换开关 (#_116286) PR #164376
- 防止隐藏未解析的树分支 PR #167047
- @gpoussel (Guillaume Poussel):添加删除远程标签的命令 (修复 #104845) PR #134327
- @HKalbasi:修复内联提示位置链接问题 PR #167886
- @hughlilly (Hugh Lilly):Copyedit:“Double-clicking” -> “Double-clicking” PR #166758
- @jakebailey (Jake Bailey):在 TS 用户首选项中设置 disableLineTextInReferences=true PR #171376
- @jasonwilliams (Jason Williams):允许将差异编辑器的任一侧作为编辑器打开 (修复 #153786) PR #165765
- @jeanp413 (Jean Pierre)
- 修复粘贴到快速大纲中不显示结果的问题 PR #166835
- 修复退出后未恢复编辑器区域终端的问题 PR #168887
- 修复重新加载后恢复的终端/任务忽略 confirmOnKill 和 confirmOnExit 设置的问题 PR #168922
- 修复 createTerminal 不在第一个编辑器组创建终端的问题 PR #169050
- @joshuaobrien:添加仅暂存 stash 的命令 PR #165649
- @laurentlb (Laurent Le Brun):命令持续时间:为遥测使用更高精度 PR #167624
- @maIIady (Ilya Golovin):修复:使 git 命令可以使用键盘操作 PR #159113
- @markw65:修复在不同文件夹中不自动启动同名任务的问题 PR #168742
- @MarkZuber (Mark Zuber):向网络协议添加高延迟测量仪器 PR #168668
- @meskill:fix:nushell 集成 PR #169861
- @mkhl (Martin Kühl):通过
XDG_DATA_DIRS公开 fish 集成配置 PR #168211 - @MonadChains (MonadChains)
- Issue 163528/创建编辑断点命令 PR #163734
- 在调试至少启动一次后启用断点视图 PR #169077
- @mroch (Marshall Roch):fix anyScore firstMatchCanBeWeak PR #168266
- @mueheg (Google Henrik):在选择范围之前不要选择输入框的全部内容,修复 #167266。 PR #167274
- @N1kO23:添加了
${rootNameShort}格式化 PR #165744 - @ohah (ohah):screencast ime 错误修复 (#_165248) PR #165249
- @ookami-kb (Kirill Bubochkin):更新 shellIntegration.fish 以修复与 cwd 通信时的错误 PR #168452
- @PEZ (Peter Strömberg):为状态栏项启用等宽数字 PR #167310
- @pokey (Pokey Rule):修复片段选择转义的错误 PR #169287
- @probablykasper (Kasper):添加
terminal.integrated.tabStopWidth选项 PR #170733 - @pzhlkj6612 (Mozi):终端选项卡:重命名期间禁用拖放和点击 PR #166821
- @r3m0t (Tomer Chachamu):修复扩展启动缓慢时 webview 消失的问题 (#_168516) PR #168569
- @rezasoumi (RezCoder):issue 163803/ 在 create-branch-from... 中先选择一个引用再选择名称 PR #170908
- @rwe (Robert Estelle):shellIntegration-bash.sh:精确保留 DEBUG 陷阱表达式 PR #165581
- @samdenty (Sam Denty):fix IExtensionRecommendationReson 拼写错误 PR #163889
- @Sean1708 (Sean Marshallsay):引入 VSCODE_RESOLVING_ENVIRONMENT 环境变量。 PR #168436
- @ssigwart (Stephen Sigwart)
- 添加和删除组或切换侧边栏时保持最大化组大小 PR #137962
- 修复粘贴移除缩进的问题 PR #167687
- 添加 CamelCase 转换 PR #169512
- @ste42 (Steven Tam):添加新的无标题差异命令 PR #168533
- @sumneko (最萌小汐):更新 Lua-grammar PR #167692
- @weartist (Han)
- 修复设置以禁用差异视图中“next change”循环 #163331 PR #164225
- 为 #165169 调整 CSS PR #167030
- 支持进程浏览器记住其位置和尺寸 PR #169090
- 当出现同名片段时添加片段来源 PR #169119
- 将 applicationStorageMainService 替换为 stateMainService PR #169365
- @yiliang114 (易良):修复:拼写错误 PR #158431
- @zardoy (Vitaly):[typescript] 修复成员补全中潜在的
[object Object]PR #171127
对 vscode-css-languageservice 的贡献
- @romainmenke (Romain Menke):新的 CSS 单位 PR #324
对 vscode-hexeditor 的贡献
- @brabli (Bradley):在数据检查器中添加当前字节的八进制表示 PR #410
对 vscode-json-languageservice 的贡献
- @rahulbanerjee26 (Rahul Banerjee):检查“not”规则的
errorMessage属性架构 PR #164
对 vscode-languageserver-node 的贡献
- @wkillerud (William Killerud):将 defaultBehavior 响应添加到 onPrepareRename PR #1161
对 vscode-pull-request-github 的贡献
- @eamodio (Eric Amodio):更新 TypeScript (4.2 发布) 和 Octokit (以获取修复的类型),以及其他一些小更新 PR #2525
- @sravan1946 (sravan):从 readme 中删除不可用的徽章 PR #4393
- @Thomas1664
对 debug-adapter-protocol 的贡献
- @mfussenegger (Mathias Fußenegger):澄清 frame 上缺少 canRestart 意味着 true PR #365
对 monaco-editor 的贡献
- @jonatanklosko (Jonatan Kłosko):更新 Elixir 分词器 PR #3453
- @rcjsuen (Remy Suen):修复颜色提供程序的列 PR #3348