2023 年 1 月(版本 1.75)
版本 1.75.1 更新:本次更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:Universal Intel silicon | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2023 年 1 月更新。此版本中有许多更新,我们希望您会喜欢。一些主要亮点包括
- 配置文件 - 创建和共享配置文件以配置扩展、设置、快捷方式等。
- VS Marketplace 签名 - 发布的扩展默认进行代码签名。
- 辅助功能改进 - 集成终端屏幕阅读器模式,新的键盘快捷方式。
- 更简单的多视图调整大小 - 拖动布局角落可一次调整多个视图的大小。
- 树视图搜索历史 - 在树视图中快速重新运行以前的搜索。
- 更好的集成终端链接检测 - 检测包含空格、括号、行和列格式的链接。
- 新的 Git 命令 - 在 VS Code 中隐藏已暂存的更改和删除远程标签。
- Dark+ 和 Light+ V2 主题 - 试用实验性颜色主题并告诉我们您的想法。
- Jupyter Notebook 主题 - 在 Web 上使用 Notebook,如何管理 Jupyter 内核。
- VS Code 中的 AI 工具 - 了解由 GitHub Copilot 提供支持的 AI 补全。
如果您想在线阅读这些发行说明,请访问 更新 code.visualstudio.com 上的。
Insiders: 想尽快尝试新功能吗?您可以下载每日构建的 Insiders 版本,并在最新更新可用后立即试用它们。
内部清理
在之前的发行说明中,团队报告了我们的内部清理工作,我们想在这里做同样的事情。
正如我们在 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)。
辅助功能
Diff 导航改进
“跳转到下一个/上一个更改”现在有音频提示,指示行是否被插入、删除或修改。此外,更改的行会被选中,以便屏幕阅读器可以读取它。
集成终端辅助功能模式
“集成终端: 聚焦辅助功能缓冲区” (⌥F2 (Windows Alt+F2, Linux Shift+Alt+F2)) 命令允许屏幕阅读器通过键盘在终端缓冲区中导航。
集成终端辅助功能帮助
与编辑器中的“显示辅助功能帮助”命令类似,“集成终端: 显示集成终端辅助功能帮助” () 命令为屏幕阅读器用户提供了重要信息。
工作区信任编辑器快捷方式
为了改进工作区信任编辑器的键盘辅助功能(可以通过“工作区: 管理工作区信任”打开),您现在可以使用键盘通过 Ctrl/Cmd+Enter
切换当前工作区的信任,或者使用 Ctrl/Cmd+Shift+Enter
切换父文件夹的信任。
改进的设置编辑器指示器上的键盘导航
对于带有多个指示器的设置,例如“在其他地方修改”指示器和“默认值已更改”指示器,现在使用左右箭头键在指示器之间导航。此更改允许用户按下一次 Tab
键即可从指示器中跳出。
配置文件
我们很高兴地宣布,VS Code 的“配置文件”功能现已正式推出。配置文件可以包括扩展、设置、键盘快捷方式、UI 状态、任务和用户代码片段。您可以为不同的开发场景自定义 VS Code,例如数据科学、文档编写,或针对多种编程语言(如 Python 或 Java)。如果您根据工作流程有不同的 VS Code 设置,例如“工作”或“演示”,您也可以将它们保存为不同的配置文件。您可以同时打开多个应用了不同配置文件的(文件夹)工作区。
下图演示了使用针对工作环境定制的“工作”配置文件打开文件夹。
您还可以导出和导入配置文件,与同事、朋友或学生共享,帮助他们快速入门 VS Code。
以下视频演示了如何使用 GitHub gist 导出配置文件以便与他人共享。收到配置文件链接的用户可以在 VS Code for the Web 中预览共享配置文件,并将其导入到其本地 VS Code 实例中。
注意:目前配置文件不支持远程场景,例如 GitHub Codespaces,但我们正在努力启用此功能。您可以在 问题 #165247 中跟踪进展。
工作台
改进的多视图调整大小支持
您现在可以通过拖动视图的角来同时调整多个视图的大小。
改进的网格布局
如果编辑器被最小化,在调整整个工作台或侧边栏大小时,网格现在会保留该状态。在下面的短视频中,当编辑器区域整体展开时,右侧最小化编辑器的宽度保持不变。
从“自定义布局”命令恢复默认设置
使用自定义“自定义布局”命令时,无论是通过触发命令还是使用自定义标题栏中的布局控件,您都可以使用布局控件右上角的还原箭头按钮“恢复默认设置”。
从面板管理面板对齐方式
您现在可以直接从面板上下文菜单调整面板对齐方式,就像调整面板位置一样。
简化的“首选项”菜单
我们简化了用于全局设置的“首选项”菜单,并将选项组织成更符合逻辑的顺序和分组。
树视图查找历史
树视图内的查找控件现在支持历史导航。您可以使用向上/向下箭头键浏览以前的搜索历史。
树视图查找连续匹配
树视图查找控件现在除了支持现有的“模糊”匹配外,还支持连续匹配。在下面的视频中,最初搜索 "src"
会匹配到 "resource"
等。当通过“模糊匹配”切换按钮禁用模糊匹配时,仅高亮显示包含连续文本 "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,如果您遇到文件监视问题,请参阅此 常见问题解答条目 获取更多信息。
键盘快捷方式编辑器改进
显示贡献了键绑定的扩展
键盘快捷方式编辑器现在在“源”列中显示贡献键绑定的扩展。您可以选择扩展名称打开扩展的详细信息页。
您还可以使用扩展上下文菜单中的“扩展键盘快捷方式”操作搜索由扩展贡献的所有键绑定。
显示 when
子句属性的上下文键建议
键盘快捷方式编辑器现在显示 when
属性的上下文键建议。您可以使用 Ctrl+Space
快捷方式触发建议。
搜索带有和弦的键绑定
键盘快捷方式编辑器现在支持搜索带有和弦的键绑定。例如,"Ctrl+K"
也会显示所有以 Ctrl+K
作为第一个和弦的键绑定。
配置 shell 环境解析超时的设置
新设置 application.shellEnvironmentResolutionTimeout
(仅适用于 macOS 和 Linux)允许您增加在需要时解析 shell 环境的超时时间。默认情况下,VS Code 最多等待 10 秒来解析环境,但在某些更复杂的 shell 设置中,这可能不够。
有关 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
明确触发时显示的建议。
代码操作列表现在可滚动
某些扩展会生成很长的代码操作列表。如果空间不足无法渲染所有代码操作,您现在可以滚动浏览列表
颜色装饰器限制
编辑器中显示的颜色装饰器数量限制为 500 个。这是为了防止在打开包含大量颜色的文件时出现性能问题。现在可以通过 editor.colorDecoratorsLimit
设置配置此限制。
编辑器查找“跳转到匹配项”
新的“跳转到匹配项...”命令允许您在打开查找控件时,根据计数跳转到文件中的特定匹配项。当您有大量匹配项并想跳转到特定项时,这非常有用。
重新设计的内联建议工具栏
在此里程碑中,我们重新设计了内联建议工具栏,使其更紧凑且更易于使用。它具有快速切换备选建议以及完全接受建议或逐词接受建议的按钮。
在下面的视频中,用户查看了由 GitHub Copilot 在注释提示时提供的两个建议,然后逐步接受了第一个词 console
和随后的词 log
,构成了 console.log
。
设置 "editor.inlineSuggest.showToolbar": "always"
可用于在有内联建议时始终显示工具栏。
我们还添加了逐词接受/撤销建议的默认键绑定 (Ctrl+左箭头键/右箭头键
)。
集成终端
新的默认键绑定
添加了以下默认键绑定以提高高级集成终端功能的可发现性
打开检测到的链接 - Ctrl/Cmd+Shift+O
“打开检测到的链接”命令 (⇧⌘G (Windows, Linux Ctrl+Shift+G)) 是通过键盘访问集成终端链接的方式。此命令会打开一个 Quick Pick,其中包含集成终端视图端口中所有可用的链接。
选择 ⇧⌘G (Windows, Linux Ctrl+Shift+G) 键绑定是因为它类似于编辑器中的“转到符号”操作,但适用于集成终端。
跳转到最近目录 - Ctrl/Cmd+G
通过 shell 集成 拾取的“跳转到最近目录” (⌘G (Windows, Linux Ctrl+G)) 会打开一个 Quick Pick,其中包含最近目录。它支持固定和模糊匹配。
选择此键绑定是因为 Ctrl+G 是一个使用率相对较低的 shell 键绑定。
将 Ctrl+G 发送至 shell - Ctrl+Alt+G
由于现在 Ctrl+G 用于“跳转到最近目录”,因此使用 Ctrl+Alt+G 是将 Ctrl+G 直接发送到 shell 的新方式。
运行最近命令 - Ctrl+Alt+R
“运行最近命令” (⌃⌥R (Windows, Linux Ctrl+Alt+R)) 会打开一个 Quick Pick,其中包含最近运行的命令,该命令模仿了大多数 shell 的反向索引搜索 (Ctrl+R),但提供了更易于访问且功能更丰富的包。它支持固定和模糊匹配。
选择键绑定 ⌃⌥R (Windows, Linux Ctrl+Alt+R) 是因为它是一种与 Ctrl+R 不同的行为,但该键绑定非常重要,不适合覆盖其默认行为。
辅助功能模式覆盖
由于反向索引搜索对屏幕阅读器来说不够友好,当辅助功能模式开启时,Ctrl+R 将触发“运行最近命令”,而 Ctrl+Alt+R 将向 shell 发送 Ctrl+R。
链接改进
本次发布版本对集成终端中的链接检测进行了许多改进
-
在某些情况下可以检测到包含空格的链接
- 整行都是链接时。
- Python 风格的堆栈跟踪链接:
File "<path>", line <line>
- 一些编译器错误:
<path>(<line>,<col>) : ...
- 文本中独立样式化的部分都将被独立检测,因此如果路径有下划线,即使包含空格也应该被检测到。
-
包含
[
和]
字符的链接现在可以工作,甚至支持检测如下所示的复杂边缘情况 -
现在可以检测到
vscode://
协议链接。 -
现在在 Windows 上可以检测到
/mnt/
、\\wsl$\
和\\wsl.localhost\
链接。 -
在 v1.72 中添加了 OSC 超链接支持,这些链接中常用的
file://
协议现在已受支持(例如ls --hyperlink
)。 -
terminal.integrated.enableFileLinks
设置现在具有"notRemote"
选项,允许仅在远程环境中按条件禁用它,因为在这些环境中文件存在检查可能导致性能问题。
大多数链接格式也一致支持以下行和列格式
<文件>:<行>
<文件>:<行>:<列>
<文件> <行>
<文件> <行>:<列>
<文件>(<行>)
<文件>(<行>,<列>)
<文件>(<行>, <列>)
<文件> (<行>)
<文件> (<行>,<列>)
<文件> (<行>, <列>)
- 这些格式也可以使用单引号或不使用引号
"<文件>",<行>
"<文件>",<行>:<列>
"<文件>", line <行>
"<文件>", line <行>, col <列>
"<文件>", line <行>, column <列>
"<文件>":line <行>
"<文件>":line <行>, col <列>
"<文件>":line <行>, column <列>
"<文件>": line <行>
"<文件>": line <行>, col <列>
"<文件>": line <行>, column <列>
"<文件>" on line <行>
"<文件>" on line <行>, col <列>
"<文件>" on line <行>, column <列>
集成终端编辑器文件拖放支持
现在,在集成终端编辑器中,按住 Shift 键并拖放文件,可以将文件路径写入集成终端而不是打开编辑器。
“不安全”配置文件检测
由于 安全漏洞,之前已移除对 Windows 上 Cygwin shell 的检测。在此版本中,我们以更安全的形式重新引入此功能,并检测更多 shell 配置文件,包括 Cygwin、Cmder 和 MSYS2。为了缓解安全问题,在使用这些配置文件之一之前,必须通过“选择默认配置文件”命令进行配置
选择后,在将其添加到您的 settings.json
文件并像普通配置文件一样生效之前,会显示警告
如果计算机不由多个用户使用(例如在公司环境中),此警告可以安全地忽略。
集成终端视图中的切换命令
一直以来都有用户请求将“清除集成终端”命令添加到集成终端视图操作中,但我们一直担心这会使 UI 过于臃肿。得益于一项新的内部功能,我们现在有了默认隐藏但可通过右键单击切换显示的溢出菜单中的新操作
Windows 上 Ctrl+C 会取消选区
Windows 在复制选区和向 shell 发送 SIGINT 之间共用 Ctrl+C,具体取决于是否有选区。一个常见的烦恼是,如果您不小心创建了选区,Ctrl+C 可能不会发送 SIGINT。为了帮助缓解此问题,现在按 Ctrl+C 复制选区时也会清除选区,因此按两次 Ctrl+C 将可靠地发送 1 或 2 次 SIGINT。
添加集成终端 Tab 停靠位大小设置
有一个新设置 terminal.integrated.tabStopWidth
用于配置集成终端的 Tab 停靠位宽度。当程序输出 \t
字符而不是在其配置中设置 Tab 大小时,此设置很有用。
Powerline 三角形和斜线自定义字形
GPU 加速的集成终端现在可以获得用于 Powerline 额外符号字形(U+E0B8-U+E0BF)中的三角形和斜线的像素完美自定义字形。这些字符在是单宽字符还是双宽字符方面存在歧义,并且取决于所使用的字体,因此我们选择将它们渲染为单宽。
之前
之后
“在活动集成终端中运行选定文本”中使用的带括号粘贴模式
“在活动集成终端中运行选定文本”命令现在将在支持的 shell 中使用“带括号粘贴模式”运行文本,因此多行选区将被视为单个输入,而不是多个命令。这使得运行实际脚本更加直观,并且减少了错误的发生。
之前
之后
Pwsh Preview 反馈提供程序的快速修复
PowerShell Preview 最近实现了一个新的 可插拔反馈提供程序系统,允许在命令失败时打印建议
集成终端现在从 [General]
和 [cmd-not-found]
反馈提供程序中提取快速修复。可以通过单击灯泡或使用 Ctrl/Cmd+.
打开快速修复对话框。
源代码管理
新命令
Git 2.35 引入了 git stash
命令的新模式 --staged
。这种新模式允许您轻松地仅隐藏已暂存的更改。如果您使用的 Git 版本支持此新模式,则可以使用新的“Git: 隐藏已暂存”命令来利用它。
VS Code 已经支持使用“Git: 删除标签”命令删除本地标签。在此里程碑中,我们使用新的“Git: 删除远程标签”命令启用了删除远程标签的功能。
父文件夹中的 Git 仓库
VS Code 使用 git rev-parse --show-toplevel
来确定 Git 仓库的根目录。在大多数情况下,Git 仓库的根目录在工作区内,但在某些场景下,Git 仓库的根目录位于工作区或打开的文件(s) 的父文件夹中。虽然在工作区或打开的文件父文件夹中打开 Git 仓库对于高级用户来说是一个很棒的功能,但这可能对新用户造成困惑。我们见过因这种困惑导致放弃这些 Git 仓库中的更改而造成数据丢失的情况。
为了避免混淆并降低数据丢失的风险,从本里程碑开始,VS Code 将在源代码管理视图中显示通知和新的欢迎视图,并且不会自动打开工作区和打开文件父文件夹中的 Git 仓库。
主题:Dark+ V2,搭配 MacOS Modern 产品图标
“打开仓库”按钮将打开一个 Quick Pick,其中包含在工作区或打开的文件(s) 父文件夹中发现的所有 Git 仓库列表。从父文件夹打开 Git 仓库的选择会被记住。
用户可以使用 git.openRepositoryInParentFolders
设置控制如何处理父文件夹中的 Git 仓库。希望恢复旧行为的用户可以将 git.openRepositoryInParentFolders
设置为 always
。
命令禁用
根据 Git 仓库的大小或各种 Git Hook 的存在,一些 Git 操作可能需要很长时间才能完成。我们过去曾发现,在前一个命令仍在进行时启动新命令可能导致意外结果(例如,在提交操作进行时放弃文件更改)。
为了防止这种情况,我们在以下操作正在进行时禁用了大多数 Git 命令:Checkout
、Commit
、Push
和 Pull
。这意味着在这些操作运行时,大多数 Git 命令不会出现在命令面板中,并在源代码管理视图和状态栏中被禁用。
用户界面改进
在此里程碑中,我们优化了一些源代码管理用户界面元素
- 源代码管理视图中“提交”和“发布分支”操作按钮的工具提示现在包含分支名称。
- “Checkout”状态栏项现在根据检出的引用类型(分支、标签或提交)使用不同的图标。
- “Checkout”状态栏项现在在检出操作进行时显示旋转的进度图标。
Notebooks
内核选择器改进
我们继续改进了 MRU(最近使用)内核选择器。通过将 notebook.kernelPicker.type
设置为 mru
可以启用它。未使用的内核将移到二级选择器“选择另一个内核...”中。当您安装了最新的 Jupyter 和 Python 扩展时,此选择器将按源(例如:Jupyter 内核、Python 环境等)对所有内核进行分组。
合并选定单元格
有一个新命令“合并选定单元格” (kb(notebook.cell.joinSelected)
) 用于将多个选定的单元格合并为一个单元格。
将输出回退渲染到受支持的 mimetype
Jupyter Notebooks 中的富文本输出(如 IPyWidgets)仅在内核生命周期内可见。这意味着当 Notebook 被关闭并重新打开时,输出不再可见。然而,在许多情况下,可以使用回退机制渲染输出。例如,IPyWidget 在某些情况下(取决于使用的控件)可以渲染为静态图像或 HTML 内容。
因此,打开包含 matplotlib 控件(或类似控件)的现有 Notebooks 的用户现在无需重新执行代码即可查看输出。
新文档
有两个新主题可以帮助您在 VS Code 中使用 Jupyter Notebooks。
- Web 上的 Jupyter Notebooks - 在 vscode.dev 或 GitHub Codespaces 中运行 Notebooks。
- 管理 Jupyter 内核 - 了解如何将您的 Notebook 连接到各种 Jupyter 内核。
调试
JavaScript 调试
改进的 Node.js 启动性能
用于 Node.js 调试的“断点预测器”已被重写和改进,以显著提高大型项目的速度。例如,在 TypeScript 仓库中调试单元测试时的启动时间开销减少了 62%,而在 VS Code 仓库中调试和启动构建的开销减少了 80%。
如果您遇到断点未命中等问题,请提交问题。您可以通过在 launch.json
中设置 "enableTurboSourcemaps": false
来禁用新行为,但随着我们信心的增强,此选项最终将被移除。
语言
JavaScript React 语言标签现在是 JavaScript JSX
为了反映 JSX 语法不仅仅用于 React,JavaScript React
语言模式已重命名为 JavaScript JSX
。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 签名外,我们目前还在开发发布者签名。有关发布者签名的更多信息,请参阅讨论 #137。
从 CLI 固定扩展版本
当您通过 CLI 安装特定版本的扩展时(code --install-extension {publisher}.{name}@{version}
),它现在将被固定到该版本。这意味着当您启用了自动更新时,该扩展不会自动更新。
同步固定的扩展版本
设置同步现在将同步固定的扩展版本。这意味着当您在一台计算机上安装特定版本的扩展时,它将在您同步到的所有其他计算机上固定到该版本。
对扩展的贡献
Python
从已激活的终端启动 VS Code 时自动选择环境
如果用户通过已激活 conda 或虚拟环境的终端启动 VS Code,Python 扩展现在会检测到这一点,然后根据环境,要么自动选择该环境,要么询问用户是否希望将该环境设为选定的环境。
创建环境时选择 requirements 文件
使用 Python: Create Environment 命令创建虚拟环境时,Python 扩展现在会在工作区文件夹中查找 requirement 文件,并允许用户多选任意数量的 requirements 文件进行安装。
从 pyproject.toml 中选择可选依赖项
Python 扩展会检测并加载 pyproject.toml
文件中 [project.optional-dependencies]
部分提供的可选依赖项。如果我们检测到工作区包含 pyproject.toml
以及任何选定的可选依赖项,我们会使用 pip editable install 命令。
使用 Pylance 自动缩进
当 Python 文件启用了 editor.formatOnType
设置时,Pylance 会在您键入代码时自动缩进,让您更专注于代码逻辑,而不是格式。
要试用此功能,请通过将以下内容添加到您的用户 settings.json
文件来为 Python 文件启用 formatOnType
"[python]": {
"editor.formatOnType": true,
},
Live Preview (实时预览)
外部浏览器预览设置
Live Preview 扩展现在允许您在默认浏览器以外的浏览器中打开外部浏览器预览。使用 livePreview.customExternalBrowser
设置,您可以将外部预览设置为在以下浏览器中打开:
- Microsoft Edge
- Google Chrome
- Mozilla Firefox
- 您的默认浏览器
服务器根目录设置
您现在可以将服务器的根路径设置为工作区中的子文件夹。例如,您可以通过将 livePreview.serverRoot
设置为 "src"
来让 Live Preview 从工作区中的 src
文件夹提供文件服务。
ESLint
ESLint 扩展已更新至 2.4.0 版本。主要新功能包括:
-
支持新的实验性扁平配置文件。您需要在 VS Code 中使用设置
eslint.experimental.useFlatConfig
单独启用此支持。需要 ESLint 8.21 或更高版本。 -
ESLint 状态指示器已移至 VS Code 的语言状态区域。因此,设置
eslint.alwaysShowStatus
已移除。请改用 VS Code 的固定功能。在保存期间计算代码修复时,语言状态项现在会通知您验证时间过长和 ESLint 运行时间过长的情况。可用的时间预算(以毫秒为单位)可以通过
eslint.timeBudget.onValidation
和eslint.timeBudget.onFixes
这两个设置来控制。 -
使用新设置
eslint.problems.shortenToSingleLine
可以将长的波浪线问题提示缩短为单行。
GitHub 拉取请求和议题
GitHub Pull Requests and Issues 扩展方面取得了更多进展,该扩展允许您处理、创建和管理拉取请求和议题。主要亮点包括:
- 支持建议和接受更改。
- 注释中的 GitHub 用户名现在会显示为链接。
- 创建 PR 时可以添加标签。
- 实验性设置
githubPullRequests.experimental.quickDiff
将在签出的 PR 中更改行的编辑器 gutter 中显示快速差异视图。
查看该扩展的0.58.0 版本更新日志 以了解其他亮点。
GitHub Copilot
GitHub Copilot 扩展是一个由 AI 驱动的代码补全工具,可帮助您更快、更智能地编写代码。您可以在 VS Code 中使用 Copilot 扩展来生成代码,或从它生成的代码中学习。
GitHub Copilot 通过内联建议 UI 集成到 VS Code 编辑器中,您可以借此查看各种建议并轻松接受全部或部分生成的代码。
GitHub Copilot 现已面向企业普遍可用,提供许可证管理、组织级策略控制和隐私保护等功能。您可以在GitHub Copilot for Business 公告中了解更多信息。
要开始使用,您可以在GitHub Copilot 网站上注册免费试用。
我们还在 VS Code 文档中新增了VS Code 中的 GitHub Copilot 主题,帮助您开始使用 Copilot。
远程开发
Remote Development 扩展允许您使用容器、远程计算机或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。此版本的主要亮点包括:
- Dev Container 支持多个
devcontainers.json
文件。 - Docker 凭据转发。
- X11 和 Wayland 转发
您可以在Remote Development 发行说明中了解新的扩展功能和 bug 修复。
Remote Tunnels (远程隧道)
防止睡眠
Remote Tunnels 现在可以防止计算机在 Windows、macOS 和基于 systemd 的 Linux 系统上进入睡眠状态。如果您离开桌面远程工作并希望确保隧道保持可访问,此功能非常有用。要使用此功能:
- 在 VS Code UI 中开启远程隧道访问时,将设置
remote.tunnels.access.preventSleep
更新为true
。 - 在 CLI 上使用
code tunnel
时,传递--no-sleep
标志。
可靠性改进
Remote Tunnels 中与连接相关的几个问题已修复,这应该会提高可靠性。
继续工作
“继续工作”功能支持在本地窗口中的 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 比以往任何时候都更好看!这些主题仍标记为实验性主题,我们正在寻求早期反馈。
您可以在颜色主题选取器(**首选项:颜色主题** ⌘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 扩展。
命令面板中的“常用”部分
在此里程碑中,我们在命令面板中新增了一个“常用”部分。此部分的目的是帮助新用户更好地了解命令面板的作用及其功能。
主题:Panda Theme(在vscode.dev 上预览)
此部分将显示在“最近使用”部分下方,以免破坏肌肉记忆,并且随着您运行更多命令并熟悉 VS Code,此部分要么消失(因为“常用”命令向上移动到“最近使用”),要么位于折叠线下方并从视线中消失。
主题:Panda Theme(在vscode.dev 上预览)
目前,我们将此新体验隐藏在 workbench.commandPalette.experimental.suggestCommands
设置之后,但我们计划在不久的将来将其设为默认行为。欢迎提出您的想法!
扩展编写
注释线程状态
CommentThread
的 state
API 已最终确定。此 API 控制注释是显示为已解决还是未解决,并可能影响注释视图中的过滤。您可以在议题 #127473 中了解有关如何使用此 API 的更多信息。
忽略某个设置进行同步
您现在可以在注册设置时使用 ignoreSync
属性,默认将某个设置隐藏在设置同步之外。这对于不应在机器之间同步的设置很有用。
Telemetry (遥测)
新的 TelemetryLogger
API 已最终确定。此 API 旨在使扩展作者更容易使用遥测,并为最终用户提供更安全的体验。此 API 实现了内置的秘密清除、遥测输出通道、错误处理程序以及自动遥测级别管理等功能。这应该会带来更具一致性的遥测体验,并确保符合我们的要求。
提案 API
每个里程碑都会带来新的提议 API,扩展作者可以进行试用。一如既往,我们希望获得您的反馈。以下是试用提议 API 的步骤:
- 查找您想试用的提议,并将其名称添加到
package.json#enabledApiProposals
中。 - 使用最新的vscode-dts 并运行
vscode-dts dev
。它会将相应的d.ts
文件下载到您的工作区中。 - 您现在可以针对该提议进行编程。
您无法发布使用提议 API 的扩展。下一个版本可能存在破坏性更改,我们不希望破坏现有扩展。
允许笔记本渲染器回退到不同的 mimetype
有时,当渲染内容时,笔记本渲染器 可能会发现它无法正确渲染该项。例如,渲染器可能要求内核处于特定状态。
之前,对于这种情况,渲染器的唯一选择是渲染错误消息。我们新增了一个提议 API,允许渲染器抛出带有特定名称的错误,这会使 VS Code 静默回退到渲染笔记本输出项上存储的其他数据。例如,交互式图表渲染器可以抛出此错误,使 VS Code 回退并渲染当前输出项上存储的图像数据。
要触发此回退,请在 renderOutputItem
中抛出名称为 vscode.fallbackToNextRenderer
的错误。
throw new class extends Error {
override name = 'vscode.fallbackToNextRenderer';
}();
此特殊错误仅适用于预期在某些情况下渲染会失败的情况。如果您的渲染器遇到意外错误,它应该继续显示错误消息。
快速差异
快速差异(即编辑器中新增、更改和删除行上显示的 gutter 装饰)目前仅供 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 中。
工程改进
扩展主机 Utility Process (实用进程)
扩展主机使用 Utility Process(这是实现进程沙箱化 所必需的)现在默认启用。仍然有一个设置(extensions.experimental.useUtilityProcess
),我们将很快移除。
通过命令行进行性能测试
我们引入了以下 Node.js 模块,用于通过命令行运行一系列性能测试。
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 的生命周期结束警告
在接下来的几个里程碑中,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 在 macOS 上使用 environmentVariableCollection 添加 PATH 环境变量前缀不起作用
- 153786 添加命令以打开差异编辑器的任意一侧
- 165123 允许打开一个具有两个无标题侧的差异编辑器
- 167004 输出:显示输出通道 一个用于显示输出通道的命令
- 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): 功能/155294 PR #168513
- @babakks (Babak K. Shandiz)
- 在 markdown 语法标记中包含波浪号 (~) PR #146417
- 🖊 在提交按钮弹出窗口中包含分支名称 PR #167827
- 添加不带选择的 watch PR #171449
- @Balastrong (Leonardo Montini): 145458 列表:支持按页滚动 PR #145788
- @chiefmikey (Mikl Wolfe)
- 移除 repository.ts 的默认参数类型 PR #155908
- 更新 git config.followTagsWhenSync 定义 PR #155914
- @chouzz (Chouzz): 修复调用层级和类型层级 API 描述不正确的问题 PR #167718
- @d1y (源来氏佐田): 功能:截屏模式移动缩放 PR #156084
- @davidwengier (David Wengier): 更新 Razor 仓库 PR #171560
- @dtivel (Damon Tivel)
- 扩展:在签名验证期间遇到 UnknownError 时发出警告而不是失败 PR #169777
- 如果无法验证扩展签名,则不进行阻止 PR #172576
- @fadeevab (Alexander Fadeev): 针对 `else ifeq|ifneq|...` 语法的 Makefile 测试 PR #170888
- @giannisp (Ioannis Poulakas): 改进搜索输入的布局 PR #165989
- @gjsjohnmurray (John Murray)
- 为新的列表/树搜索/过滤小部件添加历史记录 (#_155578) PR #159188
- 为树查找小部件添加“模糊匹配”开关 (#_116286) PR #164376
- 防止隐藏未解决的树分支 PR #167047
- @gpoussel (Guillaume Poussel): 添加删除远程标签的命令 (修复 #104845) PR #134327
- @HKalbasi: 修复内嵌提示位置链接问题 PR #167886
- @hughlilly (Hugh Lilly): 校对:“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: 添加 git stash staged only 命令 PR #165649
- @laurentlb (Laurent Le Brun): 命令持续时间:为遥测使用更高精度 PR #167624
- @maIIady (Ilya Golovin): 修复:使 git 命令支持键盘操作 PR #159113
- @markw65: 修复不同文件夹中同名任务不自动启动的问题 PR #168742
- @MarkZuber (Mark Zuber): 为网络协议添加高延迟测量工具 PR #168668
- @meskill: 修复:nushell 集成 PR #169861
- @mkhl (Martin Kühl): 通过 `XDG_DATA_DIRS` 公开 fish 集成配置 PR #168211
- @MonadChains (MonadChains)
- 议题 163528/创建编辑断点命令 PR #163734
- 调试至少启动一次后启用断点视图 PR #169077
- @mroch (Marshall Roch): 修复 anyScore firstMatchCanBeWeak PR #168266
- @mueheg (Google Henrik): 在选择范围之前不要选择输入框的全部内容,修复 #167266。 PR #167274
- @N1kO23: 添加 `${rootNameShort}` 格式 PR #165744
- @ohah (ohah): 截屏模式输入法错误修复 (#_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): 议题 163803/ 在 create-branch-from... 中先选择引用,然后选择名称 PR #170908
- @rwe (Robert Estelle): shellIntegration-bash.sh:精确保留 DEBUG 陷阱表达式 PR #165581
- @samdenty (Sam Denty): 修复 IExtensionRecommendationReson 拼写错误 PR #163889
- @Sean1708 (Sean Marshallsay): 引入 VSCODE_RESOLVING_ENVIRONMENT 环境变量。 PR #168436
- @ssigwart (Stephen Sigwart)
- 在添加和移除组或切换侧边栏时保留最大化组的大小 PR #137962
- 修复粘贴时移除缩进的问题 PR #167687
- 添加驼峰式转换 PR #169512
- @ste42 (Steven Tam): 添加新的无标题差异命令 PR #168533
- @sumneko (最萌小汐): 更新 Lua 语法 PR #167692
- @weartist (Han)
- 修复禁用差异视图中“下一个更改”循环的设置 #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):在 onPrepareRename 中添加 defaultBehavior 响应 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):澄清帧中不存在 canRestart 意味着 true PR #365
对 monaco-editor
的贡献
- @jonatanklosko (Jonatan Kłosko):更新 Elixir 词法分析器 PR #3453
- @rcjsuen (Remy Suen):修复颜色提供程序的列 PR #3348