2023 年 3 月(版本 1.77)
更新 1.77.1:此更新解决了这些 问题。
更新 1.77.2:此更新解决了此安全问题。
更新 1.77.3:此更新解决了这些 问题。
下载:Windows:x64 Arm64 | Mac:通用 Intel silicon | Linux:deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2023 年 3 月版。此版本包含许多更新,我们希望您会喜欢,其中一些主要亮点包括
- 辅助功能改进 - 悬停、通知和 Sticky Scroll 的新键盘快捷键。
- 从编辑器装订线复制 GitHub 深度链接 - 从编辑器内创建永久链接和 HEAD 链接。
- 保存时格式化笔记本 - 在保存时自动格式化笔记本单元格。
- TS/JS switch case 完成 - 快速填写 TypeScript/JavaScript switch 语句。
- Python 移动符号重构 - 将 Python 符号移动到现有文件或新文件。
- 远程隧道更新 - 重用现有隧道,并从远程快速过渡到桌面。
- Ruby 文档 - 了解 VS Code 的 Ruby 语言支持。
- 预览:扩展的 GitHub Copilot 集成 - 新的内联聊天和完整的 AI 聊天视图。
如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新。
Insiders: 想要尽快试用新功能吗?您可以下载每晚构建的 Insiders 版本,并在最新更新可用后立即试用。
辅助功能
终端辅助功能缓冲区改进
终端辅助功能缓冲区通过终端:聚焦辅助功能缓冲区 (⌥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)) 运行主要操作,而无需离开当前上下文。
Sticky Scroll 导航
现在可以聚焦 Sticky Scroll 行,并使用 up
和 down
键导航。您可以使用 Enter
键转到选定的行。要聚焦 Sticky Scroll,您可以从命令面板运行 聚焦 Sticky Scroll。通过 视图:切换 Sticky Scroll 命令启用 Sticky Scroll UI。
工作台
从编辑器装订线复制 GitHub 深度链接
当在 GitHub 存储库中工作时,您现在可以从编辑器装订线复制编辑器行或范围的深度链接。
在 VS Code 桌面版中,要能够从编辑器装订线创建 GitHub 永久链接和 HEAD 链接,您需要安装 GitHub Pull Requests and Issues 扩展。在 vscode.dev 中,GitHub 存储库的深度链接开箱即用。
这些操作也已添加到编辑器选项卡上下文菜单和资源管理器上下文菜单中的 共享 子菜单中。
按文件内容推荐扩展
VS Code 现在可以根据文件内容推荐扩展。例如,如果您打开一个具有笔记本单元格语法的 Python 文件,VS Code 会推荐 Jupyter 扩展以正确呈现和运行这些单元格。
为 Sticky Scroll 选择默认提供程序
Sticky Scroll(视图:切换 Sticky Scroll)使用几种不同的内容模型来创建其标题。现在可以在大纲提供程序模型、折叠提供程序模型和缩进模型之间进行选择,以确定要在 Sticky Scroll UI 中显示哪些行。如果当前语言的模型不可用,VS Code 将回退到上述顺序中的下一个模型。最初使用的默认模型可以使用 编辑器 > Sticky Scroll:默认模型 (editor.stickyScroll.defaultModel
) 进行更改。
终端
改进的选项卡悬停
终端选项卡悬停现在显示 shell 的进程 ID、完整命令行以及扩展环境变量贡献的改进视图。
源代码管理
远程存储库中的 Git LFS 提交支持
当编辑 GitHub 和 Azure Repos 存储库时,您现在可以提交 LFS 跟踪的文件,而无需安装 Git LFS。要开始使用,请在 VS Code 桌面版上安装 GitHub Repositories 或 Azure Repos 扩展,运行 打开远程存储库 命令以打开您的存储库,并使用源代码管理视图提交您的更改。扩展会解析您的 .gitattributes
配置,以确定是否应将您更改的文件提交到存储库提供程序的 Git LFS 存储。
要禁用此行为,您可以设置 "githubRepositories.experimental.lfs.write.enabled": false
和 "azureRepos.experimental.lfs.write.enabled": false
。
注意:尚不支持 VS Code for the Web (vscode.dev)。
3 向合并编辑器文档
如果您尚未尝试使用 3 向合并编辑器来帮助您解决合并冲突,请查看源代码管理文档中的 3 向合并编辑器 部分。3 向合并编辑器允许您同时查看和选择传入和当前更改,预览结果,甚至在进行任何更改之前查看文件的基本版本。
并且不要错过 极其有用的合并冲突指南 YouTube 视频,其中重点介绍了 3 向合并编辑器。
笔记本
保存时格式化
您现在可以为笔记本启用保存时格式化。这会在您保存笔记本时格式化整个笔记本。您可以通过将 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 Repositories 或 Azure Repos 扩展在 VS Code 桌面版上远程浏览存储库时,这也适用。
下面的短视频将 .pxt
文件夹添加到 .gitignore
,以从源代码管理视图中隐藏包含的文件。
远程开发
远程开发扩展,允许您使用 Dev Container、通过 SSH 或 远程隧道 的远程计算机,或 Windows Subsystem for Linux (WSL) 作为功能齐全的开发环境。
Dev Container 允许您使用容器作为功能齐全的开发环境。Dev Container Specification 寻求通过通用开发设置、工具和配置来丰富现有格式的方法,同时仍提供简化的、非编排的单容器选项。您可以在 Changelog 播客的第 529 集中了解有关 Dev Container 和规范的更多信息。
其他远程开发亮点包括
- 远程隧道 - 更好地重用现有隧道。
- 远程隧道 - 继续在 VS Code 桌面版中工作 命令,以便快速过渡到本地开发。
- Dev Container - 更轻松地清理未使用的 Dev Container 和卷。
您可以在 远程开发发行说明中了解有关新扩展功能和错误修复的信息。
扩展
扩展安装不会因签名验证失败而被阻止
扩展签名验证错误地报告了少量有效扩展的错误,并阻止它们被安装。这些故障是由 VS Marketplace 和 VS Code 中的错误引起的,我们正在积极修复。为了解除扩展使用的阻止,即使签名验证失败,VS Code 也会安装扩展。一旦 VS Marketplace 问题 #619 得到修复,我们将在下一个稳定版本中重新启用签名验证检查。
扩展贡献
Python
移动符号重构
借助新的 将符号移动到 代码操作,您现在可以使用 Pylance 更方便地重构您的 Python 代码!
要试用它,请在 Python 文件中选择一个符号,然后单击显示的灯泡 (⌘. (Windows、Linux Ctrl+.))。您可以将符号移动到现有文件或新文件。如果位置是新文件,则会创建一个 Python 文件,其名称与您的符号相同。所有适用的导入引用都会随着符号移动自动更新。
从依赖项文件创建环境
当您打开 requirements.txt
或 pyproject.toml
文件时,编辑器中会有一个新的 创建环境... 按钮,该按钮运行 Python:创建环境 命令,允许您创建新的虚拟环境并安装列出的依赖项。
扩展作者的最终环境 API
用于处理用户计算机上可用 Python 环境的 Python 扩展 API 已最终确定。扩展还可以使用 API 访问 Python 扩展用于运行脚本的选定环境路径,或将其路径更新为他们首选的路径。
API 用法的示例在 Python Environment APIs wiki 页面中。我们还计划在未来发布 npm 类型包,以便更轻松地跟踪 Python 扩展 API 中的任何更改。
Jupyter
Python 环境的内核选择器改进
即使未在 conda 环境 中安装 Python 运行时,内核选择器现在也会列出它们。
例如,如果使用 CLI 创建新的 conda 环境,例如 conda create -n envML
,则此新环境将显示在 Python 环境列表的 Conda Env Without Python 部分下。
当您选择这样的环境时,Python 运行时和必要的依赖项将自动安装到环境中。
GitHub Pull Requests and Issues
GitHub Pull Requests and Issues 扩展取得了更多进展,该扩展允许您处理、创建和管理拉取请求和问题。亮点包括
- 可以从 拉取请求 视图在 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 版本之一,请查看我们的 FAQ 以获取更多信息。
Snap 包的基础镜像已更新
在此迭代中,我们已更新我们的 Snap 包,以使用 Core20(从 Ubuntu 20.04 构建)作为基础镜像,取代我们之前的 Core(从 Ubuntu 16.04 构建)。此更改解决了我们的 CLI 缺少 GLIBC 符号的问题,并修复了 wayland 支持等问题。您可以在 pull request #127320 中找到更多上下文。
探索扩展主机自定义内存分配器
为了采用 Electron 22(附带启用的 V8 沙箱),并最大限度地减少对依赖于专门使用外部数组缓冲区的本机模块的扩展的影响,我们自定义了扩展主机中现有的内存分配器。具体来说,扩展主机现在可以容纳来自这些本机模块的分配,使其位于 V8 沙箱内,作为避免致命崩溃的解决方法。如果您对我们如何/为什么最终采用此解决方案感兴趣,可以查看 问题 #177338 以获取详细信息。
文档
新的编程语言主题
- VS Code 中的 Ruby - 了解使用 Ruby LSP 扩展的 Ruby 语言支持(代码片段、linting、调试)。
- Polyglot Notebooks - Polyglot Notebooks 扩展为 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 - 为问题表格视图中的图标添加颜色(修复 #176621) PR #176625
- @harbin1053020115 (ermin.zem):chore: 更新 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):组合输入不应接受重命名 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 补充查找小部件 border-bottom-radius 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):opt 示例 PR #3726
- @tamayika: 修复 playground 示例类型错误并添加 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)