Visual Studio Code 2022年8月版本的详细指南

539 阅读19分钟

2022年8月(1.71版)

欢迎来到Visual Studio Code的2022年8月版本。八月是许多VS Code的工程师休假的时候,但这个版本仍有许多更新,我们希望你会喜欢。

如果你想在线阅读这些发布说明,请到code.visualstudio.com上的更新

内部人员:想尽快试用新功能吗?你可以下载每晚的Insidersbuild,一旦有了最新的更新就可以尝试。

工作台

合并编辑器的改进

从有冲突的文件中打开合并编辑器

有冲突的文件现在会自动显示 "在合并编辑器中打开"按钮,以便在文本和合并编辑器之间转换。

Conflicting files shows a hint to open in the merge editor

合并编辑器文件在打开时不被修改

当在合并编辑器中打开结果文件时,VS Code不再对其进行修改(冲突区域被替换成基数)。相反,冲突标记保留在文件中,但在结果视图中被隐藏。复选框可以用来将冲突标记替换成任何一方、双方的组合,或者通过取消复选,替换成基数。

恢复旧的冲突装饰器

旧的内联冲突装饰器不再被禁用,所以合并编辑器和内联经验可以一起使用。当合并编辑器打开时,你可以通过点击编辑器工具栏中的一个按钮来获得以前的经验。

Use Open File in the merge editor to see old decorators

通过点击源控制视图中文件名旁边的同一个图标,你可以完全跳过合并编辑器。

然而,你可以随时在新旧体验之间切换,甚至可以并行使用它们。

The new and old merge experiences can be used at the same time

复选框的改进

我们现在确保冲突的复选框总是可见的,即使冲突比视口大也是如此。颜色被用来强调未处理的冲突的复选框。

差分算法的改进

我们开始探索替代性的扩散算法,以提高冲突的质量。一个新的实验性扩散算法可以通过以下设置启用。

"mergeEditor.diffAlgorithm": "experimental",

这种新的算法还没有在性能上进行优化,但对于许多边缘案例来说,它改善了合并编辑器的体验。

继续前进

在这个版本中,我们专注于合并编辑器中最重要的用户体验问题,并修复了许多错误。如果你仍然发现自己对新的合并编辑器感到困惑,我们很想听到你的意见请在我们的repo中创建一个新问题,分享截图和你的合并编辑器状态(使用复制合并编辑器状态为JSON命令)。我们非常感谢到目前为止得到的所有反馈,更多的反馈将帮助我们使合并编辑器的体验对每个人都很好。

我们未来的工作将集中在一个独立的基础视图冲突最小化,差异算法的完善,以及其他改进

支持FFmpeg编解码器

作为VS代码一部分的FFmpeg共享库以前只支持FLAC 编解码器。在这个版本中,该库已被更新,以支持以下编解码器和容器的列表。这将使更多的音频和视频文件可以从笔记本上播放,或者通过扩展嵌入音频和视频到webviews。

  • Vorbis
  • Flac
  • H.264
  • VP8
  • WAV
  • MP3
  • 奥格

A notebook playing an mp4 video file

资源管理器重命名选择的改进

在对一个文件启动重命名操作后,按F2 键将循环查看文件名、整个选择和文件扩展名,以便于更灵活地进行纯键盘互动。

A file in the Explorer being renamed demonstrating that subsequent presses of the F2 key toggle selecting various pieces of the file name

圆润的按钮

我们已经更新了所有的按钮,使其有一个轻微的圆角,以更好地配合我们的设计美学。

An example of a button with rounded corners

主题。材料主题Palenight高对比度

窗口控件叠加在窗口上

在1.68版中,VS Code采用了Electron的窗口控件叠加功能支持,并将其放在一个实验性标志后面,默认为关闭。我们已经解决了影响VS Code的剩余问题,允许我们在Windows上为所有用户默认启用它。

窗口控件叠加功能让Windows 11上的VS Code用户可以选择Snap Layouts来放置VS Code在他们的桌面上。

Windows Snap Layouts control in the right of the VS Code title bar

树状视图扩展模式

设置Workbench > Tree:Expand Mode(workbench.tree.expandMode), 控制树节点是在单击还是双击时展开,现在由扩展程序贡献的树视图也会尊重这个设置。

编辑

粘性滚动

Sticky scroll在视图端口的顶部显示当前范围。该功能不再是试验性的,可以通过设置启用,editor.stickyScroll.enabled 。进一步的改进是:

  • 可以通过Editor > Sticky Scroll设置显示的最大行数**。最大行数**(editor.stickyScroll.maxLineCount) 设置。默认的最大行数是5行。
  • 你可以在粘性滚动中使用Ctrl/Cmd + Click ,以导航到一个定义。

Sticky scroll Ctrl/Cmd click to go to a symbol definition

新的代码动作控制

我们对代码动作控件进行了彻底的修改。现在有一个自定义的控件,取代了简单的代码动作菜单,使你更容易找到你想要的代码动作。

The new Code Action control showing Quick Fixes and refactorings

新的控件还可以让VS Code浮现出额外的信息。例如,你现在可以将鼠标悬停在被禁用的代码动作上,了解它们被禁用的原因。

Hovering over a disabled Code Action to understand why it is disabled

你还可以通过修改以下命令的键合来定制用于浏览代码动作列表的键盘快捷键。

  • selectNextCodeAction
  • selectPrevCodeAction
  • acceptSelectedCodeAction

展望未来,新的代码动作用户界面为进一步改善用户体验提供了一个很好的基础。如果您有任何建议,请务必让我们知道!

配置建议匹配

有一个新的设置来配置IntelliSense过滤。默认情况下,第一个字符必须与一个词的开头相匹配,例如,c 必须与consoleWebContext 相匹配,但不会与description 相匹配。editor.suggest.matchOnWordStartOnly 的设置改变了这种行为。当禁用时,过滤会考虑到任何匹配 - 这导致更多的结果,但过滤仍然发生在匹配质量上。

在下面的短视频中,你可以看到,当matchOnWordStartOnly 被禁用时,"dir "的建议包括更多的项目,如 "mkdir "和 "makedirs"。

IntelliSense demo with and without match on word start

来源控制

提交动作按钮的改进

用户可以通过git.postCommitCommand 的设置来全局控制提交操作成功后执行的二级动作(例如:pull,sync )。在这个里程碑中,我们增加了一个新的设置git.rememberPostCommitCommand ,可以启用它来记住每个版本库最后执行的二级操作。

终端

Shell集成的改进

这个版本对shell集成做了以下改进:

  • Fish shell集成仅作为实验性的手动安装。关于如何安装,请参见Shell集成文档
  • Git bash for Windows shell集成仅作为实验性的手动安装提供。详情请见手动安装部分
  • 支持常见的替代当前工作目录序列。OSC 6 ; scheme://<cwd> ST,OSC 1337 ; CurrentDir=<cwd> STOSC 9 ; 9 ; <cwd> ST
  • 更好地处理各种shell集成的边缘情况

平滑滚动

终端现在支持平滑滚动,它将在短时间内对滚动进行动画处理,以帮助你在滚动后看到你的位置,与编辑器和列表类似。要启用平滑滚动,请设置:

"terminal.integrated.smoothScrolling": true

下划线样式和颜色

现在支持下划线样式和颜色,使用最初由kitty终端开创的转义序列。对于支持的程序,这些新的下划线应该会自动亮起,只要它们将这些序列发送到VS Code终端。

The terminal can now display straight, double, curly, dotted, and dashed underlines in any color

这一变化包括在启用GPU加速时改进下划线的渲染,避免了字形的长下划线和下划线的重叠。

An example showing that characters with descenders such as 'g' and 'p' no longer overlap with underlines

由于ConPTY的一个悬而未决的问题,目前在Windows上不支持下划线样式和颜色。

渲染的改进

对终端渲染进行了一些改进。

  • 一个长期存在的错误,即当工作台被放大或缩小时,有时会导致模糊不清,现在已经被修复了

    Text is now more crisp as canvas is no longer stretched, which caused anti-aliasing to look poorly

  • 当启用最小对比度,并且需要翻转文本亮度以确保满足该比例时,文本的色调现在将被保留。

    Bold yellow text on red in some themes will now display as dark yellow instead dark grey

  • 新的主题键terminal.inactiveSelectionBackground ,无论终端是否被聚焦,都可以显示不同的选择背景颜色,以更好地与编辑器保持一致。

    Most themes now dim the selection background color when not focused

  • 自定义Powerline字形的渲染改进了边缘剪切。这在半圆形的字符上最明显,现在应该是一条平滑的曲线。

    Powerline glyphs are no longer cut off on the edges

任务

窗口重新加载时的重新连接

观察任务现在在窗口重载时被重新连接,当VS Code更新或扩展的状态改变时,可以不间断地工作。任务的重新连接在默认情况下是启用的,但可以通过task.reconnection 设置来禁用。

调试

在 launch.json 中抑制MultipleSessionWarning选项

当你试图用一个启动配置开始调试,但该配置已经有一个活动的调试会话,VS Code会在启动第二个实例前显示一个警告对话框。这很容易误操作,通常不是你想做的。然而,如果运行同一配置的多个实例是你工作流程的一部分,你现在可以通过在你的launch.json 配置文件中添加"suppressMultipleSessionWarning": true 来禁用这个警告。

评论

筛选

评论视图有一个新的过滤器,你可以按评论文本和已解决/未解决的状态来过滤:

Comments filtering

编辑器装饰

评论编辑器的沟槽装饰现在使用代码并有新的风格:

Comments editor gutter decoration

语言

对扩展的贡献

Jupyter

笔记本图片粘贴

Jupyter扩展现在可以让用户将屏幕截图或图片文件粘贴到笔记本内的Markdown单元中。目前只支持image/png mime类型。要使用该功能,请添加/启用以下设置。

"ipynb.experimental.pasteImages.enabled": true
"editor.experimental.pasteActions.enabled": true

Pasting an image file into a Markdown cell in a Jupyter notebook.

使用Pylance改进Jupyter笔记本的IntelliSense

在使用Pylance时,对带有Python内核的Jupyter笔记本的IntelliSense支持现在要好得多,这要归功于语言服务器协议的更新,包括笔记本支持。

在笔记本文件中编写Python代码时,你不仅可以得到改进的自动完成选项,而且还可以使用重构功能,如提取变量、提取方法和重命名符号,以及自动导入和语义突出。

Writing Python code showing auto import, auto complete suggestions, extract method, and a rename symbol functionality.

主题:Horizon Extended(在vscode.dev上预览)

实时预览

Live Preview扩展现在正式支持多根工作空间!虽然用户以前在技术上可以在多根工作空间中使用Live Preview,但现在有一个更简洁的实现方式支持它。

Live Preview扩展现在为你的多根工作空间的每个根启动一个新的服务器;因此,相对于你的项目根的链接(以/ 开始的链接)在预览多根工作空间时将正常工作。

Live Preview multi-root demo

你可以通过悬停在实时预览的状态栏指标(位于右下角)来查看被扩展打开的服务器。在下面的图片中,每个工作区都启动了一个服务器(在3000和3002端口),还有一个服务器是为一个不属于任何开放工作区的文件生成的(在3004端口)。

Live Preview multi-root ports displayed from the Status bar indicator

安装实时预览扩展,今天就试试吧!📡✨🔎

GitHub拉动请求和问题

GitHub拉动请求和问题扩展有了更多进展,它允许你处理、创建和管理拉动请求和问题。这个版本的亮点包括:

  • 拉动请求的通知。
  • 审查意见可以直接从拉动请求概览中解决/未解决。

查看扩展的0.50.0版本的更新日志,看看其他亮点。

远程开发

远程开发扩展的工作仍在继续,它允许你使用容器、远程机器或Windows Subsystem for Linux(WSL)作为一个全功能的开发环境。

你可以在远程开发发布说明中了解新的扩展功能和错误修复。

预览功能

在文件移动和重命名时更新Markdown链接

厌倦了当你移动或重命名文件时不小心破坏了你的Markdown中的链接或图片?试试新的markdown.experimental.updateLinksOnFileMove.enabled 设置吧!

启用这个新的实验性设置后,当文件在VS Code Explorer中被移动或重命名时,VS Code将自动更新Markdown中的链接和图片:

Markdown file links are updated on move and rename

这个新的行为可以通过markdown.experimental.updateLinksOnFileMove.enabled 设置来启用。你可以使用markdown.experimental.updateLinksOnFileMove.externalFileGlobs 来控制受影响的文件类型。

试一试这个新功能,一定要分享反馈。

设置配置文件

在过去的几个月里,我们一直在努力支持VS Code中的设置配置文件,这是社区中最受欢迎的要求之一。这项功能可以通过workbench.experimental.settingsProfiles.enabled 设置进行预览。试用它,并通过在vscode仓库中创建问题或在问题#116740中发表评论来给我们反馈。

命令行界面

在这个里程碑中,我们为设置配置文件增加了命令行接口(CLI)支持。你现在可以使用--profile 参数传递配置文件的名称,并使用该配置文件打开一个文件夹或一个工作区。下面的命令行用 "Web开发 "配置文件打开web-sample 文件夹。

code ~/projects/web-sample --profile "Web Development"

如果指定的配置文件不存在,将创建一个具有给定名称的新空配置文件。

临时设置配置文件

现在还支持临时设置配置文件,它可以被创建并与一个文件夹或工作区临时关联。一旦临时配置文件不与任何文件夹或工作区相关联,就会自动删除。

在下面的简短视频中,当用户打开一个文件夹并选择 "设置配置文件"。创建临时设置配置文件命令,一个新的'临时1'配置文件被创建,并在配置文件列表中可见。当文件夹被关闭时,"Temp 1 "配置文件被删除。

Temporary Settings Profile demo

你也可以创建一个临时的设置配置文件,并使用--profile-temp 开关从CLI将其与一个文件夹或工作区相关联。下面的命令行打开了带有临时配置文件的try-out-sample文件夹,在关闭该文件夹后会被删除。

code ~/projects/try-out-sample --profile-temp

在不同的开发环境中移动时,将你的变化带在身边

当你在浏览GitHub或Azure Repos仓库(如vscode.dev/github/micr…你可以使用 继续工作命令来选择不同的开发环境来使用你的仓库。

以前,如果你在虚拟工作区有待处理的编辑,你需要把它们推送到GitHub或Azure Repos,以便在其他地方查看它们。在这个里程碑中,我们在 "继续工作"功能中增加了**"编辑会话**"的集成,这样你未提交的修改就会自动进入你的目标开发环境,比如GitHub代码空间。

在下面的视频中,用户在使用VS Code for the Web时对TypeScript文件所做的修改,在他们创建并切换到新的GitHub代码空间工作时被应用。

Continue On in GitHub Codespaces

要尝试这一点,在设置中设置"workbench.experimental.editSessions.enabled": true ,启用设置同步,并运行**编辑会话。**在 VS Code for the Web 或桌面上运行编辑会话:登录命令。

当你使用VS Code for the Web时,当你使用Continue Working Onin时,你未提交的修改将随你而去:

  • 在GitHub Codespaces中的一个新的云托管环境
  • 一个新的本地克隆的GitHub仓库
  • 具有相同虚拟 GitHub 仓库的本地 VS Code 实例

当你使用带有远程仓库扩展的桌面VS Code时,当你使用Continue Working Onin时,你未提交的修改将随你而去:

  • 在GitHub Codespaces中的云托管环境(可通过GitHub Codespaces扩展)。
  • 一个新的本地克隆的 GitHub 仓库
  • 容器卷中的GitHub仓库的新克隆(可通过远程 - 容器扩展)。
  • vscode.dev
  • 一个现有的本地文件夹,其中包含一个克隆的仓库

扩展授权

TerminalExitStatus.reason

扩展作者现在可以通过新的TerminalExitReason API更好地了解终端退出的原因:

export enum TerminalExitReason {
  Unknown = 0,
  Shutdown = 1,
  Process = 2,
  User = 3,
  Extension = 4
}

枚举设置 enumItemLabels 文档

设置编辑器中的枚举设置支持enumItemLabels 键,这使得扩展作者可以指定在下拉列表中显示与enum 值对应的值。

Example of enumItemLabels with a mock setting. The select box displays the label value, and the dropdown options display both the label value and the enum value, though the enum values are rendered less prominently.

新的activeWebviewPanelId上下文键

新的activeWebviewPanelId 上下文键跟踪当前聚焦的webview面板的viewType 。你可以在when条款中使用它,以便在你的webview被聚焦时启用命令或菜单项。

"when": "activeWebviewPanelId == 'markdown.preview'"

网络上的TypeScript服务器插件

TypeScript语言服务插件现在在网络上得到了支持。这适用于使用typescriptServerPlugins 贡献点的扩展所贡献的插件。

要开始,你必须首先告诉TypeScript你的插件是web启用的,除了main ,还要在你的package.json 中添加一个browser 的入口点:

"main": "out/main.js",
"browser": "out/main.browser.js"

browser 入口必须是一个 JavaScript 模块,导出一个默认的函数来激活该插件:

export default function init(modules: { typescript: typeof import("typescript/lib/tsserverlibrary") }) {
  ...
};

请记住,在web上,你的插件将在一个正常的web工作者环境中运行,所以你不能使用Node.js的API,如fs

禁用的树项目

带有命令的树项,如果其启用子句解析为false,将被显示为禁用。

Markdown语言服务器

VS Code中的Markdown支持已经被重新实现,成为一个全功能的语言服务器。你可以在Matt BiernerMarkdown语言服务器博文中读到他的历程,他描述了为Markdown文件添加编程语言功能,如查找所有引用重命名符号和断链检测。

即将对 "视图/标题 "菜单的上下文进行修改

在8月,我们尝试将视图的焦点和选择传递给贡献给树状视图的view/title 菜单的命令。在这个版本中,我们恢复了这个变化,因为它给一些扩展带来了问题。我们想把这个变化带回来,在9月份发布。如果这个更新会破坏你的扩展,或者你认为这个行为是不可取的,请在问题#42903中留下评论。

调试适配器协议

关于'startDebugging'请求的建议

现在VS Code支持多个并发的调试会话,但调试适配器协议(DAP)只包括一个会话。这意味着以编程方式创建新的调试会话不是DAP的一部分,只能在DAP或调试适配器之外进行,通常是在包含调试适配器的调试扩展中。这样做的后果是,多会话功能,如调试子进程,对于只重用调试适配器而不重用VS Code特定调试扩展的非VS Code DAP客户来说,并不容易使用。

为了改善这种情况,我们计划给DAP增加一个新的反向请求,以便从调试适配器内部创建一个新的调试会话。经过几轮的讨论,我们准备了一个startDebugging 反向请求的建议。如果你是一个调试扩展或DAP客户端的作者,并且对这个DAP协议的添加感兴趣,我们将感谢你的反馈。

工程

电子19的更新

在这个里程碑中,我们完成了将Electron 19捆绑到VS Code桌面的探索,我们要感谢参与在Insiders上自我托管的所有人。这次更新带有 Chromium102.0.5005.167 和 Node.js16.14.2

Windows 7的支持已经结束

微软在2020年1月结束了对Windows 7的支持。然而,Electron通过修补libuv 库继续支持Windows 7。随着Electron 19的更新,libuv 补丁不再起作用,我们建议用户更新到更新的Windows版本,以便使用VS Code桌面版。VS Code将不再提供Windows 7上的产品更新和安全修复。你可以在support.microsoft.com了解更多关于升级Windows的信息。

值得注意的修复

  • 115768Windows:不同显示器上的不同缩放级别无法将窗口恢复到正确位置
  • 133444将设置选项卡拖到另一个编辑器组中会清除搜索查询
  • 140305主窗口在多个屏幕上扩展,重新打开时不能恢复位置
  • 146683打开时的窗口布局风格错误
  • 148492在工作区文件中使用与平台无关的路径
  • 154963修复了扩展演练中的密码器支持问题
  • 155341如果数据写入延迟,管道进入VS代码失败
  • 156075[Emmet]按语言 "在标签上触发扩展"。
  • 156385运行最近的命令显示已解决的别名 -ls--color=auto 附加到已执行的命令上