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

2019 年 3 月(版本 1.33)

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

下载:Windows:x64 | Mac:Intel | Linux 64 位:deb rpm tarball snap | 32 位:deb rpm tarball


欢迎使用 Visual Studio Code 2019 年 3 月版本。此版本包含许多更新,我们希望您会喜欢,一些主要亮点包括

如果您想在线阅读这些发行说明,请访问更新,网址为code.visualstudio.com
您还可以查看此 1.33 版本的亮点视频,由开发倡导者Brian Clark 制作。

发行说明按以下与 VS Code 关注领域相关的部分排列。以下是一些进一步的更新

  • 工作台 - 改进的源代码管理视图,使用屏幕阅读器更容易进行列表导航。
  • 集成终端 - ConPTY 在 Windows 上默认启用,渲染性能改进。
  • 语言 - 禁用 CSS 属性值完成,TS 改进推断和 const 断言。
  • 扩展开发 - 最终确定了智能选择 API,安装扩展命令。
  • 工程 - 官方 Linux snap 包,使用 NPM 包缓存加快 OSS 构建速度。

内部人员:希望尽快看到新功能?您可以下载夜间内部人员 构建,并尝试最新更新。要获取最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们@code

工作台

更轻松的显示语言配置

运行配置显示语言命令现在将打开一个快速选择,列出根据您已安装的语言包提供的语言环境,而不是仅打开locale.json文件。当您进行选择时,语言环境将自动更新,系统将提示您重新启动 VS Code 以使更改生效。

Configure Display Language Quick Pick

改进的源代码管理视图

源代码管理视图已调整为与其他视图(如文件资源管理器、调试视图等)的行为一致。现在可以使用上下文菜单操作显示或隐藏存储库。它们的顺序和大小现在将被保留。您还可以使用上下文菜单操作显示或隐藏源代码管理提供程序视图。

Source Control view context menu

当检测到屏幕阅读器时,列表使用简单的键盘导航

当 VS Code 检测到正在使用屏幕阅读器时,它会自动为列表打开简单的键盘导航。这使得使用屏幕阅读器的用户更容易进行列表键盘导航,因为每次按键都将导航到相应的项目。此行为适用于工作台中的所有列表和树,例如文件资源管理器、打开的编辑器和调试视图。

编辑器

IntelliSense 自定义

有新的设置可以控制 IntelliSense 显示

  • editor.suggest.filteredTypes - 从 IntelliSense 中过滤特定类型,例如,使用以下方法过滤关键字:{ "keyword": false }
  • editor.suggest.maxVisibleSuggestions - 控制 IntelliSense 同时显示的项目数。
  • editor.suggest.showIcons - 启用或禁用在 IntelliSense 中显示图标。

以下是使用过滤掉关键字、没有图标且限制为八个建议的 TypeScript IntelliSense 示例

IntelliSense: no keywords, no icons, only eight entries

默认格式化程序选择

许多用户都处理不同的项目,并且不同的项目通常使用不同的文档格式化程序。这很难配置,我们添加了一个新的设置来帮助您,editor.defaultFormatter。现在,当有多个格式化程序可用时,您可以定义一个作为默认格式化程序。实际上,VS Code 会鼓励您选择默认格式化程序。

Pick Default Formatter

这将更新您的配置(如下所示),以便在后续保存操作中,VS Code 知道要选择哪个格式化程序。我们还鼓励您在项目的配置中设置此值。例如,如果您的项目团队同意使用一个格式化程序,那么它应该在项目设置文件中明确说明。

"[javascript]": {
  "editor.defaultFormatter": "HookyQR.beautify"
}

定义默认格式化程序不会删除备选格式化程序。我们添加了使用...格式化文档命令,它仍然允许您在格式化文档之前选择一个格式化程序。如果需要,您也可以从下拉菜单中重新配置默认格式化程序。

转到定义自定义

一些编程语言允许您在多个位置定义一个符号。这意味着像转到定义这样的功能必须一次转到多个位置。VS Code 通过显示包含所有位置的“窥视”视图来支持这一点。现在可以使用一个新设置editor.gotoLocation.multiple来微调此行为。

它可以设置为以下值

  • peek - 在当前位置打开“窥视”视图。这是默认设置。
  • gotoAndPeek - 打开主要位置(由扩展定义),并显示“窥视”视图。
  • goto - 仅打开主要位置。

代码片段变量 $WORKSPACE_NAME

有一个新的代码片段变量解析为打开的工作区/文件夹的名称:$WORKSPACE_NAME

如以下代码片段所示使用它

"header": {
  "scope": "javascript,typescript",
  "prefix": "workspace",
  "body": ["// the ${WORKSPACE_NAME}-project"],
  "description": "Log output to console"
}

集成终端

ConPTY 在 Windows 构建 18309+ 上默认启用

对于支持的 Windows 10 内部人员版本,新的终端后端 ConPTY 将默认启用。这应该会导致更稳定的体验,更接近于本机终端,并添加 256 色支持。如果您遇到问题,请告知我们Windows 控制台团队。您始终可以使用此设置选择退出

{
  "terminal.integrated.windowsEnableConpty": false
}

数据解析限制为 12 毫秒

以前,终端解析的数据量没有被正确限制。这意味着在性能较低的硬件上,解析数据和渲染所需的时间远远超过理想的帧渲染时间,导致 UI 延迟或对于生成大量输出的命令完全锁定。现在已经实施了上限,防止这超过大约 12 毫秒,这应该可以避免这些问题。

语言

TypeScript 3.4

VS Code 现在附带TypeScript 3.4.1。此更新添加了对一些新的 TypeScript 语言功能的支持,例如改进的推断和新的const断言,以及工具改进和错误修复。

转换为解构参数重构

TypeScript 的新转换为命名参数重构使您可以通过将函数转换为接受单个命名参数对象来快速整理长的函数参数列表。

Cleaning up a long parameter list

选择禁用 CSS 属性值完成的选项

一个新的设置css.completion.triggerPropertyValueCompletion允许您禁用属性值完成。例如,如果您从p中选择position,并且此设置设置为false,VS Code 不会为属性值触发static | absolute | sticky | ...完成。

如果您想使用Tab/Shift + Tab选择上一个和下一个完成项,这将很有用。

调试

子会话支持

在此里程碑中,我们添加了支持在调试器 UI 中以树的形式显示调试会话。以前,调试会话以平面列表形式显示,这使得难以理解会话之间的关系。

由于此功能可以通过新的扩展 API 获得,因此需要调试器扩展采用。在此里程碑中,唯一使用分层调试会话的调试器是 VS Code 的 Node.js 调试器。

在 Node.js 集群调试中,集群的所有子进程都在主调试会话下注册。

Node.js subprocesses under main debug session

在“服务器就绪功能” (见下文) 中,自动启动的 Chrome 浏览器会话注册为服务器调试会话的子会话。

自动打开 URI

上一个里程碑有一个 “服务器就绪”功能的预览版本,它允许您在检测到特定程序输出消息后立即在 Web 浏览器中自动打开 URL。此功能对于调试 Web 服务器源代码很有用,因为在浏览器中打开的 URL 可以使服务器在服务器就绪后立即命中断点 (并且这一切只需按一次 F5 键)。

在本里程碑中,我们已将该功能从预览中移出。VS Code 不仅在调试控制台中查找触发消息,还在集成终端中查找。此外,我们还改进了错误处理。

请注意,由于技术原因,无法在外部终端中支持“服务器就绪”功能。

扩展

安装缺少的依赖项

当 VS Code 检测到缺少的扩展依赖项时,我们改进了扩展激活失败通知,现在提供了一个安装缺少的依赖项的操作。

Extension missing dependency warning

您还可以使用新的 **扩展:安装缺少的依赖项** 命令来安装所有缺少的依赖项。

对扩展的网络代理支持

我们现在从操作系统加载 SSL/TLS 证书,并在验证扩展发起的 https 请求时包含它们。这支持使用自己的 SSL/TLS 证书的代理和其他具有自定义证书的设置。

此外,来自扩展的 http/https 请求现在遵守 NO_PROXY 环境变量,该变量列出了应忽略所有代理设置的以逗号分隔的域名。

预览功能

预览功能尚未准备好发布,但功能足够强大,可以使用。我们欢迎您在开发过程中提供早期反馈。

调用层次结构

调用层次结构视图显示了对函数的所有调用或来自函数的所有调用,并允许您深入查看调用者的调用者和调用的调用。下图显示了函数 foobarbang 调用,然后 barbangfib 调用。

Call Hierarchy view

这是一个预览功能,目前还没有扩展为此提供真实数据。但是,如果您是扩展作者,我们邀请您验证我们提出的 API。如果您有兴趣,有一个用于测试的示例扩展:https://github.com/jrieken/demo-callhierarchy。

扩展开发

智能选择 API

我们已经完成了与 **扩展选择** (⌃⇧⌘→ (Windows, Linux Shift+Alt+Right)) 和 **缩小选择** (⌃⇧⌘← (Windows, Linux Shift+Alt+Left)) 命令一起使用的智能选择 API。使用此 API,扩展可以定义在编辑器中选择的范围。

安装扩展命令

引入了一个新的命令 workbench.extensions.installExtension 来从市场或 VSIX 安装扩展。

要从市场安装扩展,请提供其标识符。

vscode.commands.executeCommand('workbench.extensions.installExtension', 'ms-python.python');

要通过 VSIX 安装,请提供其位置 URI。

vscode.commands.executeCommand(
  'workbench.extensions.installExtension',
  vscode.Uri.file('path-to-vsix')
);

调试工具栏贡献支持定位

现在可以在调试工具栏中以任何顺序定位贡献的调试命令。默认调试命令使用组 navigation,因此如果您希望将贡献的命令与默认命令混合使用,请使用相同的组。有关在组内排序的更多信息,请参阅 贡献点文档

为了保持一致性,我们已弃用菜单 ID debug/toolbar,而改为使用 debug/toolBar。在 3 月份的版本中,我们将支持这两个菜单 ID,但在 4 月份,将删除对 debug/toolbar 菜单 ID 的支持。

“sidebarVisible” 上下文重命名为“sideBarVisible”

为了保持一致性,我们已弃用上下文 sidebarVisible,而改为使用 sideBarVisible。在 3 月份的版本中,将支持这两个上下文,但在 4 月份的版本中,将删除对 sidebarVisible 的支持。

TerminalOptions.shellArgs 现在在 Windows 上接受字符串

以前 TerminalOptions.shellArgs 仅支持 string[] 形式的命令行参数列表。这可能会在 Windows 上导致问题,因为字符串数组需要转换为 命令行格式,而转换可能会出错或在复杂的情况下难以正确执行。您现在可以通过在 Windows 上直接使用命令行格式的 string 来绕过此转换过程。

分层调试会话

为了支持分层调试会话,我们在 vscode.debug.startDebugging API 中添加了一个可选参数 parentSession。如果指定,VS Code 将以树状方式显示从 startDebugging 产生的调试会话,作为父会话的子会话。

删除 vscode.previewHtml 命令

vscode.previewHtml 命令用于在编辑器中呈现 HTML 页面,此前在去年引入了 webview API。但是 vscode.previewHtml 命令存在一些重要的安全性和兼容性问题,我们确定这些问题无法在不破坏现有命令用户的情况下修复。因此,我们选择在 VS Code 1.33 中完全删除该命令,而不是尝试修复 vscode.previewHtml

我们已尝试向所有使用 vscode.previewHtml 命令的扩展提供足够的警告,以便它们可以升级以使用 webview API。但是,可能仍有一些扩展仍在使用 vscode.previewHtml 命令,因此将不再起作用。如果您正在使用其中一个扩展,请对其提出问题,或者更好的是,提交包含修复程序的 PR。

建议的扩展 API

每个里程碑都附带新的提议 API,扩展作者可以尝试使用它们。与往常一样,我们欢迎您的反馈。以下是如何尝试使用提议的 API 的步骤:

  • 您必须使用 Insiders,因为提议的 API 经常更改。
  • 您的扩展的 package.json 文件中必须有以下行:"enableProposedApi": true
  • 将最新版本的 vscode.proposed.d.ts 文件复制到您的项目中。

请注意,您不能发布使用提议的 API 的扩展。我们很可能在下一个版本中进行重大更改,我们绝不希望破坏现有扩展。

自定义任务执行

除了 ProcessExecutionShellExecution 任务外,现在还有一个 CustomExecution 任务。它不会启动进程或运行脚本,而是执行扩展提供的回调。

let execution = new vscode.CustomExecution(
  (terminalRenderer, cancellationToken, args): Thenable<number> => {
    return new Promise<number>(resolve => {
      // This is the custom task callback!
      resolve(0);
    });
  }
);
const taskName = 'First custom task';
let task = new vscode.Task2(
  kind,
  vscode.TaskScope.Workspace,
  taskName,
  taskType,
  execution
);

这将使扩展提供的任务在任务运行时更灵活地维护状态。它还提供了对任务的输入和输出的访问权限。有关完整示例,请参阅 测试项

注释 API

在过去两个月中,我们根据从 GitHub Pull Requests 扩展和社区反馈中吸取的经验教训,对与注释相关的功能进行了重大重构。新设计的注释 API 非常通用且功能强大,足以用于各种类型的用途。 GitHub Pull Requests 扩展已经迁移到新的注释 API。

新界面可在 VS Code Insiders 中使用,我们将在 4 月份的里程碑中使用该 API 进行调整和微调。旧的注释 API 也将在 4 月份删除。您可以使用 示例扩展 来更好地了解 API,或深入了解 GitHub Pull Requests

WebviewOptions.portMapping

提议的 WebviewOptions.portMapping 设置允许扩展透明地定义如何在 webview 内部解析本地主机端口。

const panel = vscode.window.createWebviewPanel(
  'dog',
  'Dog Doodling',
  vscode.ViewColumn.One,
  {
    portMapping: [
      // Map localhost:3000 in the webview to localhost:4000 externally
      { port: 3000, resolvedPort: 4000 }
    ]
  }
);

panel.webview.html = `<!DOCTYPE html>
    <html lang="en">
    <head>
        <title>Dog Doodling</title>
    </head>
    <body>
        <!--
            With the above port mapping, this image will actually be resolved
            to localhost:4000 on the local machine
        -->
        <img src="https://127.0.0.1:3000/canvas.png">
    </body>
    </html>`;

将诸如实时服务器之类的服务启动在随机端口上被认为是最佳实践。使用端口映射,webview 的 HTML 内容可以使用硬编码的端口,该端口映射到服务实际运行的动态打开的端口。

调用层次结构提供程序

有一个针对支持调用层次结构功能的 CallHierarchyItemProvider 的提议 API。尝试一下,留下 反馈,并帮助我们使这个 API 更好。

工程

官方 Linux snap 包

我们现在完全支持 将 Visual Studio Code 作为 snap 包 发布。Snap 在许多不同的 Linux 发行版上都能正常工作,为 VS Code 提供可靠的执行环境,从而使 VS Code 更加稳定,并支持后台更新。没错,您现在可以像 Windows 和 macOS 用户一样,在 Linux 上获得产品内的自动更新。🎉

Snap store

安装 snap 包就像

sudo snap install code --classic

您是内部人士吗?快来尝试一下 Insiders snap 包,并无需任何额外操作即可获得每日更新。

sudo snap install code-insiders --classic

缓存 NPM 包

感谢我们来自 Microsoft DevLabs 的朋友,我们能够使用 Azure Pipelines 扩展 加速我们的 OSS 构建,该扩展缓存 NPM 包并加速整个 npm install 过程。如果您想了解更多信息,可以阅读 这篇博文,作者是 Ethan Dennis

VS Code 的严格空检查

在这次迭代中,我们对 VS Code 核心代码库进行了最后的重大改进,以启用 TypeScript 的严格空值检查。严格空值检查有助于发现一些常见的编程错误,并使我们的代码库更易于维护,以便我们可以继续快速而安全地前进。

为 VS Code 核心启用严格空值检查是一个持续了六个月的努力,涉及至少 40 位贡献者,并影响了数万行源代码。您可以在 问题 #60565 中了解我们如何逐步启用严格空值检查。

对扩展的贡献

GitHub 拉取请求

在这个里程碑中,我们继续改进对 GitHub 拉取请求 扩展的改进。

以下是一些新功能

  • 新的 workbench.action.addCommentworkbench.action.submitComment 命令,用于自定义添加和提交评论的键盘快捷键。
  • 在描述页面中对 GitHub 任务列表的渲染进行了改进。
  • 采用了新的 评论 API

Vetur

Vetur 扩展现在支持任何工作区版本的 TypeScript > 2.8,以便用户在 *.vue*.js*.ts 文件之间获得更加一致的语言支持。

除了提供新的 TypeScript 语言功能和错误修复之外,Vetur 还改进了与 TypeScript 的集成,为 *.vue 文件带来了灰色显示的未使用变量、代码操作(自动修复)和自动导入功能。

Vetur TypeScript features

Vetur 变更日志 中阅读有关这些功能的更多信息。

新文档

Node 远程调试

新的 Node.js 远程调试 主题说明了如何将 VS Code 调试器连接到在 Azure 上运行的 Node.js 应用程序,使用 Azure 应用服务 扩展。

Azure App Service extension

值得注意的修复

  • 27636: 快速命令模糊搜索不适用于括号中的文本
  • 66632: 以 \t 开头的行上的终端链接下划线偏移
  • 70962: Console.WriteLine() 不再导致空行

感谢

最后但并非最不重要的是,衷心感谢以下为使 VS Code 更出色而做出贡献的人员!

对我们的问题跟踪的贡献。如果您想帮助我们管理传入的问题,请查看我们的 社区问题跟踪 页面。

vscode 的贡献

vscode-css-languageservice 的贡献

node-jsonc-parser 的贡献

inno-updater 的贡献

debug-adapter-protocol 的贡献

localization 的贡献

有超过 700 名 云 + AI 本地化 社区成员使用 Microsoft 本地化社区平台 (MLCP),其中约 100 人积极贡献 Visual Studio Code 的本地化。

感谢您的贡献,无论是提供新的翻译、投票赞成翻译,还是建议流程改进。

以下是 贡献者 的快照。有关项目详细信息,包括贡献者姓名列表,请访问项目网站 https://aka.ms/vscodeloc

  • 波斯尼亚语:Ismar Bašanović。
  • 保加利亚语:Любомир Василев。
  • 捷克语:Jakub Stibůrek, David Jareš, Samuel Tulach, Jan Brudný。
  • 丹麦语:Lasse Stilvang, Alexander Matzen, Johan Fagerberg, Allan Kimmer Jensen。
  • 荷兰语:Jos Verlinde, Hans Zoons, Eric Algera, Sujith Quintelier。
  • 英语(英国):YASHU MITTAL, Mohammad Idrees, Chris Dias。
  • 芬兰语:Petri Niinimäki, Riku Riikonen,Valtteri Vatanen。
  • 法语:Corwin D'Ambre, Mohamed Sahbi, Antoine Griffard, Maxime Coquerel, Cédric M., Steven Dugois, franto。
  • 德语:Frank Lindecke, Dejan Dinic, Jakob von der Haar, Mario Koschischek, Florian Berger, Hans Meiser, Carsten Kneip, Thorsten Hans, Sebastian Seidl。
  • 希腊语:Jim Spentzos, Stratos Kourtzanidis, John D, Δημήτρης Παπαϊωάννου。
  • 希伯来语:Shalom Craimer, Snir Broshi, Kyle Orin。
  • 印地语:Satish Yadav, Amit Gusain, Ashok Kumar Rathore, nirav adatiya, Rajeev Desai, shaswat rungta, Kumar Vaibhav, Jagjeet Singh, Pratishek PII, Chethana S, Dhanvi Kapila。
  • 简体中文:易婷婷, 项斌, feiyun0112 feiyun0112, 刘瑞恒 刘瑞恒, 薛建东, 朱逸婷, 杨乔尔, 刘俊哲, 戴夫杨, 周昊宇, 夏 Tony, 张宇, 左翔, 刘彦佐, 王Edi, 谈少民, 李志强, 叶福永, G.Y. Z, 胡昊, Pluwen, 孟少, 孔祥瑞, Liam Kennedy, 樊松阳, 杨比格, 刘Justin, 张Jessica, 任立成, 雷驰, 孙庆, 傅雄, 蘇凡, 董Lynne, 吉姆舒, 赵宇, 尤游, 陶剑秋, 杨涵林, 吴bh, 张涵宇, Y F, 王CG duoduobear, 李江, 郑越, 孙子强, 刘正元, 彭威, 周瑜, 陈Simon, 陈仁松, 张翼, 王维轩, 方路迪, 谭九鼎.
  • 繁体中文:謝政廷, 潘奕濬, 林Winnie, 小克。
  • 匈牙利语:Péter Nagy, Levente Hallai Seiler, Richard Borcsik, Dániel Tar。
  • 印度尼西亚语:Laurensius Dede Suhardiman, Franky So, Rachmat Wahidi, Afnizar Nur Ghifari, Pradipta Hendri, Azhe Kun。
  • 意大利语:Alessandro Alpi, Bruni Luca, Andrea Dottor, Riccardo Cappello, Aldo Donetti, Michael Longo。
  • 日语:nh, EbXpJ6bp -, Hasefumi, 天明正和, torisoup, 傅和之, 佐野陽介, 坂口誠, 知念裕子, 森口理恵, 牧野浩一, 小島藤夫, 氏原和也, 松田康明。
  • 韩语:申钟勋, 高京熙, 金在永, 郑承镇。
  • 拉脱维亚语:kaspars bergs。
  • 挪威语:Andreas Rødland, Cookius Monsterius, Stephan Eriksen。
  • 波兰语:Grzegorz Miros, Tomasz Świstak, Michal Szulc, Bartek PL, Szymon Seliga, Tomasz Chojnacki, Marcin Weksznejder, Piotr Grędowski, Artur Pelczar, Marcin Floryan, Jakub Jedryszek。
  • 葡萄牙语(巴西):Marcondes Alexandre, Albert Tanure, Marcelo Fernandes, Junior Galvão - MVP, Roberto Fonseca, Ray Carneiro, Renan Miguel, Lucas Miranda, Eduardo Moura, Bruno Talanski, Bruno Sonnino, Jucinei Pereira dos Santos, Emmanuel Gomes Brandão, Flávio Albuquerque Camilo, Pablo Garcia, José Rafael de Santana, Douglas Ivatiuk Martim, Giuliano Reginatto, Marcos Dias, Alan William, Lucas Nunes, Gabriel Schade, arthurdenner ., Mauricio Lima, Gabriel Barbosa, Victor Cavalcante, Letticia Nicoli, Fernando Val, Milton Camara, Felipe Scuissiatto, Alessandro Fragnani, Gustavo Bezerra, Cynthia Zanoni, Marcelo Guerra, Jhonathan Soares, Rafael Laranja, Swellington Soares。
  • 葡萄牙语(葡萄牙):Vitor Barbosa, João Carvalho。
  • 罗马尼亚语:Mihai Marinescu。
  • 俄语:Andrey Veselov, michael v, Иван Лещенко。
  • 塞尔维亚语:Milos Zivkovic。
  • 西班牙语:Andy Gonzalez, Engel Aguilar, Alvaro Enrique Ruano, Carlos Mendible, José María Aguilar, julian3xl, Ing. Sergio Uziel Tovar Lemus, Mario Mendieta, Jorge Serrano Pérez。
  • 泰米尔语:Mani M, Krishna Pravin, Jeffin R P, Vetri ..
  • 土耳其语:Hüseyin Fahri Uzun, Okan Çetin, Muhammed Emin TİFTİKÇİ。
  • 乌克兰语:Dmytro Kutianskyi, Did Kokos。
  • 越南语:Belikhun, Việt Anh Nguyễn。