现已发布!阅读 11 月份的新功能和修复。

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 上的 更新
您还可以观看开发者宣传员 Brian Clark 的此 1.33 版本 亮点视频

发行说明按与 VS Code 重点领域相关的以下部分进行组织。以下是一些进一步的更新:

  • 工作台 - 改进的源代码管理视图,通过屏幕阅读器更容易进行列表导航。
  • 集成终端 - Windows 上默认启用 ConPTY,渲染性能改进。
  • 语言 - 禁用 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"
}

集成终端

在 Windows 内部版本 18309+ 上默认启用 ConPTY

对于支持的 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,用于从 Marketplace 或 VSIX 安装扩展。

要从 Marketplace 安装扩展,您需要提供其标识符。

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 上引起问题,因为字符串数组需要转换为命令行格式,并且对于复杂的情况,转换可能会出错或难以正确获取。现在,您可以通过直接使用命令行格式的 string 来绕过 Windows 上的此转换过程。

分层调试会话

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

删除 vscode.previewHtml 命令

在去年引入webview API 之前,vscode.previewHtml 命令用于在编辑器中渲染 HTML 页面。但是,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 中解析 localhost 端口。

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 内容可以使用硬编码的端口,该端口映射到服务实际运行的动态打开的端口。

调用层次结构提供程序

有一个提议的 API 用于支持调用层次结构功能的 CallHierarchyItemProvider。试用它,留下反馈,并帮助我们使其成为良好的 API。

工程

官方 Linux snap 包

我们现在完全支持将 Visual Studio Code 作为 snap 包分发。Snaps 可在许多不同的 Linux 发行版上运行,为更稳定的 VS Code 提供可靠的执行环境,并支持后台更新。是的,没错,现在您可以在 Linux 上获得产品内自动更新,就像 Windows 和 macOS 用户一样。🎉

Snap store

安装 snap 包非常简单

sudo snap install code --classic

您是 Insider 吗?快来试用 Insiders snap 包,无需任何额外工作即可获得每日更新

sudo snap install code-insiders --classic

缓存 NPM 包

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

VS Code 的严格 null 检查

我们在本次迭代中做出了最后的重大努力,以对核心 VS Code 代码库启用 TypeScript 的严格 null 检查。严格的 null 检查有助于捕获一些常见的编程错误,并使我们的代码库更易于维护,从而使我们能够快速而安全地前进。

为核心 VS Code 启用严格的空值检查是一项为期六个月的工作,至少有 40 位贡献者参与,并触及了数万行源代码。您可以在issue #60565中了解我们如何逐步启用严格的空值检查。

对扩展的贡献

GitHub Pull Requests

在这个里程碑中,我们继续改进了GitHub Pull Requests扩展。

以下是一些新功能

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

Vetur

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

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

Vetur TypeScript features

请在Vetur Changelog中阅读有关这些功能的更多信息。

新文档

Node 远程调试

新的Node.js 远程调试主题解释了如何使用Azure App Service扩展将 VS Code 调试器连接到在Azure上运行的 Node.js 应用程序。

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 名Cloud + AI 本地化社区成员在使用微软本地化社区平台 (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。
  • 简体中文: Tingting Yi, 斌 项, feiyun0112 feiyun0112, 刘瑞恒 刘瑞恒, 建东 薛, YITING ZHU, Joel Yang, Junzhe Liu, Dave Young, 昊宇 周, Tony Xia, Yu Zhang, XIANG ZUO, 彦佐 刘, Edi Wang, 少民 谈, Zhiqiang Li, 福永 叶, G.Y. Z, Hao Hu, Pluwen, meng shao, Xiangrui Kong, Liam Kennedy, 松阳 樊, Young Bige, Justin Liu, Jessica Zhang, Licheng Ren, 驰 雷, sun qing, xiong Fu, Fan Su, Lynne Dong, 吉姆 舒, zhao yu, 游 尤, 剑秋 陶, Hanlin Yang, bh wu, Hanyu ZHANG, Y F, WangCG duoduobear, Jiang LI, 越 郑, ziqiang sun, 正元 刘, peng wei, 瑜 周, Simon Chan, 仁松 陈, 翼 张, Wang Weixuan, Ludi Fang, 九鼎 谭.
  • 繁体中文: 謝政廷, 奕濬 潘, Winnie Lin, 小克.
  • 匈牙利语: 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, Masakazu TENMYO, torisoup, Takayuki Fuwa, Yosuke Sano, Makoto Sakaguchi, 裕子 知念, Rie Moriguchi, Koichi Makino, Fujio Kojima, Kazuya Ujihara, Yasuaki Matsuda。
  • 韩语: Jong Heun Shin, Kyunghee Ko, Jae Yong Kum, SeungJin Jeong。
  • 拉脱维亚语: 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。