2023 年 3 月(版本 1.77)
更新 1.77.1:此更新解决了这些 问题。
更新 1.77.2:此更新解决了此安全 问题。
更新 1.77.3:此更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:通用 英特尔 硅 | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 的 2023 年 3 月版本。此版本中有很多更新,我们希望您会喜欢,其中一些主要亮点包括
- 辅助功能改进 - 为悬停、通知和粘性滚动提供新的键盘快捷键。
- 复制 GitHub 深层链接 - 从编辑器中创建永久链接和 HEAD 链接。
- 笔记本格式化保存 - 在保存时自动格式化笔记本单元格。
- TS/JS switch case 完成 - 快速填写 TypeScript/JavaScript switch 语句。
- Python 移动符号重构 - 将 Python 符号移动到现有文件或新文件。
- 远程隧道更新 - 重用现有隧道并快速从远程切换到桌面。
- Ruby 文档 - 了解 VS Code 的 Ruby 语言支持。
- 预览:扩展的 GitHub Copilot 集成 - 新的内联聊天和全 AI 聊天视图。
如果您想在线阅读这些发行说明,请访问 更新,位于 code.visualstudio.com。
内部人员:想尽快试用新功能吗?您可以下载 nightly 内部人员 构建,并在新功能可用后立即试用。
辅助功能
终端可访问缓冲区改进
终端可访问缓冲区(通过终端:聚焦可访问缓冲区 (⌥F2 (Windows Alt+F2,Linux Shift+Alt+F2)) 为屏幕阅读器用户提供终端内容的访问权限)现在会动态更新,并在使用 Escape 或 Tab 结束会话之前保持活动状态。
当在具有 shell 集成的终端中聚焦可访问缓冲区时,转到可访问视图中的符号 (⇧⌘O (Windows、Linux Ctrl+Shift+O)) 使导航终端命令类似于使用转到编辑器中的符号... 导航编辑器。
悬停控制导航
现在可以使用 up
、down
、home
、end
、page up
和 page down
键聚焦悬停控件并水平和垂直滚动。聚焦悬停控件的键盘快捷键 (⌘K ⌘I (Windows、Linux Ctrl+K Ctrl+I)) 与用于在主光标位置显示悬停的快捷键相同。
接受通知的主要操作
要接受通知的主要操作,用户过去需要导航到通知中心。通知:接受通知主要操作 (⇧⌘A (Windows、Linux Ctrl+Shift+A)) 运行主要操作,而不会离开当前上下文。
粘性滚动导航
现在可以聚焦粘性滚动行并使用 up
和 down
键导航。可以使用 Enter
键转到选定行。要聚焦粘性滚动,可以从命令面板运行聚焦粘性滚动。通过视图:切换粘性滚动命令启用粘性滚动 UI。
工作台
从编辑器边距复制 GitHub 深层链接
现在可以从编辑器边距复制编辑器行或范围的深层链接,前提是在 GitHub 存储库中工作。
在 VS Code 桌面版中,要能够从编辑器边距创建 GitHub 永久链接和 HEAD 链接,您需要安装 GitHub Pull Requests 和 Issues 扩展。在 vscode.dev 中,GitHub 存储库的深层链接可以直接使用。
这些操作还已添加到编辑器选项卡上下文菜单和资源管理器上下文菜单中的共享子菜单。
根据文件内容推荐扩展
VS Code 现在可以根据文件内容推荐扩展。例如,如果您打开一个包含笔记本单元格语法的 Python 文件,VS Code 会推荐 Jupyter 扩展,以便适当地呈现和运行这些单元格。
选择粘性滚动的默认提供程序
粘性滚动(视图:切换粘性滚动)使用多种不同的内容模型来创建其标题。现在可以从大纲提供程序模型、折叠提供程序模型和缩进模型中选择,以确定在粘性滚动 UI 中显示哪些行。如果当前语言没有提供模型,VS Code 会回退到上述顺序中的下一个模型。可以使用编辑器 > 粘性滚动:默认模型 (editor.stickyScroll.defaultModel
) 更改最初使用的默认模型。
终端
改进的选项卡悬停
终端选项卡悬停现在会显示 shell 的进程 ID、完整的命令行以及扩展环境变量贡献的改进视图。
源代码管理
远程存储库中的 Git LFS 提交支持
现在可以提交 LFS 跟踪文件,而无需在编辑 GitHub 和 Azure Repos 存储库时安装 Git LFS。要开始使用,请在 VS Code 桌面版上安装 GitHub 存储库 或 Azure Repos 扩展,运行打开远程存储库命令打开您的存储库,并使用源代码管理视图提交更改。扩展会解析您的 .gitattributes
配置以确定更改的文件是否应提交到存储库提供商的 Git LFS 存储中。
要禁用此行为,可以设置 "githubRepositories.experimental.lfs.write.enabled": false
和 "azureRepos.experimental.lfs.write.enabled": false
。
注意:VS Code for the Web (vscode.dev) 尚未提供支持。
三向合并编辑器文档
如果您还没有尝试使用三向合并编辑器来帮助您解决合并冲突,请查看源代码管理文档中的 三向合并编辑器 部分。三向合并编辑器使您可以同时查看和选择传入的更改和当前更改,预览结果,甚至在进行任何更改之前查看文件的基线版本。
并且不要错过 合并冲突的极其有用的指南 YouTube 视频,其中以三向合并编辑器为主角。
笔记本
保存时格式化
现在可以为笔记本启用保存时格式化。这会在保存笔记本时格式化整个笔记本。可以通过将 notebook.formatOnSave.enabled
设置为 true
来启用此功能。
默认情况下启用笔记本中的输出查找
在笔记本中打开查找控件时,现在会默认情况下在单元格输入和输出中搜索文本。可以通过更改过滤器下拉菜单中的选项来关闭此功能。
可滚动输出区域
将 notebook.output.scrolling
设置为 true 后,超出 notebook.output.textLineLimit
的输出和错误将在可滚动区域内呈现。
语言
TypeScript 5.0
VS Code 现在随附 TypeScript 5.0.2。此主要更新带来了新的 TypeScript 语言功能、改进的性能以及许多重要的改进和错误修复。您可以在 TypeScript 博客 上阅读有关 TypeScript 5.0 的信息。
JavaScript 和 TypeScript 的 switch case 完成
VS Code 现在可以帮助在 JavaScript 或 TypeScript 中的文字类型上构建 switch 语句
在 switch 语句中输入 case
并接受 case ...
的建议。这将自动为该类型的所有值插入 case。请注意,这仅在 switch 的值为联合类型或字面量类型时有效。
VS Code for the Web
.gitignore 支持
在本里程碑中,我们在 VS Code for the Web 上的 GitHub 和 Azure Repos 存储库中添加了对 .gitignore
文件的支持。在下面的视频中,通过 .gitignore
未跟踪的文件在资源管理器视图中显示为灰色,并且不会出现在源代码管理视图中。使用 GitHub 存储库 或 Azure Repos 扩展在 VS Code 桌面中远程浏览存储库时,此功能同样适用。
下面的简短视频将 .pxt
文件夹添加到 .gitignore
中,以将包含的文件从源代码管理视图中隐藏。
远程开发
远程开发扩展 允许您使用 开发容器、通过 SSH 或 远程隧道 连接到远程机器,或使用 适用于 Linux 的 Windows 子系统 (WSL) 作为功能完备的开发环境。
开发容器允许您将容器用作功能完备的开发环境。 开发容器规范 旨在寻找方法来使用常见的开发设置、工具和配置来丰富现有格式,同时仍然提供简化的、非编排的单容器选项。您可以在 Changelog 播客第 529 集 中了解有关开发容器和规范的更多信息。
其他远程开发亮点包括
- 远程隧道 - 更好地重用现有隧道。
- 远程隧道 - 继续在 VS Code 桌面中工作 命令可快速切换到本地开发。
- 开发容器 - 更轻松地清理未使用的开发容器和卷。
您可以在 远程开发发布说明 中了解有关新扩展功能和错误修复的信息。
扩展
扩展安装不受签名验证失败阻止
扩展签名验证错误地报告了一些有效扩展的错误,并阻止它们被安装。这些错误是由 VS Marketplace 和 VS Code 中的错误引起的,我们正在积极寻求修复。为了解除扩展使用的阻止,VS Code 将安装扩展,即使签名验证失败。一旦 VS Marketplace 问题 #619 修复,我们将在我们的下一个稳定版本中重新启用签名验证检查,这很可能在我们的下一个稳定版本中。
对扩展的贡献
Python
移动符号重构
借助新的 将符号移动到 代码操作,您现在可以更方便地重构 Python 代码,感谢 Pylance!
要试用它,请选择 Python 文件中的一个符号,然后单击显示的灯泡 (⌘. (Windows、Linux Ctrl+.))。您可以将符号移动到现有文件或新文件。如果位置是新文件,则将创建一个与您的符号同名的 Python 文件。所有适用的导入引用将随符号移动自动更新。
从依赖项文件创建环境
当您打开 requirements.txt
或 pyproject.toml
文件时,编辑器中有一个新的 创建环境... 按钮,它将运行 Python: 创建环境 命令,使您能够创建新的虚拟环境并安装列出的依赖项。
为扩展作者最终确定环境 API
Python 扩展的 API 用于处理用户计算机上可用的 Python 环境已最终确定。扩展还可以使用 API 来访问 Python 扩展用来运行脚本的选定环境路径,或将其路径更新为他们首选的路径。
API 用法示例在 Python 环境 API Wiki 页面中。我们还计划在将来发布一个 npm 类型包,以便更轻松地跟踪 Python 扩展 API 中的任何更改。
Jupyter
针对 Python 环境的内核选择器改进
内核选择器现在列出 conda 环境,即使它们中没有安装 Python 运行时也是如此。
例如,如果使用 CLI(如 conda create -n envML
)创建新的 conda 环境,则此新环境将在 Python 环境 列表中以 没有 Python 的 conda 环境 部分显示。
当您选择此类环境时,Python 运行时和必要的依赖项将自动安装到环境中。
GitHub 拉取请求和问题
GitHub 拉取请求和问题 扩展已经取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。亮点包括
- 可以在 拉取请求 视图中的 vscode.dev 上打开拉取请求。
- 有一个新的设置用于检查 自动合并 选项,该选项位于 创建拉取请求 视图中:
githubPullRequests.setAutoMerge
。
查看 扩展的 0.62.0 版本的变更日志,以了解其他亮点。
GitHub Copilot
GitHub Copilot 是一种 AI 配对编程工具,可帮助您更快、更智能地编写代码。您可以在 VS Code 中使用 Copilot 扩展来生成代码、从生成的代码中学习,甚至配置您的编辑器。
我们很高兴地宣布将 Copilot 更深入地集成到 VS Code 中的预览版。通过使用 GitHub Copilot Chat 扩展,您将能够尝试以下新功能:
- 内联建议: Copilot 建议在您在代码中工作时内联显示。
- 聊天视图: 在 GitHub Copilot 聊天视图中向 Copilot 寻求任何任务或问题的帮助。
- 内联聊天: 在编写代码时与 Copilot 对话,内联在您的文件中。
您可以要求 Copilot 查找错误、解释棘手的代码、创建测试,甚至提出有关 VS Code 的问题。
您可以在 VS Code 和 GitHub Copilot 博客文章中详细了解 VS Code 团队与 Copilot 的体验和未来。您还可以阅读 VS Code 中的 GitHub Copilot 文章,以详细了解在 VS Code 中使用 Copilot 的方法。
预览功能
笔记本输出搜索支持
在上次迭代中,我们引入了对打开笔记本中格式化笔记本内容的全局搜索,但仅限于单元格和 Markdown 输入。在此迭代中,我们添加了对搜索笔记本输出的支持。当您打开笔记本时,有一个切换按钮允许您自定义要在笔记本中搜索的位置。启用 search.experimental.notebookSearch
以试用此功能!
欢迎页面上的远程连接选择器
欢迎页面现在支持实验性的远程连接选择器 连接到..,该选择器位于启动列表中,可帮助您开始使用远程连接(SSH、远程隧道、GitHub Codespaces 等)。此功能默认情况下处于禁用状态,可以通过将 workbench.remote.experimental.showStartListEntry
设置为 true
来启用。
扩展编写
即将发布的 Electron 22 更新可能需要更改本机模块
我们计划在我们的下一个稳定版本中更新到 Electron 22。这会对使用本机模块的扩展产生影响,因为启用了 V8 内存笼:指向外部(“堆外”)内存的 ArrayBuffers
不再允许。
我们计划提供一个自定义内存分配器,以便未更新的本机模块仍可以继续工作,但无论如何,建议您查看对已分配外部内存的使用情况。请按照 Electron 博客文章 中的建议,了解如何采用此更改。
最终确定对持续测试运行的支持
对 持续测试运行 的支持已最终确定。此 API 允许用户向测试扩展指示他们希望“监视”测试,并在进行更改时继续运行它们。
const profile = ctrl.createRunProfile(/* ... */);
+profile.supportsContinuousRun = true;
function runHandler(request: vscode.TestRunRequest, cancellation: vscode.CancellationToken) {
+ if (request.continuous) {
+ startWatchingAndRunningTests(request);
+ }
// ...
}
新的 when 子句解析器
此 VS Code 版本包含一个用于 when 子句 的新解析器,提供新功能(例如,支持括号)以及更好的正确性,但也更严格的规则。该版本还包含一个用于扩展清单文件 (package.json
) 中 when 子句的 linter,以确保它们在语法上是正确的。我们建议您检查您的 when 子句,以查看新解析器是否可能导致中断。此外,如果您在 when 子句中使用括号,则您的扩展与 VS Code 版本 1.77 及更高版本兼容。有关更改的更多信息,请参阅 问题 #175540。
源代码管理输入中的内联补全
源代码管理输入框现在支持 内联补全
源代码管理输入框的文档 语言标识符 为 scminput
。
建议的 API
每个里程碑都带来了新的 API 提案,扩展作者可以试用它们。和往常一样,我们希望得到您的反馈。以下是在开发中试用 API 提案的步骤。
- 找到您想尝试的提案,并将其名称添加到
package.json#enabledApiProposals
中。您可以从 这里 找到所有提案。 - 使用最新的 vscode-dts 并运行
vscode-dts dev
。该命令会将相应的d.ts
文件下载到您的工作区。 - 现在您可以针对该提案进行编程。
您不能发布使用 API 提案的扩展。下一个版本可能会出现重大更改,我们不希望破坏现有的扩展。
编辑器边距提案上下文菜单
editor/lineNumber/context
提案菜单固定在编辑器边距和编辑器行号上,提供了一种方法来显示与特定行相关的扩展操作。
要在开发中试用此功能,请启用 contribEditorLineNumberMenu
API 提案。贡献给此菜单的操作将在命令参数中接收行号,并且可以在其 when 子句中引用 editorLineNumber
上下文键。您可以在 API 提案问题 #175945 中留下反馈。
笔记本生命周期事件:onWillSaveNotebookDocument
onWillSaveNotebookDocument
事件在保存笔记本文档之前触发。此事件对想要在保存笔记本文档之前执行某些操作的扩展很有用。例如,想要在保存笔记本文档之前清理笔记本单元格输出的扩展可以注册此事件的侦听器,并返回要应用的单元格输出编辑。
以下是扩展程序注册此事件侦听器的方式。
vscode.workspace.onWillSaveNotebookDocument(e => {
if (event.reason == vscode.NotebookDocumentSaveReason.Manual) {
event.waitUntil(new Promise((resolve) => {
const notebookEdit = new vscode.NotebookEdit(...);
const edit = new vscode.WorkspaceEdit();
edit.set(event.document.uri, [notebookEdit]);
resolve([edit]);
}));
}
});
工程
Windows 8 和 8.1 的 EOL 警告
VS Code 桌面将在接下来的几个里程碑中更新到 Electron >=23。随着 Electron 23 的更新,VS Code 桌面将不再在 Windows 8 / Windows Server 2012 和 Windows 8.1 / Windows Server 2012 R2 上运行。在本里程碑中,我们已为这些受影响平台上的用户添加了弃用通知,以帮助他们迁移。如果您正在运行其中一个 Windows 版本,请查看我们的 常见问题解答 以获取更多信息。
Snap 软件包的基镜像已更新
在本迭代中,我们将 Snap 软件包更新为使用 Core20(基于 Ubuntu 20.04 构建)作为基镜像,而不是我们之前的 Core(基于 Ubuntu 16.04 构建)。此更改解决了 CLI 缺少的 GLIBC 符号并修复了 Wayland 支持以及其他问题。您可以在 拉取请求 #127320 中找到更多上下文。
探索扩展主机自定义内存分配器
为了采用 Electron 22(附带启用的 V8 沙箱),并最大程度地减少对依赖于使用外部数组缓冲区的本机模块的扩展的影响,我们在扩展主机中定制了现有的内存分配器。具体而言,扩展主机现在允许来自这些本机模块的分配位于 V8 沙箱内,作为避免致命崩溃的变通方法。如果您有兴趣了解我们最终采用这种解决方案的原因,可以查看 问题 #177338 以获取详细信息。
文档
新的编程语言主题
- VS Code 中的 Ruby - 使用 Ruby LSP 扩展了解 Ruby 语言支持(片段、代码整理、调试)。
- 多语言笔记本 - 多语言笔记本 扩展使 C#、PowerShell、JavaScript 等多种语言的编程成为可能。
值得注意的修复
感谢
最后但同样重要的是,向 VS Code 的贡献者表示衷心的 感谢。
问题跟踪
对我们问题跟踪的贡献
- @gjsjohnmurray (John Murray)
- @IllusionMH (Andrii Dieiev)
- @starball5 (starball)
- @RedCMD (RedCMD)
- @ArturoDent (ArturoDent)
拉取请求
对 vscode
的贡献
- @andschwa (Andy Jordan): 为 PowerShell 5.1 处理
ParameterBindingException
PR #176004 - @azdavis (Ariel Davis): 将标记悬停置于顶部 PR #166560
- @babakks (Babak K. Shandiz): 💬 在终端选项卡悬停中添加 PID 和可执行文件/参数 PR #171258
- @billti (Bill Ticehurst): 修复在桌面上加载第一个已安装的 Web 扩展失败的问题 PR #174175
- @brice-gros (Brice Gros): 支持 Git for Windows SDK PR #177443
- @dkniffin (Derek Kniffin): 添加 vscode.getEditorLayout 命令 PR #171224
- @dyedgreen (Tilman Roeder): 添加对三个或更多和弦键盘快捷键的支持 PR #175253
- @EliiseS (Eliise): 修复不一致的行换行应用问题 PR #174688
- @gjsjohnmurray (John Murray)
- 在 CommentAuthorInformation.iconPath 中处理文件 URI(修复 #174690) PR #175361
- 允许 Markdown 中的
<span>
样式使用--vscode-XXX
颜色变量 (#_176064) PR #176312 - 在 Problems 的表格视图中添加图标颜色(修复 #176621) PR #176625
- @harbin1053020115 (ermin.zem): 整理:更新 IPCClient 类注释 PR #175198
- @hermannloose (Hermann Loose)
- 为带有未解决线程的行上的注释符号添加可主题颜色 PR #174915
- 一致地展开或折叠一行上的所有注释 PR #176967
- @jeanp413 (Jean Pierre): 修复 #174838 PR #175646
- @jessebluemr (Marko Reiprecht): monaco-editor-3626: 确保在 'json' 等语言中突出显示括号 PR #176084
- @lawvs (Whitewater): 复合 Enter 不应该接受重命名 PR #174829
- @mickaelistria (Mickael Istria): onEnterRules 在 Javadoc 内的新行中添加前缀 PR #176800
- @nikdmello (Nikhil D'Mello): 修复屏幕录制模式:仅键盘快捷键不再显示命令名称 PR #176149
- @NWilson (Nicholas Wilson): 将 RenameInputField 中的 DOM 操作移到仅渲染部分 PR #174684
- @ohah (ohah): 屏幕录制输入法错误修复 (#_176331) PR #176150
- @orgads (Orgad Shaneh): LinkParsing: 支持 "foo line 123" PR #175906
- @poeck (Paul Köck): 哦,已经是 2023 年了 PR #172649
- @pouyakary (Pouya Kary ✨): 修复 #177580 PR #177581
- @spahnke (Sebastian Pahnke): [Monaco] 添加
monaco.editor.registerLinkOpener
方法以能够拦截来自编辑器的链接打开操作 PR #177055 - @SvetozarMateev (Svetozar Mateev): 为进程资源管理器中的杀死进程操作添加加速器 PR #172755
- @tisilent (xie jialong 努力鸭): 为 .integrated-terminal 添加 z-index PR #175997
- @webarthur (Arthur Ronconi): 向屏幕录制模式添加了功能和修复 PR #171845
- @yiliang114 (易良)
- 修复错别字 PR #176764
- 修复:关闭 #176789 补充查找小部件边框底部半径 PR #176791
- @zardoy (Vitaly): 资源管理器:当文件路径以 / 结尾时自动创建文件夹 PR #173901
对 vscode-languageserver-node
的贡献
- @EhabY (Ehab Younes): 在客户端中间件中添加 registerCapability 和 unregisterCapability PR #1179
对 vscode-pull-request-github
的贡献
对 vscode-docs
的贡献
- @vinistock (Vinicius Stock): 添加 Ruby 语言指南 PR #6152
对 monaco-editor
的贡献
- @danboo (Dan Boorstein): 添加 perl 模块 (.pm) 扩展名 PR #3258
- @nnnnoel (Noel Kim (김민혁)): 为 TS 添加 CommonJS、ESM 扩展名 PR #3264
- @PmcFizz (Fizz): 优化示例 PR #3726
- @tamayika: 修复游乐场示例中的类型错误并添加 CI 测试 PR #3722
对 devcontainers/cli
的贡献
- @jarrodcolburn (jarrodcolburn): 文档:在 markdown 中添加 shell 高亮 PR #436
- @stuartleeks (Stuart Leeks): 修复错别字 (userEnvProb -> userEnvProbe) PR #426
- @trxcllnt (Paul Taylor): 增量地复制靠近安装层的特性 PR #382
- @ShauryaAg (Shaurya Agarwal)