2021年6月(版本1.58)

更新 1.58.1: 此更新解决了这些安全问题

更新 1.58.2: 本次更新解决了这些问题

下载:Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


欢迎来到2021年6月发布的Visual Studio Code。此版本中有许多更新,我们希望您会喜欢,一些关键亮点包括:

如果您想在线阅读这些发布说明,请访问更新code.visualstudio.com上。

加入我们的直播,在VS Code团队的直播中,于7月13日星期二太平洋时间上午8点(伦敦时间下午4点)观看本次发布的新功能演示,并实时向我们提问。

内部人员:想要尽快尝试新功能吗?您可以下载每晚的内部人员版本,并在更新可用时立即尝试最新更新。

工作台

工作区信任

工作区信任功能是在1.57版本中引入的一项重大变化,我们相信开发者能够安全地浏览代码是非常重要的,即使他们对源代码不熟悉。在这个里程碑中,我们一直在吸收客户的反馈,并专注于修复问题和跟进建议。

为了帮助人们发现可以自定义工作区信任的用户设置,工作区信任编辑器的标题中新增了一个配置您的设置操作。此操作将打开按@tag:workspaceTrust过滤的设置编辑器。

在工作区信任编辑器中配置您的设置操作

说到设置,有一个新的设置可以配置当横幅出现时,指示当前窗口处于受限模式。类似于security.workspace.trust.startupPrompt设置,新的security.workspace.trust.banner允许你在熟悉了工作区信任功能后禁用横幅,并且不需要提醒你正在受限模式下工作。默认情况下,此横幅每个工作区显示一次,并保持显示直到被关闭("untilDismissed")。显示受限模式横幅的其他选项是"always""never"

您可以了解更多关于工作区信任的原理和开发在最近的工作区信任博客文章中。文章解释了受限模式如何帮助保护您免受意外和潜在恶意的代码执行,并提供了设置开发机器的提示,以便您可以快速且安全地工作。

设置编辑器

此迭代通过将属性呈现为复选框列表,为具有固定数量布尔属性的设置对象添加了对设置编辑器的支持。

设置编辑器布尔对象渲染器演示

此迭代还通过使用编辑模式下的下拉菜单而不是纯文本框,增加了对枚举数组的额外支持。

设置编辑器枚举数组渲染器演示

临时工作区

现在有一种新类型的工作空间,称为“临时”工作空间,它的行为与通常的工作空间不同,具体如下:

  • 重新启动或重新加载VS Code将不会尝试再次打开工作区。
  • 设置为临时的工作空间不会显示在最近打开的工作空间列表中。

通过在工作区的.code-workspace文件中添加设置为truetransient属性来指定一个临时工作区:

{
  "folders": [],
  "transient": true
}

设置同步

现在有一个故障排除视图用于设置同步,其中包含所有日志和最后的同步状态。您可以通过运行命令Settings Sync: Show Synced Data并打开视图子菜单并勾选故障排除来访问此视图:

设置同步故障排除命令在设置同步视图菜单中

主题: GitHub Light Theme

搜索最大结果设置

有一个新的设置,search.maxResults,它允许你设置文本搜索结果的最大数量。默认值是20,000,比以前增加了10,000。当你加载大量搜索结果时,可能会看到一些缓慢的情况。

集成终端

编辑器区域中的终端

终端现在可以在编辑器区域创建或移动到编辑器区域,实现了一个多维网格布局,无论面板状态如何,该布局都会持久存在并保持可见。

要在编辑器区域使用终端,有几种选择:

  • 通过在编辑器区域创建终端命令创建。
  • 从标签列表中拖动一个终端到编辑器。
  • 运行将终端移动到编辑器区域,并聚焦于终端。
  • 在终端标签的上下文菜单中选择移动到编辑器区域

编辑器区域中的4个终端以2x2网格布局

新的terminal.integrated.defaultLocation设置可以设置为editor,以默认将新创建的终端定向到编辑器区域。

显式设置画布渲染器

在之前的版本中,我们默认启用了WebGL终端渲染器,并用更简单的terminal.integrated.gpuAcceleration设置替换了terminal.integrated.rendererType。不幸的是,一些机器在使用WebGL时体验下降,唯一的选择是完全禁用GPU加速并转向速度较慢的基于DOM的渲染器。现在,terminal.integrated.gpuAcceleration可以明确设置为canvas,这对于这些环境可能更为可取。

新的terminal.integrated.showLinkHover设置允许你禁用终端中的链接悬停。如果你觉得终端链接的悬停分散注意力,这可能很有用。

编辑器

编辑器滚动条自定义

有新的设置可以自定义编辑器的滚动条:

  • 使用editor.scrollbar.horizontaleditor.scrollbar.vertical控制滚动条的可见性。
  • 使用editor.scrollbar.horizontalScrollbarSizeeditor.scrollbar.verticalScrollbarSize更改它们的厚度。
  • 确定点击是逐页滚动还是跳转到点击位置(默认行为),使用editor.scrollbar.scrollByPage

编辑器的垂直滚动条宽度设置为30像素。

垂直编辑器滚动条宽度设置为30像素

语言

Markdown 预览中的数学公式渲染

VS Code 的 内置 Markdown 预览 现在可以使用 KaTeX 渲染数学公式。

内置Markdown预览中的数学公式渲染

内联数学方程用单美元符号包裹:

Inline math: $x^2$

您可以使用双美元符号创建数学公式块:

Math block:

$$
\displaystyle
\left( \sum_{k=1}^n a_k b_k \right)^2
\leq
\left( \sum_{k=1}^n a_k^2 \right)
\left( \sum_{k=1}^n b_k^2 \right)
$$

你可以设置 "markdown.math.enabled": false 来禁用此功能。

Markdown 数学公式语法高亮

VS Code 现在还支持在 Markdown 源代码中高亮显示数学公式:

Markdown文件中数学方程的语法高亮

这既适用于普通的Markdown文件,也适用于笔记本中的Markdown单元格。

TypeScript 4.3.5

我们现在捆绑了TS 4.3.5。这个次要更新修复了一些重要的错误,包括在JSX中自动导入不起作用

调试

记住每个文件选择的环境

当没有launch.json文件时启动调试,VS Code 会查看活动编辑器,并根据编辑器的语言模式决定使用哪个调试扩展。然而,对于某些语言,可能有多个调试扩展,在这种情况下,VS Code 会提示您选择其中一个。为了使调试更加顺畅,VS Code 现在会记住每个文件选择的调试器,这样下次启动调试时,会话将无需任何提示即可开始。

在下面的短视频中,用户选择了Node.js调试环境来调试单个JavaScript文件,并且当为该文件启动新的调试会话时,该选择会被记住。

首次启动调试时会出现环境提示。下次调试会话开始时不会出现提示

调试控制台建议不再在按下Enter键时被接受

调试控制台的建议不再在Enter上接受,而只在Shift+EnterTab上接受。以前,当您只想评估调试控制台输入中已输入的内容时,很容易意外接受建议。

为了使Tab键作为接受建议的方式更容易被发现,VS Code现在在调试控制台输入中有一个提示状态栏("插入(Tab)")。

调试控制台输入框显示在底部渲染的状态栏,显示“插入(Tab)”

对扩展的贡献

Jupyter 交互式窗口

我们已开始在笔记本生态系统之上提供内置的交互式窗口体验,并且Jupyter扩展已在设置jupyter.enableNativeInteractiveWindow后采用了该功能。如果启用了该功能,当从Python文件运行代码或直接从命令面板启动时,Jupyter扩展将打开内置编辑器,而不是webview实现。内置编辑器与您自定义的键绑定/键映射或语言扩展一起工作,因为它与工作台深度集成。

Jupyter内置交互窗口演示

Jupyter笔记本调试

我们一直在努力支持在Jupyter笔记本中进行调试,这样你就可以在笔记本单元格中设置断点,逐步执行单元格,并使用所有其他VS Code调试器功能。这目前是实验性的,但你可以通过设置"jupyter.experimental.debugging": true,在你选择的内核中安装ipykernel的第6版,然后点击笔记本工具栏中的调试按钮来尝试。

Jupyter调试

远程仓库

在此次迭代中,我们主要专注于远程仓库扩展的错误修复和一些性能改进,以及与GitHub Pull Requests and Issues扩展的更好集成。此外,您现在可以从远程资源管理器中的远程仓库视图中移除远程仓库,并且更好地支持打开带有行范围的\blob URL。

GitHub 拉取请求和问题

本次迭代的重点是修复GitHub Pull Requests and Issues扩展中的错误。查看更新日志以了解亮点。

远程开发

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

1.58版本的功能亮点包括:

  • 选项,仅为转发的端口打开一次浏览器。
  • devcontainer.json 支持缓存镜像。
  • Dev Containers 现在检查 "hostRequirements"。

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

实时预览

我们开发了一个Live Preview扩展,它为网页开发预览提供了一个本地服务器!🎉

它具有编辑器内的浏览器预览、实时预览刷新(在文件更改或保存时)、多根支持等功能!

实时预览快速演示

该扩展还具有一个Live Preview任务,它运行一个持久服务器,并允许您查看服务器流量及其相关文件。

实时预览任务

要了解更多关于它能做什么的信息,你可以在Marketplace中找到详细信息,或者查看其仓库

预览功能

TypeScript 4.4 支持

此版本包括对即将发布的TypeScript 4.4的初步支持。您可以在TypeScript博客上阅读更多关于TypeScript 4.4的新语言功能和改进的信息。

要开始使用 TypeScript 4.4 的夜间构建版本,请安装 TypeScript Nightly 扩展

请分享您的反馈,并告诉我们您在使用TypeScript 4.4时是否遇到任何错误。

在窗口之间移动终端

现在可以通过在一个窗口中使用Terminal: Detach Session分离终端,然后在另一个窗口中使用Terminal: Attach to Session附加终端,从而在窗口之间移动终端。将来,这将有助于实现跨窗口的拖放功能!

扩展开发

详细的完成项标签

我们添加了新的API,用于更详细和结构化的完成项标签。您现在可以使用vscode.CompletionItemLabel类型来指定项的标签,它允许您指定标签、详细信息和描述。

这些新属性允许语言扩展显示签名或限定符,但其他完成提供者也可以利用这一点。例如,GitHub Pull Request and Issues 扩展现在显示全名以及别名。

使用全名的Github别名补全

模态消息的详细信息

用于显示模态信息、警告和错误消息的API现在支持提供详细信息。详细信息文本在实际消息下方呈现,且不如实际消息显眼。

带有详细信息的模态对话框

上面的对话框是通过以下代码片段生成的。请注意,详细文本仅支持模态消息(modal: true)。

vscode.window.showInformationMessage('This is the message', {
  modal: true,
  detail:
    'This is the detail. Rendered less prominent, but with more space for, well, details.'
});

贡献终端配置文件

终端配置文件现在可以由扩展提供,并且它们将显示在配置文件选择器中:

贡献的个人资料将与检测到和配置的终端个人资料一起显示

要贡献终端配置文件,您需要做三件事:

首先,将贡献添加到您的package.json中:

"contributes": {
  "terminal": {
    "profiles": [
      {
        "title": "Custom Profile",
        "id": "custom_profile"
      }
    ]
  },
}

接下来,添加激活事件,以便在用户请求配置文件时激活扩展:

"activationEvents": [
  "onTerminalProfile:custom_profile"
]

最后,注册终端配置文件提供者,它将返回用于创建终端的选项集。这些选项可以是标准的基于进程的TerminalOptions或自定义的ExtensionTerminalOptions

vscode.window.registerTerminalProfileProvider('custom_profile', {
  provideTerminalProfile() {
    return {
      options: {
        name: 'Profile from extension',
        shellPath: 'cmd.exe'
      }
    };
  }
});

更改基于ExtensionTerminalOptions的终端名称

新的Pseudoterminal.onDidChangeName事件允许更改使用ExtensionTerminalOptions创建的终端的名称。

const writeEmitter = new vscode.EventEmitter<string>();
const nameEmitter = new vscode.EventEmitter<string>();
const pty = {
  onDidWrite: writeEmitter.event,
  onDidChangeName: nameEmitter.event,
  open: () => writeEmitter.fire('Press and key to set the terminal title'),
  close: () => {
    /* noop*/
  },
  handleInput: (data: string) => {
    writeEmitter.fire(`Set title to "${data}"`);
    nameEmitter.fire(data);
  }
};
const terminal = (<any>vscode.window).createTerminal({ name: `My Extension REPL`, pty });
terminal.show();

设置通过扩展API创建的终端的图标

window.createTerminal 现在接受一个 iconPath,用于在终端标签中关联一个图标。

const term = vscode.window.createTerminal({
  name: `Serve`,
  iconPath: new vscode.ThemeIcon('server-process')
});
term.show();

iconPath 将显示在终端名称旁边

枚举保存的Memento键

有一个新的Memento.keys() API 用于枚举已保存的Memento键集合。这个 API 可以使处理之前保存的数据变得更加容易,并且在需要迁移保存的数据时非常有用。

语言服务器协议

语言服务器协议的新版本以及相应的npm模块已经发布。该版本包含了诊断拉取模型规范的最终提案。

调试适配器协议

“内存写入”请求和“内存更改”事件的进展

我们计划在未来的VS Code调试体验中集成一个内存查看器。为了支持这一功能,ReadMemory请求已经在调试适配器协议中存在了一段时间。我们现在正在开发相应的WriteMemory请求和Memory事件。WriteMemory请求有一个最终提案,将在下一个里程碑中添加到DAP中。Memory事件的提案仍在讨论中。如果您是调试扩展的作者,并对这些DAP协议的添加感兴趣,我们非常欢迎您的反馈。

提议的扩展API

每个里程碑都伴随着新的提议API,扩展作者可以尝试使用它们。一如既往,我们希望得到您的反馈。以下是您尝试提议API需要做的事情:

  • 你必须使用Insiders,因为提议的API经常变化。
  • 您必须在扩展的package.json文件中包含这一行:"enableProposedApi": true
  • 将最新版本的vscode.proposed.d.ts文件复制到项目的源代码位置。

你不能发布使用提议API的扩展。在下一个版本中可能会有破坏性的更改,我们从不希望破坏现有的扩展。

丰富的状态栏悬停

有一个新提出的API,用于支持状态栏项目上的丰富悬停。要尝试它,请在StatusBarItem.tooltip2中提供一个MarkdownString

丰富的状态栏悬停

  • 如果 MarkdownString.supportThemeIcons 为 true,你可以使用 $(iconName) 语法来使用图标。
  • 如果 MarkdownString 是可信的,您还可以添加命令链接。语法:([test](command:vscode.newWindow))

测试

完善测试API的进程仍在继续。在此次迭代中,我们重构了一些测试API,以更好地匹配扩展主机中其他API的风格。要跟踪完善过程并了解API的更改,请关注issue #122208

我们预见的主要变化是关于如何提供“运行配置”。要跟踪或参与这些运行器API的进展,请关注issue #127096

最后,我们开始调查并初步实施了测试覆盖率,这将在接下来的几周内在用户界面中展示。

内联建议

内联建议API允许扩展提供与建议小部件分离的内联建议。内联建议的呈现方式就像已经被接受一样,但颜色为灰色。用户可以通过Tab键循环浏览建议并接受它们。

vscode.languages.registerInlineCompletionItemProvider(
  { pattern: '**' },
  {
    provideInlineCompletionItems: async (document, position) => {
      return [{ text: '< 2) {\n\treturn 1;\n\t}' }];
    }
  }
);

编辑器中的内联建议

工程

ES2020

我们已经更新了我们的TypeScript项目,以允许使用最新的JavaScript API,如Promise.allSettledString.replaceAll。我们还输出了更现代的JavaScript,ES2020,这略微减少了我们主包的整体大小。

Electron沙箱支持的进展

在这个里程碑中,我们继续为VS Code窗口做好准备,以启用Electron的沙盒上下文隔离功能。

具体来说:

  • 我们移除了用于加载打开VS Code窗口所需资源的Node.js依赖。
  • 我们为iframe元素添加了搜索功能,以使行为更接近已弃用的webview组件,从而允许我们在未来放弃webview。此功能可以通过在settings.json文件中设置"webview.experimental.useIframes": true来启用。

文档

数据科学教程和主题

数据科学教程和主题现在在https://code.visualstudio.com目录中有自己的部分。你可以找到关于使用Jupyter NotebooksPython交互窗口的教程,甚至还有一个数据科学教程,分析泰坦尼克号乘客数据。

数据科学目录在code.visualstudio.com上

显著的修复

  • 120956: iPad: 无法在编辑器外触发上下文菜单
  • 122448: 如果扩展的依赖项被禁用,则自动禁用扩展
  • 124169: 尝试不要缩进当前调试行
  • 125144: 当线程不再停止时,焦点不会自动传递给另一个线程
  • 125528: 当不再停留在断点上时,在断点视图中取消选择断点
  • 126211: 通过调试器启动的Node进程在退出VS Code时未被终止
  • 126702: macOS: 命令行 code . 无法工作
  • 127716: 调试悬停:允许键盘搜索属性

感谢您

最后但同样重要的是,向本月为VS Code做出贡献的以下人员表示衷心的感谢

对我们问题跟踪的贡献:

vscode 的贡献:

vscode-extension-samples的贡献:

vscode-html-languageservice的贡献:

vscode-js-debug的贡献:

vscode-languageserver-node的贡献:

language-server-protocol的贡献:

monaco-editor的贡献:

monaco-languages的贡献:

monaco-typescript的贡献: