2022 年 8 月 (版本 1.71)
更新 1.71.1:此更新解决了这个安全问题。
更新 1.71.2:此更新解决了这些问题。
下载:Windows:x64 Arm64 | Mac:通用 (Universal) Intel Apple 芯片 (silicon) | Linux:deb rpm tarball Arm snap
欢迎来到 Visual Studio Code 2022 年 8 月的发布。8 月是许多 VS Code 工程师休假的时间,但这个版本中仍然有许多更新,我们希望你会喜欢。
- 合并编辑器改进 - 更方便地在文本编辑器和合并编辑器之间切换。
- 扩展的编解码器支持 - 帮助在笔记本和 Webview 中显示嵌入的音频和视频。
- 文件重命名选择 - 按 F2 可以循环选择文件名、整个名称或文件扩展名。
- 新的代码操作 UI - 快速找到你正在寻找的代码操作。
- 终端更新 - 支持 fish 和 Git Bash 的 Shell 集成,新的平滑滚动。
- Jupyter 笔记本图像粘贴 - 在笔记本 Markdown 单元格中粘贴和预览图像文件。
- TypeScript 直播 - 在 YouTube 上观看 TS“速成班”或“技巧与窍门”。
- Live Preview 扩展 - Live Preview 现在支持多根 Web 项目。
- Markdown 语言服务器博客文章 - 了解 Markdown 支持如何迁移到语言服务器。
如果你想在线阅读这些发布说明,请访问 code.visualstudio.com 上的更新页面。
内测版本 (Insiders): 想尽快尝试新功能吗?你可以下载每晚发布的 Insiders 构建版本,并在最新更新可用后立即试用。
工作台
合并编辑器改进
从包含冲突的文件打开合并编辑器
现在,包含冲突的文件会自动显示一个在合并编辑器中打开按钮,以便在文本编辑器和合并编辑器之间切换。
打开时合并编辑器文件不会被修改
在合并编辑器中打开结果文件时,VS Code 不再修改该文件(之前会将冲突区域替换为 base)。相反,冲突标记会保留在文件中,但在结果视图中被隐藏。可以使用复选框将冲突标记替换为任一侧的内容、两侧内容的组合,或者通过取消选中复选框来替换为 base 内容。
恢复旧的冲突装饰器
旧的内联冲突装饰器不再被禁用,因此可以同时使用合并编辑器和内联体验。打开合并编辑器时,你只需在编辑器工具栏中单击一次即可获得先前的体验。
通过单击源代码管理视图中文件名旁边的同一图标,你可以完全跳过合并编辑器。
但是,你可以随时在新旧体验之间切换,甚至并行使用它们。
复选框改进
现在,我们确保冲突的复选框始终可见,即使冲突大于视口也是如此。使用颜色来强调未处理冲突的复选框。
差异算法改进
我们开始探索替代的差异算法,以提高冲突的质量。可以通过以下设置启用新的实验性差异算法:
"mergeEditor.diffAlgorithm": "experimental",
这个新算法尚未针对性能进行优化,但改进了许多边缘情况下的合并编辑器体验。
前景展望
在此版本中,我们重点关注了合并编辑器最重要的用户体验问题,并修复了许多 bug。如果你仍然对新的合并编辑器感到困惑,我们很乐意听取你的意见!请在我们的仓库中创建一个新问题,分享屏幕截图和你的合并编辑器状态(使用将合并编辑器状态复制为 JSON 命令)。我们非常感谢迄今为止收到的所有反馈,更多的反馈将帮助我们为所有人带来出色的合并编辑器体验。
我们未来的工作将专注于独立的基础视图、冲突最小化、差异算法改进以及其他改进。
FFmpeg 编解码器支持
之前 VS Code 中包含的 FFmpeg 共享库仅支持 FLAC
编解码器。在此版本中,库已更新以支持以下编解码器和容器列表。这将允许从笔记本或通过将音频和视频嵌入到 Webview 中的扩展播放更多音频和视频文件。
- Vorbis
- Flac
- H.264
- VP8
- WAV
- MP3
- Ogg
主题:fairyfloss(在 vscode.dev 上预览)
资源管理器重命名选择改进
在文件上启动重命名操作后,按 F2
键将在文件名、整个选择和文件扩展名之间循环切换,从而实现更灵活的纯键盘交互。
圆角按钮
我们更新了所有按钮,使其具有轻微的圆角,以更好地匹配我们的设计美学。
主题:Material Theme Palenight High Contrast
Windows 上的窗口控件覆盖 (Window Controls Overlay)
在版本 1.68 中,VS Code 通过实验性标志采用了 Electron 的 Window Controls Overlay 功能支持,并且默认关闭。我们已解决了影响 VS Code 的围绕此功能的剩余问题,使其能够默认对所有 Windows 用户启用。
Windows Controls Overlay 功能允许 Windows 11 上的 VS Code 用户选择贴靠布局将 VS Code 放置在桌面上。
树视图展开模式
设置工作台 > 树视图: 展开模式 (workbench.tree.expandMode
) 控制树节点是单击还是双击展开,该设置现在将应用于由扩展贡献的树视图。
编辑器
粘性滚动
粘性滚动在视口顶部显示当前作用域。此功能不再是实验性的,可以通过设置 editor.stickyScroll.enabled
启用。进一步的改进包括:
- 可以通过设置编辑器 > 粘性滚动: 最大行数 (
editor.stickyScroll.maxLineCount
) 来设置要显示的最大行数。默认最大值为 5 行。 - 你可以在粘性滚动中使用
Ctrl/Cmd + 点击
来导航到定义。
新的代码操作控件
我们彻底改进了代码操作控件。不再是一个简单的代码操作菜单,现在有一个自定义控件,可以更轻松地找到你想要的代码操作。
新控件还允许 VS Code 显示更多信息。例如,你现在可以将鼠标悬停在禁用的代码操作上,了解它们为何被禁用。
你还可以通过修改以下命令的键盘快捷键来自定义用于导航代码操作列表的快捷键:
selectNextCodeAction
selectPrevCodeAction
acceptSelectedCodeAction
展望未来,新的代码操作 UI 为进一步改进用户体验奠定了良好基础。如果你有任何建议,请务必告诉我们!
配置建议匹配
有一个新的设置可以配置 IntelliSense 过滤。默认情况下,第一个字符必须与单词开头匹配,例如 c
必须匹配 console
或 WebContext
,但不会匹配 description
。设置 editor.suggest.matchOnWordStartOnly
更改了此行为。禁用时,过滤会考虑任何匹配项 - 这会带来更多结果,但过滤仍按匹配质量进行。
在下面的短视频中,你可以看到当禁用 matchOnWordStartOnly
时,'dir' 的建议会包含更多项目,例如 'mkdir' 和 'makedirs'。
源代码管理
提交操作按钮改进
用户可以使用 git.postCommitCommand
设置全局控制在成功提交操作后执行的辅助操作(例如 pull
、sync
)。在此里程碑中,我们添加了一个新设置 git.rememberPostCommitCommand
,启用后可以按仓库记住上次执行的辅助操作。
终端
Shell 集成改进
本次发布对 Shell 集成进行了以下改进:
- Fish Shell 集成作为实验性功能提供,仅支持手动安装。有关如何安装,请参阅Shell 集成文档。
- 适用于 Windows 的 Git Bash Shell 集成作为实验性功能提供,仅支持手动安装。有关详细信息,请参阅手动安装部分。
- 支持常见的替代当前工作目录序列:
OSC 6 ; scheme://<cwd> ST
、OSC 1337 ; CurrentDir=<cwd> ST
、OSC 9 ; 9 ; <cwd> ST
。 - 更好地处理各种 Shell 集成的边缘情况。
平滑滚动
终端现在支持平滑滚动,它会在短时间内为滚动添加动画效果,帮助你在滚动后看到自己的位置,类似于编辑器和列表。要启用平滑滚动,请设置:
"terminal.integrated.smoothScrolling": true
下划线样式和颜色
现在支持使用最初由 kitty 终端首创的转义序列来设置下划线样式和颜色。对于支持的程序,只要它们将这些序列发送到 VS Code 终端,这些新的下划线就会自动显示。
此更改还包括在启用 GPU 加速时改进的下划线渲染,避免了带有长下伸字符的字形与下划线重叠的问题。
由于 ConPTY 中存在一个悬而未决的问题,目前 Windows 不支持下划线样式和颜色。
渲染改进
对终端渲染进行了多项改进:
-
修复了一个长期存在的 bug,该 bug 有时会在工作台放大或缩小时导致模糊!
-
当启用最小对比度并且需要翻转文本亮度以确保满足对比度时,文本的色相现在将保留。
-
新的主题键
terminal.inactiveSelectionBackground
可用于在终端获得焦点或未获得焦点时显示不同的选区背景颜色,以便更好地与编辑器保持一致。 -
自定义 Powerline 字形渲染改进了边缘裁剪。这在半圆形字符上最为明显,现在应该是平滑的曲线。
任务
窗口重新加载时重新连接
现在,窗口重新加载时会重新连接监视任务,当 VS Code 更新或扩展状态更改时,可以实现不间断工作。任务重新连接默认启用,但可以使用 task.reconnection
设置禁用。
调试
launch.json 中的 suppressMultipleSessionWarning 选项
当你尝试使用启动配置开始调试,但该配置已经有一个活动的调试会话时,VS Code 会在启动第二个实例之前显示警告对话框。这很容易意外发生,并且通常不是你打算做的。但是,如果运行同一配置的多个实例是你工作流程的一部分,你现在可以通过向 launch.json
配置文件添加 "suppressMultipleSessionWarning": true
来禁用此警告。
评论
过滤
评论视图现在有一个新的过滤器,你可以按评论文本和已解决/未解决状态进行过滤。
编辑器装饰
评论编辑器侧边栏装饰现在使用 codicons 并具有新的样式。
语言
TypeScript 4.8
VS Code 现在附带 TypeScript 4.8.2。此主要更新带来了类型检查和推理的语言改进。在工具方面,你也应该看到一些不错的性能改进和 bug 修复!
有关此更新的更多信息,请查看TypeScript 4.8 公告。
TypeScript 直播
如果你错过了 VS Code 关于 TypeScript 的直播,可以看看最近与Matt Pocock 的两场会话。
对扩展的贡献
Jupyter
笔记本图像粘贴
Jupyter 扩展现在允许用户将屏幕截图或图像文件粘贴到笔记本中的 Markdown 单元格中。目前仅支持 image/png
MIME 类型。要使用此功能,请添加/启用以下设置:
"ipynb.experimental.pasteImages.enabled": true
"editor.experimental.pasteActions.enabled": true
使用 Pylance 改进 Jupyter 笔记本的 IntelliSense
借助语言服务器协议中的更新,现在使用带 Python 内核的 Jupyter 笔记本时,Pylance 对 IntelliSense 的支持得到了极大改进。
不仅在笔记本文件中编写 Python 代码时会获得改进的自动补全选项,你还可以使用重构功能,例如提取变量、提取方法和重命名符号,以及自动导入和语义高亮显示。
主题:Horizon Extended(在 vscode.dev 上预览)
Live Preview
Live Preview 扩展现在正式支持多根工作区!虽然用户以前在技术上可以在多根工作区中使用 Live Preview,但现在有了更清晰的实现来支持它。
Live Preview 扩展现在为多根工作区中的每个根启动一个新服务器;因此,预览多根工作区时,相对于项目根目录的链接(以 /
开头的链接)将正常工作。
主题:GitHub Dark Dimmed(在 vscode.dev 上预览)
将鼠标悬停在 Live Preview 的状态栏指示器(位于右下角)上,可以查看扩展打开的服务器。在下面的图片中,为每个工作区启动了一个服务器(在端口 3000 和 3002 上),并且为不属于任何打开工作区的文件启动了另一个服务器(在端口 3004 上)。
安装 Live Preview 扩展并立即试用吧!📡✨🔎
GitHub Pull Requests and Issues
GitHub Pull Requests and Issues 扩展取得了更多进展,该扩展允许你处理、创建和管理拉取请求和问题。此版本的亮点包括:
- 拉取请求通知。
- 可以直接在拉取请求概览中解决/取消解决审查评论。
查看该扩展 0.50.0 版本的变更日志以查看其他亮点。
远程开发
远程开发扩展的工作仍在继续,该扩展允许你使用容器、远程机器或 适用于 Linux 的 Windows 子系统 (WSL) 作为功能齐全的开发环境。
你可以在远程开发发布说明中了解新的扩展功能和 bug 修复。
预览功能
文件移动和重命名时更新 Markdown 链接
厌倦了移动或重命名文件时意外破坏 Markdown 中的链接或图像?试试新的 markdown.experimental.updateLinksOnFileMove.enabled
设置!
启用此新的实验性设置后,当在 VS Code 资源管理器中移动或重命名文件时,VS Code 将自动更新 Markdown 中的链接和图像。
可以使用 markdown.experimental.updateLinksOnFileMove.enabled
设置启用此新行为。你可以使用 markdown.experimental.updateLinksOnFileMove.externalFileGlobs
控制受影响的文件类型。
试用一下这个新功能,并务必分享反馈。
设置配置文件 (Settings Profiles)
在过去几个月里,我们一直在努力在 VS Code 中支持设置配置文件 (Settings Profiles),这是社区最受欢迎的需求之一。此功能可通过 workbench.experimental.settingsProfiles.enabled
设置进行预览。请试用一下,并通过在 vscode 仓库中创建问题或在 问题 #116740 中评论来向我们提供反馈。
命令行界面
在此里程碑中,我们为设置配置文件添加了命令行界面 (CLI) 支持。你现在可以使用 --profile
参数传递配置文件的名称,并使用该配置文件打开文件夹或工作区。下面的命令行使用“Web Development”配置文件打开 web-sample
文件夹:
code ~/projects/web-sample --profile "Web Development"
如果指定的配置文件不存在,则会创建一个具有给定名称的新空配置文件。
临时设置配置文件
现在还支持临时设置配置文件 (Temporary Settings Profile),可以临时创建并关联到文件夹或工作区。一旦不再与任何文件夹或工作区关联,临时配置文件会自动删除。
在下面的短视频中,当用户打开一个文件夹并选择设置配置文件: 创建临时设置配置文件命令时,会创建一个新的“Temp 1”配置文件,并在配置文件列表中可见。关闭文件夹后,“Temp 1”配置文件将被删除。
你还可以使用 --profile-temp
开关从 CLI 创建临时设置配置文件并将其关联到文件夹或工作区。下面的命令行使用临时配置文件打开 try-out-sample 文件夹,关闭文件夹后该配置文件将被删除:
code ~/projects/try-out-sample --profile-temp
跨开发环境移动时随身携带更改
当你浏览 GitHub 或 Azure Repos 仓库(例如 https://vscode.dev/github/microsoft/vscode)时,可以使用继续工作 (Continue Working On) 命令选择不同的开发环境来使用你的仓库。
以前,如果你的虚拟工作区中有待处理的编辑,需要将它们推送到 GitHub 或 Azure Repos 才能在其他地方查看。在此里程碑中,我们已将编辑会话 (Edit Sessions) 集成到继续工作 (Continue Working On) 功能中,以便你的未提交更改自动随你前往目标开发环境,例如 GitHub codespace。
在下面的视频中,用户在使用 VS Code for the Web 时对 TypeScript 文件所做的更改,在他们创建新的 GitHub codespace 并切换到其中工作时得到了应用。
要试用此功能,请在你的设置中设置 "workbench.experimental.editSessions.enabled": true
,启用设置同步,并在 VS Code for the Web 或桌面版中运行编辑会话: 登录 (Edit Sessions: Sign In) 命令。
当你使用 VS Code for the Web 时,在使用继续工作 (Continue Working On) 时,你的未提交更改将随你转移到:
- GitHub Codespaces 中的新云托管环境
- 你的 GitHub 仓库的新本地克隆
- 具有相同虚拟 GitHub 仓库的本地 VS Code 实例
当你使用桌面版 VS Code 并结合远程仓库 (Remote Repositories) 扩展时,在使用继续工作 (Continue Working On) 时,你的未提交更改将随你转移到:
- GitHub Codespaces 中的云托管环境(通过GitHub Codespaces 扩展可用)
- 你的 GitHub 仓库的新本地克隆
- 容器卷中你的 GitHub 仓库的新克隆(通过开发容器 (Dev Containers) 扩展可用)
- https://vscode.dev
- 包含你的仓库克隆的现有本地文件夹
扩展创作
TerminalExitStatus.reason
扩展作者现在可以通过新的 TerminalExitReason
API 更好地了解终端退出的原因。
export enum TerminalExitReason {
Unknown = 0,
Shutdown = 1,
Process = 2,
User = 3,
Extension = 4
}
枚举设置 enumItemLabels 文档
设置编辑器中的枚举设置支持 enumItemLabels
键,它允许扩展作者指定在与 enum
值对应的下拉列表中显示的值。
主题:Light Pink(在 vscode.dev 上预览)
新的 activeWebviewPanelId 上下文键
新的 activeWebviewPanelId
上下文键跟踪当前获得焦点的 Webview 面板的 viewType
。你可以在 when 子句中使用它来在你的 Webview 获得焦点时启用命令或菜单项。
"when": "activeWebviewPanelId == 'markdown.preview'"
Web 上的 TypeScript 服务器插件
现在 Web 上支持TypeScript 语言服务插件。这适用于扩展使用 typescriptServerPlugins
贡献点贡献的插件。
要开始使用,你首先必须通过在 package.json
中除了 main
之外添加一个 browser
入口点来告诉 TypeScript 你的插件已启用 Web:
"main": "out/main.js",
"browser": "out/main.browser.js"
browser
入口点必须是一个 JavaScript 模块,它导出一个激活插件的默认函数。
export default function init(modules: { typescript: typeof import("typescript/lib/tsserverlibrary") }) {
...
};
请记住,在 Web 上,你的插件将在正常的 Web Worker 环境中运行,因此你不能使用 Node.js API,例如 fs
。
禁用的树项目
命令的启用条件解析为 false 的树项目将显示为禁用状态。
Markdown 语言服务器
VS Code 中的 Markdown 支持已重新实现为一个功能齐全的语言服务器。你可以在 Matt Bierner 的Markdown 语言服务器博客文章中了解他的心路历程,其中他描述了为 Markdown 文件添加编程语言功能,例如查找所有引用、重命名符号和断链检测。
'view/title' 菜单上下文即将更改
在 8 月,我们尝试将视图树的焦点和选择传递给贡献到树视图 view/title
菜单的命令。在此版本中,我们撤销了此更改,因为它导致一些扩展出现问题。我们希望在 9 月恢复此更改并发布。如果此更新会破坏你的扩展或你认为此行为不受欢迎,请在问题 #42903 中留言。
调试适配器协议
关于 'startDebugging' 请求的提案
目前,VS Code 支持多个并发调试会话,但调试适配器协议 (DAP) 仅涵盖单个会话。这意味着以编程方式创建新的调试会话不属于 DAP 的一部分,只能在 DAP 或调试适配器之外完成,通常是在包含调试适配器的调试扩展中完成。由此带来的一个结果是,多会话功能(例如调试子进程)对于仅重用调试适配器而不重用 VS Code 特定调试扩展的非 VS Code DAP 客户端来说并不容易获得。
为了改善这种情况,我们计划向 DAP 添加一个新的反向请求,以从调试适配器内部创建一个新的调试会话。经过几轮讨论,我们为 startDebugging
反向请求准备了一份提案。如果你是调试扩展或 DAP 客户端作者,并且对此 DAP 协议的添加感兴趣,我们很希望听到你的反馈。
工程
Electron 19 更新
在此里程碑中,我们完成了将 Electron 19 打包到 VS Code 桌面版的探索,并且感谢所有参与 Insiders 自托管的人员。此更新包含 Chromium 102.0.5005.167
和 Node.js 16.14.2
。
Windows 7 支持已终止
Microsoft 已于 2020 年 1 月终止对 Windows 7 的支持。然而,Electron 通过修补 libuv
库继续支持 Windows 7。随着 Electron 19 的更新,libuv
的补丁不再有效,我们建议用户更新到较新的 Windows 版本以使用 VS Code 桌面版。VS Code 将不再为 Windows 7 提供产品更新和安全修复。你可以在 support.microsoft.com 上了解有关升级 Windows 的更多信息。
值得关注的修复
- 115768 Windows: 不同显示器上的不同缩放级别无法在正确位置恢复窗口
- 133444 将设置选项卡拖到另一个编辑器组会清除搜索查询
- 140305 主窗口跨多个屏幕扩展时,重新打开无法恢复位置
- 146683 打开时窗口布局样式 bug
- 148492 对工作区文件使用平台无关路径
- 154963 修复了扩展演练中的 codicon 支持
- 155341 如果数据写入延迟,管道输入到 VS Code 会失败
- 156075 [Emmet] 按语言设置“在 Tab 键上触发扩展”
- 156385 运行最近命令显示解析的别名 -
ls
在执行的命令后附加--color=auto
感谢
最后但同样重要的是,向 VS Code 的贡献者们致以衷心的感谢。
问题跟踪
对问题跟踪的贡献
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- Simon Chan (@yume-chan)
- RedCMD (@RedCMD)
- ArturoDent (@ArturoDent)
拉取请求
对 vscode
的贡献
- @babakks (Babak K. Shandiz)
- 🎁 添加对
fish
shell 历史记录的支持 PR #156058 - 🎁 支持其他终端 CWD 转义序列 PR #157783
- 🎁 添加对
- @Balastrong (Leonardo Montini):为保持一致性,在 monaco 选择框中添加了光标指针 PR #152976
- @ChaseKnowlden
- 将 offline_access 添加到默认范围列表 PR #157453
- 修复 secret state 中的拼写错误 PR #157559
- @CsCherrYY (Shi Chen):支持在 reference-view API 中切换到/来自自定义视图 PR #152008
- @DingWeizhe (DingWeizhe):修复 sticky scroll 起始行号 PR #157466
- @dirondin (Mikhail Po):修复 #147912 (multipleSessionWarning debug option) PR #147914
- @emeric-martineau (Emeric MARTINEAU):修复简化 bash PROMPT_COMMAND 处理提交 PR #157631
- @etriebe (Eric Triebe):添加一个选项将 allowMidWordMatch 公开为设置 PR #152292
- @Evpok (Evpok):为 snaps 启用 Wayland 构建 PR #156551
- @FantasqueX (FantasqueX)
- 在 ipc.ts 中用 Cancellation Error 替换已弃用的 canceled PR #156965
- 修复 files.ts 中的拼写错误 PR #157280
- @ferdnyc (Frank Dana):RPM 打包:使用标准宏 PR #153247
- @gjsjohnmurray (John Murray)
- 修正 Windows 次显示器上使用不同缩放因子时的初始窗口大小 (#_146499) PR #155589
- 在任务栏中显示问题报告窗口 (#_130497) PR #156141
- 不要链接到已弃用的
terminal.integrated.automationShell.*
设置 (#_156481) PR #156486 - 为
editor.quickSuggestions
设置提供有效的 markdown 特定的默认值 (#_156686) PR #156689 - 为 SCM 编辑器验证消息添加关闭按钮 (#_143036) PR #158131
- @juihanamshet1 (Jui Hanamshet):如果移除括号,则缩小范围。如果添加括号,则扩大范围。 PR #156313
- @kidonng (Kid):修复 commandline 为空时的 fish 集成脚本 PR #157778
- @MaddyDev (Maddy):在 validExtensions 上检查小写值 PR #158319
- @MonadChains (MonadChains):修复达到终端边界时的选择问题 PR #156071
- @pingren (Ping)
- 修复 PWA 进入全屏时的 isStandalone 问题 PR #156424
- 为 macOS 上 terminalProcess getCwd Unicode 路径添加 env PR #157377
- @r3m0t (Tomer Chachamu):在扩展开发期间继承更多设置 PR #151872
- @Semesse (Semesse)
- 在资源管理器中拖放文件时跳过对嵌套子项的折叠状态检查 PR #156759
- 修复 exthost 语言特性测试 PR #158782
- @ssigwart (Stephen Sigwart):修复搜索编辑器标题未更新的问题 PR #156011
- @SvanT (Svante Boberg):清理已释放的终端 PR #156326
- @zgracem (Amy Grace)
- 为 fish 添加 shell 集成脚本 PR #157291
- 改进 vi 模式下的 fish shell 集成 PR #158127
- @zhuowei:simpleFileDialog:保存时如果目录不存在,询问用户是否创建 PR #152536
对 vscode-extension-samples
的贡献
- @gjsjohnmurray (John Murray):lsp-embedded-request-forwarding:不要编码 map 中使用的 uri(修复 #682) PR #683
对 devcontainers/cli
的贡献
- @leopoldsedev (Christian Leopoldseder):在 localEnv/containerEnv 扩展中实现可选的默认值 PR #51