在 VS Code 中尝试

2019 年 3 月 (版本 1.33)

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

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


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

如果您想在线阅读这些发行说明,请访问 code.visualstudio.com 上的更新
您还可以观看 Developer Advocate Brian Clark 制作的 1.33 版本亮点视频

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

  • 工作台 - 改进的源代码控制视图,屏幕阅读器更容易进行列表导航。
  • 集成终端 - Windows 上默认启用 ConPTY,渲染性能提升。
  • 语言 - 禁用 CSS 属性值补全,TS 改进了类型推断和 const 断言。
  • 扩展创作 - 智能选择 API 定稿,新增安装扩展命令。
  • 工程 - 正式支持 Linux snap 包,使用 NPM 包缓存加速 OSS 构建。

Insiders:想尽快看到新功能吗?您可以下载每晚的 Insiders 版本,并在最新更新可用时立即试用。要获取最新的 Visual Studio Code 新闻、更新和内容,请在 Twitter 上关注我们:@code

工作台

更轻松的显示语言配置

运行配置显示语言命令现在会打开一个 Quick Pick(快速选择),列出根据您已安装的语言包可用的区域设置,而不是只打开 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 通过显示包含所有位置的 Peek 视图来支持这一点。现在可以使用新设置 editor.gotoLocation.multiple 对此行为进行微调。

可以设置为这些值

  • peek - 在当前位置打开 Peek 视图。这是默认值。
  • gotoAndPeek - 打开主位置(由扩展定义),同时显示 Peek 视图。
  • goto - 仅打开主位置。

代码片段变量 $WORKSPACE_NAME

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

使用方法如下面的代码片段所示

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

集成终端

Windows build 18309+ 上默认启用 ConPTY

对于支持的 Windows 10 Insider 版本,新的终端后端 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 命令的扩展发出充分警告,以便它们可以升级使用 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="http://localhost:3000/canvas.png">
    </body>
    </html>`;

将实时服务器等服务启动到随机端口被认为是良好的实践。通过端口映射,webview 的 HTML 内容可以使用一个硬编码的端口,该端口会映射到服务实际运行的动态打开的端口。

调用层级提供程序

有一个提议的 CallHierarchyItemProvider API 用于支持调用层级功能。试用一下,留下反馈,帮助我们完善这个 API。

工程

官方 Linux snap 包

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

Snap store

安装 snap 包非常简单

sudo snap install code --classic

您是 Insiders 用户吗?快来试试 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 todo 列表的渲染。
  • 采用了新的注释 API

Vetur

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

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

Vetur TypeScript features

阅读Vetur 更新日志了解更多关于这些功能的信息。

新增文档

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 本地化社区成员使用 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。
  • 中文(简体): 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。