现已发布!阅读 10 月份的更新内容,包括新功能和修复。

2019 年 9 月(版本 1.39)

更新 1.39.1:该更新解决了这些 问题,包括修复一个安全漏洞。

更新 1.39.2:该更新解决了这些 问题

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


欢迎使用 Visual Studio Code 的 2019 年 9 月版本。此版本包含许多更新,我们希望您会喜欢,其中一些关键亮点包括

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

内部人员:您想尽快看到新功能吗?您可以下载夜间 内部人员 版本,并在新功能可用后立即试用。

工作区

更新的源代码管理视图

源代码管理视图已更新为使用最新的树小部件。您现在可以使用源代码管理标题栏上的切换视图模式按钮在列表和树视图之间切换。

Source Control toggle view mode button

您可以使用scm.defaultViewMode设置更改默认视图,该设置接受listtree值。

您还可以通过在视图中开始输入来利用更新的树小部件的自动键盘导航和过滤功能。

Updated SCM view

在树视图模式下(显示文件夹),Git 扩展现在为文件夹贡献命令,例如暂存更改,这些命令将应用于文件夹内的所有文件。

改进的受信任域设置

我们简化了对 1.38 版本中引入的传出链接保护功能的受信任域管理。

您现在可以使用管理受信任域命令轻松地添加、删除或修改受信任域,这些域以 JSON 文本文件的形式存储。

Improved trusted domains management

可选择的完成详细信息

自动完成详细信息现在可以选择进行复制和粘贴。

Selectable completion details

Windows 上更新的日语 UI 字体

在 Windows 上,我们已将日语 UI 字体从Meiryo切换到Yu Gothic UIMeiryo UI

UI字体通过使用更窄的日语假名字符节省了水平空间。您可以通过安装日语语言包并使用配置显示语言命令将显示语言标识符设置为ja来使用日语 UI。

在下图中,您可以看到更窄的UI字体在内部人员(绿色图标)菜单栏中的显示效果。

Japanese typeface

改进的等宽字体在建议和悬停中的显示

以前,建议和悬停小部件中的内联<code>段未指定font-family。在 Windows/macOS 上,这些段使用 Chrome 为font-family: monospace指定的默认选择。

在此迭代中,我们将其与整个 VS Code UI 中使用的系统无衬线字体对齐。

  • Windows:Courier New -> Consolas(与Segoe UI对齐)
  • macOS:Courier -> SF MonoMonacoMenlo(与SF TextHelvetica Neue对齐)
  • Linux:无变化。内联代码段仍然在Liberation Mono中呈现,这是 Chrome 在 Linux 上为font-family: monospace指定的默认值。

以下您可以看到SF Mono为内联代码块提供了更一致的外观。

Suggest and Hover widgets monospace typeface

设置编辑器中对uniqueItems的验证

在 1.38 版本中引入的对字符串数组设置的验证现在支持uniqueItems

如果使用"uniqueItems": true,则设置编辑器中的重复条目将显示警告。

扩展自述文件中的代码块突出显示

扩展自述文件中的代码块(显示在扩展视图详细信息窗格中)现在在 VS Code 中突出显示。

A block of JSON being highlighted

突出显示使用当前的颜色主题

编辑器

切换折叠

您现在可以使用切换折叠⌘K ⌘L(Windows、Linux Ctrl+K Ctrl+L))命令展开和折叠折叠区域。

迷你地图编辑器选择装饰

编辑器选择现在在迷你地图中突出显示。

Minimap displays the editor selection

您可以通过修改minimap.selectionHighlight主题颜色更改这些装饰的颜色。

迷你地图的触摸事件

迷你地图滑块现在可以使用触摸拖动。

多光标粘贴的新选项

过去,从剪贴板粘贴多行文本时,VS Code 会检查剪贴板文本的行数是否与光标数匹配,如果匹配,则会将每行“分配”或“分散”到一个光标。您现在可以使用editor.multiCursorPaste设置控制此行为,该设置可以具有以下值

  • spread - 每个光标粘贴一行文本(默认)。
  • full - 每个光标粘贴完整的剪贴板文本。

集成终端

在自定义工作目录中打开新的终端

有一个新命令允许创建具有自定义当前工作目录 (cwd) 的终端。

{
  "key": "cmd+shift+h",
  "command": "workbench.action.terminal.newWithCwd",
  "args": {
    "cwd": "${fileDirname}"
  }
}

您可以创建自己的键盘快捷键,在任何数量的方便工作目录中打开新的终端。cwd值可以是普通路径或变量

更好的语言环境检测

terminal.integrated.setLocaleVariables设置已被新的terminal.integrated.detectLocale设置替换。默认值为auto,它将在终端会话中将$LANG变量设置为检测到的语言 UTF-8 值,但前提是用户没有显式配置该变量。这种更好的默认值应该会导致与终端中的语言和编码相关的更少问题。

语言

HTML ARIA 属性引用

HTML ARIA 属性的自动完成和悬停信息现在包含对相应的WAI-ARIA文档的引用。

HTML ARIA reference

CSS 属性完成包含分号

CSS 属性完成现在会在行尾插入分号。

您可以使用Ctrl+Enter(Windows/Linux)或Cmd+Enter(macOS)来使用此功能创建新行,而不会将结尾的;推送到新行。

您可以使用[css|scss|less].completion.completePropertyWithSemicolon设置控制此功能。

CSS property completion semicolon

CSS 颜色变量预览

完成 CSS 变量时,如果原始变量是颜色字符串,VS Code 现在将显示带有其颜色的完成项。

CSS variable completion with color swatch

markdown.links.openLocation

新的markdown.links.openLocation设置控制在 Markdown 文件中打开链接的位置。

markdown.links.openLocation有两个值

  • currentGroup - 在当前编辑器组中打开链接(默认)。
  • beside - 在当前 Markdown 编辑器旁边打开链接。

"markdown.links.openLocation": "beside"在编写文档时非常有用。

调试

改进的列断点 UI

调试时,VS Code 现在会在内联显示所有断点候选位置。这使得用户更容易在更准确的位置设置断点。为了避免 UI 混乱,只有当一行上有多个可能的位置时才会显示候选断点。

您可以直接与内联断点进行交互;单击以启用和禁用它们,并调用它们的上下文菜单以执行更多操作。

Inline breakpoints

请注意,此功能需要底层运行时或调试器的支持,我们预计将来只有少数调试扩展会使用此功能。对于此版本,节点调试Chrome 调试器支持此功能。作为扩展作者的示例,我们的模拟调试示例“模拟”了对该功能的支持。

调用堆栈视图中的内联调试操作

当调用堆栈视图中显示了会话或线程时,我们现在会在悬停时显示内联调试操作。这将使调试多个会话或线程时更容易控制调试流程。您不再需要先将焦点设置到会话或线程才能对其执行操作。

如果会话只有一个线程,则所有操作都将在会话上显示,因为不会显示线程。否则,所有操作都将在其上下文中显示(会话操作在会话上,线程操作在线程上)。

Inline debug actions from the Call Stack view

改进的调用堆栈视图行为

我们改进了调用堆栈视图的功能。

  • 单击调试会话或线程不再展开它们。您必须直接单击>UI 元素。这可以防止在您只想移动焦点时意外展开会话或线程。
  • 如果 VS Code 中新的调试会话没有中断,VS Code 将不再自动聚焦它们。

VS Code 现在不仅在字符串输出中,而且在调试控制台中的表达式中检测链接。链接检测算法也得到了改进。

PreLaunchTask 现在可以引用默认构建。

通过引入新的变量${defaultBuildTask},现在可以拥有一个通用的preLaunchTask,它始终引用默认构建任务。

{
  "name": "Hello World",
  "type": "node",
  "request": "launch",
  "preLaunchTask": "${defaultBuildTask}"
}

${defaultBuildTask} 解析为执行命令任务:运行构建任务时运行的任务的名称。类似于使用运行构建任务命令,如果存在多个默认构建任务或不存在默认构建任务,则会显示一个快速选择器来选择构建任务。

保存 preLaunchTask 错误时的选择。

当出现preLaunchTask 错误时,您现在可以使用在用户设置中记住我的选择复选框来记住您的选择。您的选择将存储在用户设置中,使用debug.onTaskErrors,它可以具有三个值:prompt(默认值)、debugAnywayshowErrors

PreLaunchTask error choice dialog

扩展贡献

远程开发(预览)

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

1.39 中的功能亮点包括

  • 远程资源管理器现在支持 WSL 扩展,并让您可以轻松连接到已安装的 Linux 发行版。
  • 新的在容器卷中克隆存储库命令,这样您就可以在隔离的环境中处理源代码存储库。
  • 对 SSH 连接共享和使用 SSH 连接到 Windows 远程机器的实验性支持。

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

您还可以阅读两篇最近的博文,介绍

预览功能

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

TypeScript 3.7-beta 支持

虽然 VS Code 在正式发布之前不会捆绑 TypeScript 3.7,但我们已经在努力支持所有令人兴奋的新的 TypeScript 3.7-beta 功能

其中包括

  • JavaScript 和 TypeScript 文件中可选链和空合并运算符的语法高亮。
  • 对可选链的补全支持。
  • 使用新的javascript.format.semicolonstypescript.format.semicolons 设置控制分号。

您可以通过安装TypeScript Nightly 扩展,轻松试用所有这些新的 TypeScript 3.7 功能。请分享您的反馈,如果您在使用 TypeScript 3.7 beta 时遇到任何错误,请告知我们!

扩展开发

扩展终端 API

扩展终端 API 已最终确定,允许扩展对终端输入做出反应并完全控制其输出。以下代码创建一个扩展终端并在启动时以红色打印“Hello world”

const writeEmitter = new vscode.EventEmitter<string>();
const pty: vscode.Pseudoterminal = {
  onDidWrite: writeEmitter.event,
  open: () => writeEmitter.fire('\x1b[31mHello world\x1b[0m'),
  close: () => {}
};
vscode.window.createTerminal({ name: 'My terminal', pty });

有关更多详细信息,请参阅API 参考extension-terminal-sample

符号和补全的弃用标签

允许将补全项和符号标记为弃用的符号标签 API 已最终确定。在1.38 发行说明中了解有关它的更多信息。

在这里,您可以看到Java 扩展使用SymbolTag.Deprecated 来显示使用删除线显示引用弃用类型或成员的源代码。

Java deprecated method

调试会话名称不再是只读的。

可以更改DebugSession 的名称。调试会话的名称最初取自DebugConfiguration。任何更改都会在 UI 中得到正确反映。

如果 webview 不使用 Webview.asWebviewUri 获取本地资源,则会发出警告。

在开发使用Webview API 的扩展时,我们现在会在您创建使用vscode-resource: URI 直接加载本地资源的 webview 时记录警告,而不是使用新的Webview.asWebviewUri API

Debug warning for a webview that uses vscode-resources

虽然旧的vscode-resource: URI 将继续工作,但我们希望所有 webview 扩展迁移到Webview.asWebviewUri API,因为它是新的 API

  • 处理围绕从网络驱动器加载本地资源的一些棘手的边缘情况。
  • 使 webview 可以加载本地和远程内容的混合内容成为可能。
  • 对于 VS Code 的网络版本将更可靠地工作。

TreeView 消息 API

在树视图中设置消息的 API 已最终确定。您可以在树视图扩展示例中看到如何使用消息 API 的示例。

更新的 Octicons 样式

我们已更新了我们的Octicons,以匹配我们的新图标轮廓样式,以便所有图标都保持一致。

Updated Octicons

SCM 文件夹菜单

更新的 SCM 视图现在支持将更改呈现为树。作为 SCM 提供者,您可以使用scm/resourceFolder/context 菜单 ID 为文件夹的菜单贡献命令。

语言服务器协议

3.15.0 版本的语言服务器协议规范已发布。该版本尚未最终确定,因此仍然欢迎您在语言服务器协议存储库中以问题或拉取请求的形式提供反馈。流和进度报告支持已添加到下一版本的语言服务器协议。节点服务器和 VS Code 客户端的实现分别作为[email protected][email protected] 提供。

调试适配器协议

取消支持

一个新的cancel 请求已添加到调试适配器协议中,该请求可以向调试适配器发出提示,表明前端客户端不再对先前发出的特定请求产生的结果感兴趣。

此请求具有提示特性:调试适配器只能期望在满足此请求时做出“尽力而为”的努力,但没有保证。只有在supportsCancelRequest 功能定义并且其值为true 时,前端客户端才能调用此请求。

被取消的请求仍然需要发送回响应。这可以是正常结果或错误响应。从取消的请求返回部分结果是可能的,但请注意,前端客户端没有检测响应是部分还是否的通用方法。

在 9 月份的版本中,VS Code 支持对stacktracescopesvariables 请求(用于调用堆栈变量视图)以及completions 请求(用于调试控制台)进行取消。

请注意,截至 9 月份,只有Mock Debug 扩展实现了取消功能。

查找源范围内可能的断点。

新的breakpointLocations 请求可以由 DAP 客户端使用,以查找给定源范围内所有可能的断点位置。这可以在 UI 中使用,以提高对“内联”(“列”)断点的可发现性。

只有在supportsBreakpointLocationsRequest 功能定义并且其值为true 时,客户端才能调用breakpointLocations 请求。

建议的扩展 API

每个里程碑都会带来新的提议 API,扩展作者可以尝试使用它们。一如既往,我们热切地希望收到您的反馈。以下是要尝试提议 API 的步骤:

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

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

vscode.env.uiKind

添加了一个新的提议 API vscode.env.uiKind,它允许扩展确定从哪种类型的 UI 中使用扩展。为了准备在浏览器中运行 VS Code,可能的值是UIKind.DesktopUIKind.Web

vscode.env.asExternalUri

提议的vscode.env.asExternalUri API 允许扩展从运行扩展的位置解析一个外部 URI(例如,http:https: URI)到客户端机器上同一资源的 URI。这是vscode.env.openExternal API 的配套 API,不同之处在于,它不使用外部程序打开解析后的 URI,而是将结果返回给扩展。

import * as vscode from 'vscode';
import * as http from 'http';

const PORT = 3000;

export function activate(context: vscode.ExtensionContext) {
  startLocalServer(PORT);

  context.subscriptions.push(
    vscode.commands.registerCommand('example.command', async () => {
      const resolved = vscode.env.asExternalUri(
        vscode.Uri.parse(`https://127.0.0.1:${PORT}`)
      );
      vscode.window.showInformationMessage(
        `Resolved to: ${resolved} on client and copied to clipboard`
      );
      vscode.env.clipboard.writeText(resolved.toString());
    })
  );
}

function startLocalServer(port: number) {
  const server = http.createServer((req, res) => {
    res.end('Hello world!');
  });
  server.on('clientError', (err, socket) => {
    socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
  });
  server.listen(port);
  vscode.window.showInformationMessage(`Started local server on port: ${port}`);
}

vscode.env.asExternalUri 目前仅支持http:https: URI。如果扩展在客户端机器上运行,它将不起作用。但是,如果扩展在远程运行,vscode.env.asExternalUri 会自动从本地机器到远程机器上的target 建立端口转发隧道,并返回到隧道的本地 URI。

资源的只读 webview 编辑器

您可以找到 VS Code 扩展来预览从着色器到 Excel 文件到 3D 模型的所有内容。一些大胆的扩展甚至为可视化编辑二进制或 XML 文件构建了复杂的编辑器式体验。虽然使用 VS Code 的现有扩展 API 可以实现所有这些功能,但构建预览或自定义编辑器目前需要以非直观的方式将一堆 API 拼凑在一起。它还将很多事情留给了扩展本身,通常会导致用户体验与 VS Code 的其余部分不一致。这 自定义编辑器 API 提案旨在改善这一点。

自定义编辑器 API 将为扩展提供一个框架,用于创建完全可定制的读写编辑器,这些编辑器将用于替换 VS Code 的标准文本编辑器,用于特定资源。例如,XAML 自定义编辑器可以显示一个 WYSIWYG 风格的编辑器,用于您的 .xaml 文件。我们的最终目标是为扩展提供尽可能大的灵活性,同时保持 VS Code 的快速、精简和一致性。

在此迭代中,我们正在分享自定义编辑器 API 提案的第一部分:只读、基于 Webview 的自定义编辑器。您可以在 此处 找到自定义编辑器提案的概述。自定义编辑器已用于为 VS Code 的内置图像预览提供支持。

当前的提案只是一个第一步,可能会被大幅修改。我们将在接下来的几个月继续对自定义编辑器 API 进行迭代。

树视图标题

树视图标题始终来自扩展的 package.json 文件。现在,树视图标题最初来自 package.json,但可以在以后更改。对 title 属性的更改将正确反映在视图标题的 UI 中。

startDebuggingconsoleMode 选项以合并调试控制台

为了更好地支持分层调试会话,我们在 vscode.debug.startDebugging API 中添加了一个可选参数 consoleMode。此参数控制 VS Code 是否应合并父级和子级调试会话的调试控制台。例如,这对集群调试特别有用,在集群调试中,有很多子会话,如果所有调试会话都进入同一个调试控制台,则会更加简洁。

已删除弃用的 Terminal.onDidWriteData API

已删除建议的 Terminal.onDidWriteData API,转而使用全局事件 window.onDidWriteTerminalData

工程

网站更新

我们更新了 Visual Studio Code 网站 的图标和颜色,以更好地匹配我们的品牌。这反映在整个网站和 文档 页面中。

Website colors updated

通过 terser 进行 JavaScript 压缩

我们更改了用于产品构建中 JavaScript 压缩的压缩器,使其成为 terser。之前我们一直在使用 uglify-es 的旧版本。terser 开发人员在采用过程中给予了我们很大的支持。

文件监视器更新 (Chokidar)

在此里程碑中,我们将 macOS 和 Linux 的文件监视器更新到了 3.x 版本,这带来了性能提升、内存消耗降低以及更小的包大小。您可以从 Chokidar 仓库Chokidar 3 博客文章 中了解详细信息。

集成测试针对真实构建运行

我们的产品构建在构建过程中运行一个大型集成测试套件。以前,这些测试针对从源代码运行的 VS Code 执行。现在,这些测试使用 VS Code 的构建版本来验证构建是否已准备好发布。

使用 TypeScript 3.6 构建 VS Code

VS Code 核心和内置扩展现在使用 TypeScript 3.6 构建。

图像预览已移至内置扩展

VS Code 的图像预览功能已从核心代码库中移出,并移至内置的 图像预览 扩展。图像预览的功能应与以前几乎完全相同。

The built-in Image Preview extension

将图像预览提取到内置扩展中可以更容易地修复错误和添加功能,并且最终将允许扩展更容易地覆盖 VS Code 的内置图像预览。

此更改是由我们在此迭代中完成的 自定义编辑器 API 工作启用的。

新文档

Node.js 部署教程

已将 Node.js 部署教程 移至 Azure JavaScript 开发者中心 上的 learn.microsoft.com

您可以在其中找到使用 Visual Studio Code 的教程:

显著修复

  • 78984:触摸在建议小部件中不起作用
  • 79196:调试控制台以错误的顺序显示 REPL 结果和 console.log 输出
  • 80003:常规断点没有标题工具提示
  • 55106:如果至少由一个会话验证,则断点将显示为已验证
  • 80435:请让我隐藏资源管理器侧边栏中的空文件夹部分
  • 80464:SetVariable 请求的错误消息不会显示
  • 80402:调试 UI 在调试会话结束时不会清除微调器
  • 82047:新的标题变量用于指示远程名称

感谢

最后但并非最不重要的是,对以下帮助使 VS Code 变得更好的各位表示衷心的 感谢!

对我们的问题跟踪的贡献

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

vscode 的贡献

vscode-eslint 的贡献

vscode-languageserver-node 的贡献

language-server-protocol 的贡献

debug-adapter-protocol 的贡献

vscode-debugadapter-node 的贡献

vscode-css-languageservice 的贡献

vscode-vsce 的贡献

localization 的贡献

超过 800 名 云 + AI 本地化 社区成员使用 Microsoft 本地化社区平台 (MLCP),其中约有 100 名积极贡献者参与 Visual Studio Code。 我们感谢您通过提供新的翻译、对翻译进行投票或建议流程改进等方式做出的贡献。

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

  • 丹麦语:Mark Drastrup,Lasse Stilvang。
  • 荷兰语:Niels ter Haar,Laurens Kwanten。
  • 英语(英国):Martin Littlecott,s.benson,sonali Dixit。
  • 芬兰语:Kiti Suupohja,Tommi Finnilä。
  • 法语:Thierry DEMAN-BARCELÒ,Maxime Coquerel,Antoine Griffard,Rodolphe NOEL,DJ Dakta。
  • 德语:Christof Opresnik。
  • 希腊语:Θοδωρής Τσιρπάνης。
  • 希伯来语:Yonatan Bachar,Snir Broshi。
  • 印地语:mtar05,निरव आडतिया,Amit Gusain,Degant Puri。
  • 简体中文:Justin Liu,顾逸之,paul cheung,yungkei fan,项斌,朱一婷,一斤瓜子,曾天智,cool yang,曾鹏,Y!an,Joel Yang,姜楠,周建。
  • 繁体中文:Winnie Lin,蔡牧村,謝政廷,潘奕均,張柏。
  • 印度尼西亚语:Eriawan Kusumawardhono,Riwut Libinuko,William Surya Permana,Septian Adi,Laurensius Dede Suhardiman。
  • 意大利语:Luigi Bruno,Alessandro Alpi,Claudio Mezzasalma,Marco Dal Pino。
  • 日语:熊本日仁,森裕之,徳田彩,井上 圭司,小西雄三,尾崎義久,Kogesaka,小島雄太,天明正和,牧野浩一,布哇隆之。
  • 韩语:Hongju,Jeong Sungjin,Chung Seikwang。
  • 拉脱维亚语:Andris Vilde。
  • 立陶宛语:Renatas Laužadis。
  • 波兰语:Kacper Łakomski。
  • 葡萄牙语(巴西):Marcelo Fernandes,Marcondes Alexandre,Felipe Oliveira,Alan Bueno。
  • 葡萄牙语(葡萄牙):Pedro G..
  • 罗马尼亚语:Mihail-Gabriel Alexe。
  • 俄语:konpl。
  • 西班牙语:José María Aguilar,Abdón Rodríguez P.,Ricardo Estrada Rdez,Anix Cormak,Carlos Mendible。
  • 泰米尔语:Rajeshkumar Ramasamy。
  • 土耳其语:Safa Selim。
  • 乌克兰语:Oleksandr Krasnokutskyi,Arthur Murauskas。
  • 越南语:Vương,Van-Tien Hoang,Hai Nguyen,Tuan Duong。