现已推出!阅读 10 月份的新功能和修复。

2021 年 6 月(版本 1.58)

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

更新 1.58.2:此更新解决了这些 问题

下载:Windows:x64 Arm64 | Mac:通用 Intel | Linux:deb rpm tarball Arm snap


欢迎使用 2021 年 6 月发布的 Visual Studio Code。此版本中包含一些我们希望您喜欢的更新,一些主要亮点包括

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

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

内部人士: 想要尽快尝试新功能?您可以下载夜间 内部人士 构建并在新功能可用时立即尝试最新的更新。

工作区

工作区信任

工作区信任 功能是在 1.57 版本 中引入的一项重大更改,我们相信开发人员可以安全地浏览代码,即使他们不熟悉源代码也是如此。在这个里程碑中,我们一直在吸收客户的反馈,并专注于修复问题和跟踪建议。

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

Configure your settings action in the Workspace Trust editor

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

您可以在最近的 工作区信任博客文章 中了解有关工作区信任的基本原理和开发的更多信息。这篇文章解释了受限模式如何帮助您免受意外(以及可能恶意的)代码执行的侵害,并提供了一些设置开发机器的技巧,以便您可以快速安全地工作。

设置编辑器

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

Settings editor Boolean object renderer demo

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

Settings editor enum array renderer demo

瞬态工作区

现在有一种称为“瞬态”工作区的新工作区类型,其行为与普通工作区不同,具体如下

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

通过在工作区.code-workspace文件中添加transient属性并将其设置为true来指定瞬态工作区

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

设置同步

现在有一个用于设置同步的**故障排除**视图,其中包含所有日志和上次同步状态。您可以通过运行命令**设置同步:显示同步数据**来访问此视图,并通过打开**视图**子菜单并选中**故障排除**来启用它

Settings Sync Troubleshoot command in the Settings Sync view menu

主题:GitHub 浅色主题

搜索最大结果设置

有一个新的设置search.maxResults,它允许您设置文本搜索结果的最大数量。默认值为 20,000,高于之前的 10,000。在加载大量搜索结果时,您可能会看到一些缓慢现象。

集成终端

编辑器区域中的终端

现在可以在编辑器区域中创建或移动终端,从而实现多维网格布局,该布局会持续存在并始终可见,无论面板状态如何。

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

  • 通过**在编辑器区域创建终端**命令创建。
  • 将终端从选项卡列表拖放到编辑器。
  • 在终端处于焦点状态时运行**将终端移至编辑器区域**。
  • 在终端选项卡上下文菜单上选择**移至编辑器区域**。

4 terminals in the editor area are laid out in a 2 by 2 grid

新设置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 像素。

Vertical editor scroll bar width set to 30 pixels

语言

Markdown 预览中的数学公式渲染

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

Math rendering in the built-in Markdown preview

内联数学方程式用单个美元符号括起来

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 源代码中突出显示数学方程式

Syntax highlighting of a math equation in a Markdown file

这在普通 Markdown 文件和笔记本中的 Markdown 单元格中都有效。

TypeScript 4.3.5

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

调试

记住每个文件的所选环境

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

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

Debug is started first time and the environment prompt is presented. The next time there is no prompt when the debug session starts

调试控制台建议不再在 Enter 上接受

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

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

Debug console input box showing a Status bar rendered in the bottom that says "Insert (Tab)"

对扩展的贡献

Jupyter 交互式窗口

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

Jupyter built-in interactive window demo

Jupyter 笔记本调试

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

Jupyter debugging

远程仓库

在这个版本中,我们主要专注于针对 远程仓库 扩展的错误修复和一些性能改进,以及与 GitHub Pull 请求和问题 扩展的更好集成。此外,您现在可以从 **远程资源管理器** 中的 **远程仓库** 视图中删除远程仓库,并且对使用行范围打开 \blob URL 的支持也得到了改进。

GitHub Pull 请求和问题

对于 GitHub Pull 请求和问题 扩展,本版本的重点是修复 bug。查看 变更日志 以了解亮点。

远程开发

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

1.58 的主要功能包括:

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

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

实时预览

我们开发了一个 实时预览 扩展,它为 Web 开发预览提供本地服务器!🎉

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

Live Preview Quick Walkthrough

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

Live Preview Tasks

要详细了解它的功能,您可以在 Marketplace 中找到详细信息或 查看其仓库

预览功能

TypeScript 4.4 支持

此版本包含对即将发布的 TypeScript 4.4 版本的初始支持。您可以在 TypeScript 博客 上了解更多关于 TypeScript 4.4 中的新语言特性和改进的信息。

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

请分享您的反馈,并告知我们您在使用 TypeScript 4.4 时遇到的任何 bug。

在窗口之间移动终端

现在可以通过在其中一个窗口中使用 **终端:分离会话** 分离终端,然后在另一个窗口中使用 **终端:连接到会话** 连接到另一个窗口,在窗口之间移动终端。将来,这将有助于实现跨窗口拖放功能!

扩展开发

详细的补全项标签

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

这些新属性允许语言扩展显示签名或限定符,但其他补全提供者也可以利用它。例如,GitHub Pull 请求和问题 扩展现在会在别名旁边显示完整名称。

Completion for Github aliases with full names

模态消息的详细信息

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

A modal dialog with details

上面的对话框是由以下代码片段生成的。请注意,详细信息文本仅支持模态消息(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.'
});

贡献终端配置文件

终端配置文件现在可以由扩展贡献,它们将显示在配置文件选择器中。

A contributed profile will show up along side detected and configured terminal profiles

要贡献终端配置文件,您需要执行以下三项操作:

首先,将贡献添加到您的 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();

The iconPath will show up next to the terminal's name

枚举保存的 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

Rich Status bar hover

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

测试

最终确定测试 API 的进程仍在继续。在这个版本中,我们重构了一些测试 API,使其更好地匹配扩展主机中其他 API 的风格。要跟踪最终确定过程并了解 API 的更改,请关注 问题 #122208

我们预见的首要变化是“运行配置”的提供方式。要跟踪或参与这些运行器 API 的进度,请关注 问题 #127096

最后,我们开始调查和初步实现 测试覆盖率,它将在未来几周内在 UI 中获得表面积。

内联建议

内联建议 API 允许扩展提供与建议窗口分离的内联建议。内联建议以已接受的形式呈现,但颜色为灰色。用户可以通过建议进行循环,并使用 `Tab` 键接受它们。

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

Inline suggestions in the editor

工程

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://vscode.js.cn 目录表中拥有自己的部分。您可以在其中找到有关使用 Jupyter 笔记本Python 交互式窗口,甚至 数据科学教程(分析泰坦尼克号的乘客数据)的教程。

Data Science table of contents on 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 的贡献