2023 年 3 月 (版本 1.77)
更新 1.77.1:此更新解决了这些问题。
更新 1.77.2:此更新解决了这个安全问题。
更新 1.77.3:此更新解决了这些问题。
下载:Windows: x64 Arm64 | Mac: 通用版 Intel Apple 芯片 | Linux: deb rpm tarball Arm snap
欢迎使用 Visual Studio Code 2023 年 3 月版。此版本带来了许多更新,希望您喜欢,主要亮点包括
- 辅助功能改进 - 为浮窗、通知和 Sticky Scroll 新增了键盘快捷方式。
- 复制 GitHub 深度链接 - 在编辑器中创建永久链接和 HEAD 链接。
- Notebook Format on Save(保存时格式化 Notebook) - 保存时自动格式化 Notebook 单元格。
- 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 现在可以根据文件内容推荐扩展。例如,如果您打开一个包含 Notebook 单元格语法的 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 仓库时,无需安装Git LFS 即可提交 LFS 跟踪的文件。要开始使用,请在 VS Code 桌面版上安装GitHub Repositories 或Azure Repos 扩展,运行打开远程仓库命令打开您的仓库,然后使用源代码管理视图提交您的更改。扩展会解析您的 .gitattributes
配置,以确定更改的文件是否应提交到仓库提供程序的 Git LFS 存储中。
要禁用此行为,可以将 "githubRepositories.experimental.lfs.write.enabled"
和 "azureRepos.experimental.lfs.write.enabled"
设置为 false
。
注意:Web 版 VS Code(vscode.dev)尚不支持此功能。
三向合并编辑器文档
如果您还没有尝试使用三向合并编辑器来帮助解决合并冲突,请查看源代码管理文档中的三向合并编辑器部分。三向合并编辑器允许您同时查看和选择传入和当前更改,预览结果,甚至在进行任何更改之前查看文件的基础版本。
不要错过 The EXTREMELY Helpful Guide to Merge Conflicts 这个 YouTube 视频,其中重点介绍了三向合并编辑器。
Notebooks
保存时格式化
现在可以为 Notebooks 启用保存时格式化。这会在保存时格式化整个 Notebook。您可以通过将 notebook.formatOnSave.enabled
设置为 true
来启用此功能。
Notebook 输出中查找功能默认启用
在 Notebook 中打开查找控件时,默认会在单元格输入和输出中搜索文本。您可以通过更改筛选器下拉列表中的选项来关闭此功能。
可滚动的输出区域
将 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 的值是联合类型或字面量类型的情况。
Web 版 VS Code
.gitignore 支持
在本里程碑中,我们在 Web 版 VS Code 的 GitHub 和 Azure Repos 仓库中添加了对 .gitignore
文件的支持。在下面的视频中,通过 .gitignore
未跟踪的文件在资源管理器视图中显示为灰色,并且不会出现在源代码管理视图中。使用GitHub Repositories 或Azure Repos 扩展在 VS Code 桌面版中远程浏览仓库时,此功能也有效。
下面的短视频将 .pxt
文件夹添加到 .gitignore
以隐藏其中包含的文件,使其不显示在源代码管理视图中。
远程开发
远程开发扩展允许您使用开发容器、通过 SSH 或远程隧道连接的远程机器,或适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
开发容器允许您使用容器作为功能齐全的开发环境。开发容器规范旨在通过通用的开发设置、工具和配置来丰富现有格式,同时仍提供简化的、非编排的单一容器选项。您可以在Changelog 播客的第 529 集中了解有关开发容器和规范的更多信息。
其他远程开发亮点包括
- 远程隧道 - 更好地复用现有隧道。
- 远程隧道 - 继续在 VS Code 桌面版中工作命令可快速切换到本地开发。
- 开发容器 - 更轻松地清理未使用的开发容器和卷。
您可以在远程开发发行说明中了解新的扩展功能和 bug 修复。
扩展
扩展安装不受签名验证失败阻碍
扩展签名验证错误地报告了少数有效扩展的错误,导致它们无法安装。这些故障是由 VS Marketplace 和 VS Code 中的 bug 引起的,我们正在积极修复。为了解除扩展使用限制,VS Code 将安装扩展,即使签名验证失败。一旦VS Marketplace 问题 #619 修复,我们将在下个 Stable 版本中重新启用签名验证检查。
对扩展的贡献
Python
移动符号重构
借助新的移动符号到代码操作,您现在可以更方便地使用Pylance 重构 Python 代码!
要试用此功能,请在 Python 文件中选择一个符号,然后点击显示的灯泡图标(⌘. (Windows, Linux Ctrl+.))。您可以将符号移动到现有文件或新文件中。如果位置是新文件,则会创建一个与您的符号同名的 Python 文件。所有适用的导入引用都会随着符号移动而自动更新。
从依赖文件创建环境
当您打开 requirements.txt
或 pyproject.toml
文件时,编辑器中会有一个新的创建环境...按钮,它会运行Python:创建环境命令,允许您创建一个新的虚拟环境并安装列出的依赖项。
面向扩展作者的最终确定环境 API
Python 扩展用于处理用户机器上可用 Python 环境的 API 已最终确定。扩展还可以使用此 API 访问 Python 扩展用于运行脚本的选定环境路径,或将其更新为首选路径。
API 使用示例可在Python 环境 API wiki 页面中找到。我们还计划将来发布一个 npm types 包,以便更容易跟踪 Python 扩展 API 的任何更改。
Jupyter
针对 Python 环境的内核选择器改进
内核选择器现在会列出 conda 环境,即使其中没有安装 Python 运行时。
例如,如果使用 conda create -n envML
等 CLI 创建新的 conda 环境,这个新环境将显示在Python 环境列表中的一个名为不带 Python 的 Conda 环境的部分下。
当您选择这样的环境时,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 Chat 视图中向 Copilot 寻求帮助,解决任何任务或问题。
- 内联聊天: 在编写代码时,在文件中以内联方式与 Copilot 交谈。
您可以要求 Copilot 查找 bug、解释复杂代码、创建测试,甚至询问有关 VS Code 的问题。
您可以在VS Code 和 GitHub Copilot 博客文章中了解 VS Code 团队使用 Copilot 的经验和未来展望。您还可以阅读VS Code 中的 GitHub Copilot 文章,了解在 VS Code 中使用 Copilot 的更多详细信息。
预览功能
Notebook 对输出的搜索支持
上一个迭代中,我们在打开的 Notebook 中引入了对格式化 Notebook 内容的全局搜索,但仅限于单元格和 Markdown 输入。本次迭代中,我们添加了对搜索 Notebook 输出的支持。打开 Notebook 后,有一个切换按钮允许您自定义在 Notebook 中搜索的位置。启用 search.experimental.notebookSearch
即可试用此功能!
欢迎页上的远程连接选择器
欢迎页现在在开始列表中支持一个实验性远程连接选择器 连接到...,帮助您开始使用远程连接(SSH、远程隧道、GitHub Codespaces 等)。此功能默认禁用,可以通过将 workbench.remote.experimental.showStartListEntry
设置为 true
来启用。
扩展创作
即将到来的 Electron 22 更新可能需要修改原生模块
我们计划在下个 Stable 版本中更新到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 clause 解析器
此 VS Code 版本包含一个新的when clause 解析器,提供了新功能(例如,支持括号)和更好的正确性,但也具有更严格的规则。此版本还包含一个用于检查扩展清单文件(package.json
)中 when clause 的 linter,以确保其语法正确。我们鼓励您检查您的 when clause 是否可能因新解析器而出现问题。此外,如果在 when clause 中使用括号,您的扩展将兼容 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 clause 中引用 editorLineNumber
上下文键。您可以在API 提案问题 #175945 中留下反馈。
Notebook 生命周期事件:onWillSaveNotebookDocument
onWillSaveNotebookDocument
事件在保存 Notebook 文档之前触发。此事件对于希望在保存 Notebook 文档之前执行某些操作的扩展非常有用。例如,想要在保存 Notebook 单元格输出之前进行清理的扩展可以注册此事件的监听器,并返回要应用的单元格输出编辑。
以下是扩展如何注册此事件的监听器
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 包的基础镜像从之前的 Core(基于 Ubuntu 16.04 构建)更新为 Core20(基于 Ubuntu 20.04 构建)。此更改解决了我们 CLI 缺少 GLIBC 符号的问题,并修复了 wayland 支持等问题。您可以在拉取请求 #127320 中找到更多背景信息。
探索扩展主机自定义内存分配器
为了适配启用 V8 沙盒的 Electron 22,并最大限度地减少对依赖特定使用外部数组缓冲区的原生模块的扩展的影响,我们定制了扩展主机中现有的内存分配器。具体来说,扩展主机现在允许这些原生模块的分配位于 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): 截屏输入法 bug 修复(#_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
- 修复: close #176789 补充查找控件的 border-bottom-radius PR #176791
- @zardoy (Vitaly): Explorer: 当文件路径以 / 结尾时自动创建文件夹 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
- PR #382
- @ShauryaAg (Shaurya Agarwal)