2024 年 6 月 (版本 1.91)
更新 1.91.1:本次更新修复了这些问题。
下载:Windows:x64 Arm64 | Mac:Universal Intel Apple 芯片 | Linux:deb rpm tarball Arm snap
欢迎使用 2024 年 6 月版 Visual Studio Code。此版本中有许多我们希望您会喜欢的新增功能,其中一些主要亮点包括
- 预览:传入/传出更改图 - 在源代码管理视图中可视化传入和传出更改。
- Python 环境 - 使用 python-environment-tools 增强环境发现功能。
- 在原生 REPL 中智能发送 - 在原生 REPL 中流畅地运行代码块。
- GitHub Copilot 扩展性 - VS Code Stable 版本中提供聊天和语言模型 API。
- 预览:配置文件编辑器 - 在一个地方管理您的配置文件。
- 自定义标签页标签 - 更多变量选项并支持多个扩展。
- TypeScript 5.5 - 支持正则表达式的语法检查及其他语言特性。
- JavaScript 调试器 - 调试 JavaScript 时检查被遮蔽的变量。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。 Insiders:想尽快试用新功能?您可以下载每夜 Insiders 版本并在最新更新可用时立即试用。
辅助功能
编辑器的悬停可访问视图
为了提高编码时的可访问性,可访问视图和辅助功能帮助菜单现在可以显示编辑器悬停信息的内容。根据悬停的焦点部分,它们可以显示有关焦点部分的信息或整个悬停内容。
链接下划线
为了使工作台中的链接更容易与普通文本区分开来,您可以启用设置 accessibility.underlineLinks
为链接添加下划线。
工作台
搜索
我们添加了一个新设置 search.ripgrep.maxThreads
,它使您可以限制 ripgrep 搜索引擎使用的线程数。无论搜索是通过核心产品还是通过扩展 API 使用,此设置都适用。
将 search.ripgrep.maxThreads
设置为非零值以配置线程数。请谨慎使用,因为将此设置固定到特定值可能会降低 ripgrep 的速度。
调整猜测编码的允许列表
使用新设置 files.candidateGuessEncodings
,您可以配置在启用 files.autoGuessEncoding
时应考虑的一组编码。配置的顺序决定了优先级。此功能使您可以将可检测的编码限制在一个较小的集合中,并优先考虑某种编码而非另一种。
配置文件编辑器预览
在此里程碑中,我们引入了新的配置文件编辑器,使您可以在一个地方管理配置文件。此体验包括创建新配置文件、编辑和删除现有配置文件,以及导入和导出配置文件以与他人共享。在创建新配置文件时,您可以在保存之前预览配置文件并根据需要进行自定义。配置文件编辑器还使您可以使用特定配置文件打开新窗口,或将某个配置文件设置为新窗口的默认配置文件。
配置文件编辑器作为实验性功能提供,由设置 workbench.experimental.enableNewProfilesUI
控制。启用后,您可以从窗口左下角的设置齿轮图标访问配置文件编辑器。
试用一下,并就我们如何进一步改进此体验向我们提供反馈。
带配置文件的新窗口菜单项
除了配置文件编辑器,我们还在“文件”菜单中添加了操作,以使用特定配置文件打开新窗口。使用文件 > 带配置文件的新窗口菜单以使用特定配置文件打开新窗口。
扩展安装选项
我们添加了更多选项,以便您在安装扩展时拥有更大的灵活性
- 安装扩展但不进行同步。
- 安装特定版本的扩展。以前,您必须先安装最新版本的扩展才能选择特定版本。
这些操作在“扩展”视图中扩展的上下文菜单中可用
在自定义标签中访问文件扩展名
当您定义自定义标签时,现在可以使用 ${extname(N)}
语法更灵活地访问单个文件扩展名。此外,${extname(N)}
还支持负索引以反向捕获文件扩展名。要获取整个文件扩展名,请使用 ${extname}
。
例如,对于文件 tests/editor.test.ts
${filename}
=>editor
${extname}
=>test.ts
${extname(0)}
=>ts
${extname(1)}
=>test
${extname(-1)}
=>test
${extname(-2)}
=>ts
合并来自多个扩展的自定义标签模式
当两个扩展在其 configurationDefaults
中为设置 workbench.editor.customLabels.patterns
贡献默认配置时,贡献的模式会合并在一起。
|
|
扩展 1 的默认贡献 | 扩展 2 的默认贡献 |
|
生成的自定义标签模式 |
取消设置主题颜色
如果某个主题设置了您不喜欢的颜色或边框,您现在可以使用 default
将其设置回原始值
"workbench.colorCustomizations": {
"diffEditor.removedTextBorder": "default"
}
更改折叠占位符颜色
折叠占位符(省略号)现在可以使用颜色 editor.foldPlaceholderForeground
进行主题化。
编辑器
保存时的代码操作
使用 editor.codeActionsOnSave
设置,您可以配置一组在保存文件时自动应用的代码操作,例如整理导入。我们通过根据您的工作区文件和活动扩展提供可用代码操作列表,改进了此设置的 IntelliSense 功能。
注意:请注意,虽然目前
true
和false
仍然是有效的配置,但它们将被弃用,转而使用explicit
、always
和never
。有关示例,请参阅保存时的代码操作文档。
快速关闭只读文件状态
如果您通过 files.readonlyInclude
设置将文件配置为只读,您现在可以从只读编辑器消息中快速关闭文件的只读状态。
源代码管理
传入/传出更改图预览
我们一直在探索使用另一种方式可视化传入和传出更改。此里程碑包含一项实验性功能,它使用图形来可视化传入和传出更改。该图包含当前分支、当前分支的上游分支和一个可选的基础分支。图的根是这些分支的共同祖先。
您可以使用 scm.experimental.showHistoryGraph
设置启用此新可视化。试用一下,并告诉我们您的想法,我们将继续改进和扩展此可视化中可用的功能。
Notebook
在文本选中区域中查找
Notebook 查找控件现在具有用于文本选中区域和单元格选中区域的“在选中区域中查找”。此行为默认启用,并可通过控件中的按钮进行控制。根据您的选中区域的上下文,切换此按钮会将您的查找查询限定为一个或多个选定的单元格,或单元格内的行。
从上下文菜单复制或打开文本输出
在 Notebook 中处理文本输出时,您现在可以使用文本输出的上下文菜单来复制输出值或在新编辑器中打开输出。此功能使查看大型流式输出更加容易。
终端
支持复制和粘贴转义序列 (OSC 52)
现在支持操作系统命令 (OSC) 52 转义序列。终端中运行的任何内容都可以使用此序列,但主要用例是为 tmux
提供剪贴板访问权限。
新的自定义字形
终端现在支持分支、行号和锁定 Powerline 符号的自定义字形。与我们支持的其他自定义字形一样,启用GPU 加速后,这些符号无需配置字体即可工作。
当调整字体大小、行高或字间距时,这些符号也会完美地与单元格缩放。
调试
JavaScript 调试器
JavaScript 调试器现在会根据程序的范围,在鼠标悬停时和内联值(通过 debug.inlineValues
设置启用)中显示被遮蔽变量的正确值。
主题:Codesong(在 vscode.dev 上预览)
语言
TypeScript 5.5
我们现在包含 TypeScript 5.5。此重要更新带来了一些新的语言特性和工具改进。有关此版本的详细信息,请查看TypeScript 5.5 博客文章。
正则表达式语法检查
得益于 TypeScript 5.5,我们现在会报告 JavaScript 和 TypeScript 正则表达式字面量中的许多语法错误。这包括未封闭的组、不正确的反向引用或无效转义等错误
有关更多详细信息,请查看TypeScript 5.5 博客文章。
对扩展的贡献
GitHub Copilot
紧凑型内联聊天
内联聊天渲染现在更加紧凑,这使得建议更容易阅读和理解。我们还在尝试一种更具叙述性的按钮文本样式,您可以通过 inlineChat.experimental.textButtons:true
启用该样式。
终端初始提示
终端中显示了一个新提示,以帮助发现内联聊天。
此提示仅在安装 Copilot 扩展且存在一个未进行任何交互的终端时显示。通过右键单击它可以轻松永久关闭消息。首次使用终端内联聊天后,消息也会消失。
应用代码块
聊天视图中代码块上的在编辑器中应用命令使用语言模型来确定将更改应用到当前编辑器的最佳方法。
Python
使用 python-environment-tools 进行 Python 环境发现
我们很高兴推出一款新工具,python-environment-tools,旨在显著提高检测全局 Python 安装和 Python 虚拟环境的速度。此工具使用 Rust 来确保快速准确的发现过程。
我们目前正在测试这项新功能,使其与现有支持并行运行,以评估 Python 扩展中新的发现性能。因此,您将看到一个名为 Python Locator
的新日志通道,它显示了使用此新工具的发现时间。
此增强功能是我们持续努力优化 VS Code 中 Python 支持的性能和效率的一部分。请访问 python-environment-tools 仓库以了解有关此功能、正在进行的工作以及提供反馈的更多信息。
在原生 REPL 中智能发送
Python 扩展现在已在VS Code 原生 REPL 中启用了智能发送。
以前,当您将光标放在一行 Python 代码上并按下Shift+Enter时,Python 扩展会将该行的确切内容发送到原生 REPL,即使它会失败,例如因为它是一个多行命令的一部分。
现在,在非嵌套场景中,Shift+Enter 会发送最少的可执行代码;在嵌套场景中,它会发送最高级别的代码块。这使用户能够通过在文件中快速按Shift+Enter,以最少的努力运行最多的可执行代码。
支持 reStructuredText 文档字符串
Pylance 现在支持在悬停时渲染 reStructuredText 文档字符串 (docstrings)!
此功能尚处于早期阶段,目前处于一个标志之后,因为我们正在努力确保它能有效处理各种 Sphinx、GoogleDoc 和 Epytext 场景。要试用,您可以启用实验性设置 python.analysis.supportRestructuredText:true
。
试用此更改,并在Pylance GitHub 仓库报告任何问题或反馈。
注意:此设置是实验性的,将来可能会被删除,因为我们将稳定此新功能并默认启用它。
GitHub 拉取请求和问题
GitHub 拉取请求扩展取得了更多进展,该扩展使您可以处理、创建和管理拉取请求和问题。新功能包括
- 已检出 PR 的提交子树中显示提交日期。
- 众多错误修复。
查看扩展 0.92.0 版本的更新日志以了解其他亮点。
ESLint
ESLint 扩展现在支持扁平配置文件格式。该扩展仍然支持 eslintrc
文件,您可以使用 eslint.useFlatConfig
设置来控制使用哪种配置文件格式。
请查阅ESLint 扁平配置推广计划,了解 ESLint 弃用和删除对 eslintrc
文件格式支持的计划。
扩展创作
聊天和语言模型 API
上个月,我们最终确定了使扩展能够参与聊天和访问语言模型的 API,但它们仅在 VS Code Insiders 中可用。在此版本中,这些 API 现在在 VS Code Stable 中完全可用。
查看我们的公告博客文章,了解有关这些 API 的更多信息,并了解一些早期采用者如何使用它们。
处理对象设置的默认值
当多个扩展为同一对象设置贡献默认值时,这些默认值现在会合并。这可以防止扩展之间的冲突。
最终确定了 DebugSessionOptions.testRun
API
从测试运行开始调试会话的扩展,现在可以在调用 vscode.debug.startDebugging
时将该运行传递到 DebugSessionOptions
中。传递后,生命周期操作(例如重新启动调试会话)也会创建一个新的测试运行。
调试适配器协议
调试适配器协议进行了一些值得注意的更改
- 通过新的
Scope.presentationHint = returnValue
选项来表示返回值。 - 向
evaluate
请求添加源位置。VS Code 实现了此功能,并在评估悬停和内联值时传递位置。
提议的 API
语言模型的工具和函数
我们添加了一个 API 提议,该提议启用工具或函数调用。该 API 包括两个主要部分
-
扩展注册“工具”的能力。工具是旨在供语言模型使用的功能片段。例如,读取文件的 Git 历史记录。
-
语言模型支持工具的机制,例如:扩展在发出请求时传递工具,语言模型请求工具调用,以及扩展回传工具调用的结果。
该提议可在 vscode.proposed.lmTools.d.ts 中找到。
注意:该 API 仍在积极开发中,未来会发生变化。此外,预计 VS Code 将附带合理的默认工具。
身份验证 getSessions
现在为 getAccounts
虽然我们支持多账户身份验证提供程序,但一直缺失的是获取所有会话并对特定会话执行操作的能力。以前,我们有一个尝试解决此问题的 getSessions
API 提议,但在经过实验并受到流行身份验证库的启发后,我们正在采用不同的方法来解决此问题。
我们放弃了之前提议的 getSessions
API,转向了将“账户”和“会话”概念分离的方法。
希望使用身份验证会话的扩展作者可以运行以下代码来获取用户已登录账户的 AuthenticationSessionAccountInformation
const accounts = vscode.authentication.getAccounts('microsoft');
从那里,您可以使用这些账户专门为这些账户创建会话
const session = vscode.authentication.getSession('microsoft', scopes, {
account: accounts[0]
});
注意:为此工作,身份验证提供程序需要处理一个新的参数,您可以在下面的 API 提议中阅读相关信息
我们相信这是一种更清晰的方式来处理多个身份验证会话,并且能够处理以前无法支持的各种场景。
该提议可在 vscode.proposed.authGetSessions.d.ts 中找到,该文件使用了此提议的先前名称,以免破坏依赖此提议的现有代码。
评论线程显示
我们添加了一个 API 提议,它使提供评论的扩展能够在编辑器中显示自己的评论线程。此 API 提供选项,用于在显示线程时是否保留焦点,或将焦点移到线程的回复框中。
该提议可在 vscode.proposed.commentReveal.d.ts 中找到。
可归因的测试覆盖率
我们正在开发一个 API,该 API 能够按测试归因测试覆盖率。这使用户能够查看哪些测试运行了哪些代码,并过滤编辑器中显示的覆盖率以及测试覆盖率视图中的覆盖率。
请查看vscode#212196 了解更多信息和更新。
工程
将 NLS 与 AMD 加载器解耦
在此里程碑中,我们开始移除 VS Code 中核心原生语言支持 (NLS) 对我们提供的异步模块定义 (AMD) 加载器的依赖。我们未来的目标是使用 ECMAScript Modules (ESM) 加载并完全放弃 AMD。为了朝这个方向发展,我们移除了 AMD 加载器插件依赖。您应该不会注意到任何行为差异,我们曾经支持的所有翻译在 Web 和桌面版中仍然受到支持。
值得关注的修复
感谢
最后但同样重要的是,向 VS Code 的贡献者们表示衷心感谢!
问题跟踪
对我们的问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @shelvesdragon (Shelves The Dragon)
- @starball5 (starball)
- @spartanatreyu (Jayden Pearse)
- @RedCMD (RedCMD)
拉取请求
对 vscode
的贡献
- @bsShoham (Shoham Ben Shitrit):允许在自定义标签中使用
extname(N)
模板 PR #213033 - @CGNonofr (Loïc Mangeonjean):更新配置文件更改时的首选项标记 PR #214353
- @cobey (Cody Beyer)
- 更新文件以包含 py 和 js 的 ai 和 vector db 库 PR #216771
- 添加 js 的 azure ai 包标记 PR #216857
- 将缺失的 azure ai py 包添加到标记 PR #216861
- @dangerman (Anees Ahee):在开发容器中使用 node 20 PR #215434
- @francescov1 (Francesco Virga):添加递归切换 PR #212218
- @franciscacarneiro (Francisca Carneiro):修复 #182308:在搜索面板中按 PageUp 不再导致布局改变。 PR #213067
- @gabritto (Gabriela Araujo Britto):[typescript-language-features] 用于 TypeScript 的基于区域的语义诊断 PR #208713
- @gjsjohnmurray (John Murray):在多提供程序时间轴上正确分页(修复 #213452) PR #213453
- @grgar (George Garside):修复扩展商店 readme 中合并表格单元格渲染未合并的问题 PR #211666
- @hecticme (H. Ngọc Minh):修复:单击时不显示活动栏的焦点边框 PR #217837
- @its-meny:修复:Markdown 中带标题的引用未正确渲染 PR #205227
- @jakebailey (Jake Bailey):修复 tsc -p ./src,删除 no-default-lib PR #216760
- @jeanp413 (Jean Pierre):修复 serverless 中配置任务可能删除整个任务文件的问题 PR #215810
- @mohankumarelec:添加了 http.noProxy 设置,其值与当前已存在的 NO_PROXY 环境变量值相同 PR #211958
- @mtbaqer (Mohammad Baqer):使 collapsedText 可主题化 PR #173203
- @powersagitar:添加 C++20 模块接口单元的文件扩展名 PR #214800
- @r-sargento (Rafael Sargento):实现 vscode 的变量类型显示设置 (#_210258) PR #214315
- @rehmsen (Ole)
- 修复 CellComment 重用时评论线程泄漏的问题。 PR #214589
- 修复 #214589 中的两个错误,修复 #213535。 PR #218357
- @remcohaszing (Remco Haszing)
- 将
removeChild
替换为remove
PR #213465 - 修复打开选择框的问题 PR #214348
- 将
- @SimonSiefke (Simon Siefke)
- 功能:将 electron File.path 替换为 electron webUtils PR #213031
- 在设置中完成颜色键时,填充当前值 PR #213451
- 功能:使 ripgrep 线程数可配置 PR #213511
- 功能:允许在设置中取消设置颜色主题值 PR #213512
- 修复设置编辑器内存泄漏 PR #216763
- 修复:SettingTreeRenderers 中可能存在的内存泄漏 PR #216768
- 修复:在 SettingEnumRenderer 的 renderElement 函数中将 disposable 添加到 elementDisposables 而不是 templateDisposables PR #216855
- @swordensen (Michael Sorensen):修复 #182449:在拖放事件期间按 Shift 会重新启用 webview PR #209211
- @Timmmm (Tim Hutt):修复在终端中打开带有列号的链接的问题 PR #210898
- @tisilent (xiejialong):在 IFindInFilesArgs 中添加 showIncludesExcludes PR #212347
- @werat (Andy Hippo):修复错误消息格式 PR #214900
- @xiaoxianBoy (Snoppy):chore:修复拼写错误 PR #216562
- @y0sh1ne (y0sh1ne):更新 language-configuration.json(修复 #215999) PR #216394
- @yutotnh (yutotnh):添加在猜测编码时指定候选编码列表的功能 (#_36951) PR #208550
对 vscode-css-languageservice
的贡献
- @wkillerud (William Killerud):feat:添加对 Sass
pkg:
导入器的支持 PR #384
对 vscode-extension-samples
的贡献
- @AllanJard (Allan Jardine):修复 #863 - 自动启动语言 PR #864
对 vscode-html-languageservice
的贡献
- @johnsoncodehk (Johnson Chu):
voidElements
的延迟评估 PR #187
对 vscode-languageserver-node
的贡献
- @remcohaszing (Remco Haszing):使用客户端 ID 作为诊断信息收集的备用方案 PR #1445
对 vscode-python-tools-extension-template
的贡献
- @caelean (Caelean Barnes):在 README 中一致引用文件路径 PR #208
对 node-jsonc-parser
的贡献