🚀 在 VS Code 中

2018 年 8 月(版本 1.27)

更新 1.27.2:此更新解决了以下问题

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


欢迎使用 Visual Studio Code 2018 年 8 月版。此版本包含许多重大更新,我们希望您会喜欢,以下是一些主要亮点:

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

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

工作台

设置编辑器

在过去的几个月中,我们一直在开发用于编辑设置的 GUI。在 1.27 版本中,我们将其设为默认设置编辑器。

Settings UI

您仍然可以使用 JSON 设置编辑器,方法是使用命令首选项: 打开用户设置 (JSON),或者通过更改 "workbench.settings.editor" 设置来更改默认设置编辑器。

我们本月做出的一个改进是通过将设置值描述 (enumDescriptions) 移至自定义下拉控件来清理 UI

dropdown

已修改的设置现在用蓝线指示,就像编辑器中修改过的行一样。齿轮图标打开一个上下文菜单,其中包含将设置重置为其默认值的选项。

modified indicator and context menu

设置值现在经过验证,并且会显示任何验证错误。

validation error

目录现在在搜索期间将保持可见,并过滤以仅显示具有匹配项的类别。您可以单击类别以将结果过滤到仅该类别下的设置。如果您希望在搜索期间隐藏目录,请将 "workbench.settings.settingsSearchTocBehavior" 设置为 "hidden"

settings search

当您在设置中搜索时,我们由 Bing 提供支持的搜索服务仍然提供它认为相关的结果。现在,该服务还将向您显示 Marketplace 中具有相关设置的扩展。您将在设置搜索结果的底部看到一个按钮,显示匹配的扩展。单击后,将打开“扩展”视图,其中包含匹配的扩展。

extension settings

Windows 和 Linux 上的自定义标题栏和菜单

在过去的几个迭代中,我们一直在努力改进 Windows 和 Linux 上标题栏和菜单的外观、感觉以及可用性。在此迭代中,我们正在删除预览标签,目标是使其成为 Windows 上的默认体验。要启用此功能,您可以将设置 "window.titleBarStyle" 设置为 "custom"

Custom Title Bar and Menus

与默认设置相比,新体验具有以下几个优势

  • 整个产品中可主题化的标题栏、菜单栏和上下文菜单。这意味着您的深色主题保持深色!
  • 菜单栏中更好的键盘导航。我们使使用键盘在菜单之间切换以及使用菜单助记符变得更加容易。
  • 侵入性更小的菜单栏。当将 "window.menuBarVisibility" 设置为 "toggle" 时,新体验更紧凑且不那么突兀。
  • 更好的可访问性。已解决多个可访问性问题,以提高屏幕阅读器的菜单可用性。

由于我们希望使这种新体验成为 Windows 上的默认体验,因此我们鼓励您试用并向我们发送您的反馈,以便我们提供最佳的体验。

面包屑导航改进

我们调整了新的面包屑导航栏,进行了各种改进并修复了错误

  • 聚焦的文档符号现在在编辑器中突出显示。
  • 当运行焦点命令 (⇧⌘; (Windows, Linux Ctrl+Shift+;)) 时,面包屑导航会自动启用。
  • 面包屑导航在主题方面效果更好。
  • 面包屑导航现在遵循文件排除配置。

Breadcrumbs Highlights

新的终端菜单

任务菜单已重命名为终端,并添加了更多用于集成终端的条目。

Terminal Menu

平台特定的键盘快捷键

现在可以使用 keybinding 的 when 子句中的 isLinuxisMacisWindows 为特定操作系统启用键盘快捷键

[
  {
    "key": "ctrl+o",
    "command": "workbench.action.files.openFolder",
    "when": "!isMac"
  },
  {
    "key": "cmd+o",
    "command": "workbench.action.files.openFolder",
    "when": "isMac"
  }
]

这使得在不同的机器之间共享您的 keybindings.json 文件变得更加容易。

将窗口作为新的本机选项卡打开

一个新的仅 macOS 命令 workbench.action.newWindowTab,将窗口作为新的本机选项卡打开。 newWindowTab 没有默认的键盘快捷键,并且需要启用 window.nativeTabs 设置。

文件在外部删除/重命名时不再关闭

我们将 workbench.editor.closeOnFileDelete 设置的默认值从 true 更改为 false。这意味着在 VS Code 外部(或由另一个程序(如 Git 或来自集成终端的命令)删除或重命名的文件将不再关闭作为编辑器选项卡打开的文件。相反,该文件将指示它已从磁盘中删除,您可以保存该文件以恢复它。

Deleted from Disk

注意:除非文件是脏的,否则文件的内容不会在重启之间保留。

中间单击以在新编辑器中打开文件

现在可以在资源管理器视图中使用鼠标中键单击以在新编辑器中打开文件,而不是在预览模式中重用以前的编辑器。

辅助功能改进

我们修复了很多辅助功能问题 - 主要围绕键盘导航、屏幕阅读器支持和焦点。完整的列表可以在此处找到。这是一项正在进行的工作,我们计划在 9 月份继续进行。

改进的 Windows 后台更新

我们对自定义 Windows 后台更新程序进行了一些稳定性工作,以解决导致某些用户安装损坏的问题。这是一项持续的工作项目,在即将发布的版本中将有更多改进。

编辑器

自动关闭和环绕字符

当键入某些括号(如 {[()时,根据编程语言,当它们后跟通常不能开始表达式的特定字符(例如 ;:.,=}])>)时,它们将默认自动关闭。可以使用 editor.autoClosingBrackets 设置自定义此行为。同样,可以使用 editor.autoClosingQuotes 自定义在键入引号(如 "'`)时的自动关闭行为。

当选择文本并键入这些字符之一时,所选内容将被括号或引号包围。现在可以通过新的 editor.autoSurround 设置单独调整此行为。

语言

CSS 导入的路径补全

现在可以使用 CSS、SCSS 和 Less @import 的路径补全。SCSS 部分 @import 也已处理。

css-import

现在可以跳转到 CSS、SCSS 和 Less 中 @importurl() 链接的定义。

css-definition

JSON

内置的 JSON 语言扩展现在支持新的 JSON Schema Draft-07

最有趣的添加是 ifthenelse 关键字,以允许条件模式评估。

{
  "type": "integer",
  "minimum": 1,
  "maximum": 1000,
  "if": { "minimum": 100 },
  "then": { "multipleOf": 100 },
  "else": {
    "if": { "minimum": 10 },
    "then": { "multipleOf": 10 }
  }
}

if 关键字意味着,如果值模式的结果通过验证,则应用 then 模式,否则应用 else 模式。

HTML

HTML 格式化程序已更新到 JS Beautifier 的 1.8.1 版本。

这为 "html.format.wrapAttributes" 设置添加了一个新选项

  • "aligned-multiple" 将在达到最大行长度时包装属性,并将所有包装行与第一个属性对齐。

aligned-multiple

TypeScript 3.0.3

VS Code 现在附带 TypeScript 3.0.3。此小版本修复了许多错误并提高了稳定性。您可以在此处阅读有关完整更改集的更多信息。

调试

“已加载脚本”视图现在可重用

一年多以来,调试视图中的“已加载脚本”资源管理器由 Node.js 调试扩展贡献,并且其他调试器不可用。在此版本中,我们添加了“已加载脚本”视图作为内置调试器功能。所有具有“脚本”概念的调试扩展都将能够在动态更新的视图中支持对其脚本的访问。

此外,我们还改进了旧的“已加载脚本”资源管理器的一些缺点

  • 单子文件夹链现在折叠成一个节点。这使得深入到深层但稀疏的文件夹层次结构中变得更加容易。
  • 我们已经开始解决辅助功能问题。

鼠标中键单击以删除断点

现在可以在断点视图中使用鼠标中键单击来轻松删除断点。

更改 "openDebug" 的默认值以在每次会话启动时打开

对于新用户,当您启动调试会话且调试视图并非每次都自动打开时,有时可能会感到困惑。如果用户尚不熟悉 UI,则他们不知道要查找哪些关键字才能打开 UI。为了避免混淆,我们将 debug.openDebug 的默认值更改为 openOnSessionStart,以便调试视图在每次会话启动时打开,而不仅仅是在第一次(这是以前的默认行为)。

扩展创作

扩展日志记录

作为 activate 函数参数提供的 ExtensionContext 具有新的属性logPath。这是扩展可以存储日志文件的目录的绝对文件路径。该路径对于扩展是唯一的,并且不会被其他扩展重用。

语言服务器协议

新版本的语言服务器协议可用,并包含用于 VS Code 的相应节点模块。

新版本支持

  • 来自服务器的代码操作类型公告,允许客户端填充相应的菜单项。
  • 用于 textDocument/prepareRename 的实现。
  • 工作区编辑 中支持文件操作(创建、重命名和删除)。

vscode-languageclient:JSON 日志格式和日志流式传输

以前,当使用 vscode-languageclient 构建语言服务器扩展时,您可以指定 [langId].trace.server 以将 LSP 日志 发送到 VS Code 输出通道。

[langId].trace.server 现在可以以机器可读的 JSON 格式输出日志记录信息

"languageServerExample.trace.server": {
  "format": "json", // or "text"
  "verbosity": "verbose" // or "off" | "messages"
}

这开辟了有趣的用例,例如将 LSP 日志流式传输到 LSP Inspector 中以可视化语言服务器的行为

lsp-streaming

您可以在 Microsoft/language-server-protocol-inspectorlsp-log-streaming-sample 中了解更多信息。

调试扩展:内置的“已加载脚本”视图

“已加载脚本”资源管理器现在是 VS Code 调试器的内置组件。为了使用它,调试器扩展需要通过以下方式更改其调试适配器

  • 向从 initialize 请求返回的 Capabilities 添加值为 truesupportsLoadedSourcesRequest 功能。
  • 通过返回当前加载的源集来实现 loadedSources 请求。
  • 为新加载或卸载的源发送 loadedSource 事件。

新的主题颜色

面包屑导航有新的主题颜色

  • breadcrumb.background:面包屑导航项的背景颜色。

设置编辑器有新的主题颜色

  • settings.dropdownListBorder:新下拉控件的边框颜色。
  • settings.modifiedItemIndicator:指示已修改设置的线条颜色。

Git 扩展 API

Git 扩展已开始公开更明确定义的 API。此 API 可以从任何其他扩展中使用,以与用户工作区中打开的 Git 存储库进行交互。由于它仍处于初步阶段,我们将在即将发布的版本中不断改进 API。

建议的扩展 API

每个里程碑都带有新的建议 API,扩展作者可以试用它们。与往常一样,我们渴望收到您的反馈。这是您试用建议 API 必须执行的操作

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

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

SCM:选定的源代码管理

为了使扩展知道用户在 UI 中选择可见性的源代码管理实例,SourceControl 实例现在具有 selected 属性以及表示该状态的 onDidChangeSelection 事件。

export interface SourceControl {
  /**
   * Whether the source control is selected.
   */
  readonly selected: boolean;

  /**
   * An event signaling when the selection state changes.
   */
  readonly onDidChangeSelection: Event<boolean>;
}

评论提供程序

我们在此迭代中引入了评论的概念,该概念允许扩展在编辑器和新的评论面板中创建和管理对话。这使扩展能够支持代码审查场景。

评论被组织成线程并与特定文档关联。

export enum CommentThreadCollapsibleState {
  Collapsed = 0,
  Expanded = 1
}

interface CommentThread {
  threadId: string;
  resource: Uri;
  range: Range;
  comments: Comment[];
  collapsibleState?: CommentThreadCollapsibleState;
}

interface Comment {
  commentId: string;
  body: MarkdownString;
  userName: string;
  gravatar: string;
  command?: Command;
}

要显示评论,扩展必须注册 DocumentCommentProviderWorkspaceCommentProvider

export interface CommentThreadChangedEvent {
  readonly added: CommentThread[];
  readonly removed: CommentThread[];
  readonly changed: CommentThread[];
}

interface CommentInfo {
  threads: CommentThread[];
  commentingRanges?: Range[];
}

interface DocumentCommentProvider {
  provideDocumentComments(
    document: TextDocument,
    token: CancellationToken
  ): Promise<CommentInfo>;
  createNewCommentThread(
    document: TextDocument,
    range: Range,
    text: string,
    token: CancellationToken
  ): Promise<CommentThread>;
  replyToCommentThread(
    document: TextDocument,
    range: Range,
    commentThread: CommentThread,
    text: string,
    token: CancellationToken
  ): Promise<CommentThread>;
  onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}

interface WorkspaceCommentProvider {
  provideWorkspaceComments(token: CancellationToken): Promise<CommentThread[]>;
  onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}

使用 DocumentCommentProvider,可以为打开的文档返回评论。提供评论时,扩展指定文档上的当前线程,以及文档的哪个范围支持添加新评论。可以从文档中添加或回复评论。

A comment within an editor

当首次注册 WorkspaceCommentProvider 时,评论面板将变为可见,并显示提供给它的所有评论。评论按评论线程和资源分组。在面板中选择评论时,将运行评论 command,因此扩展决定行为。

Comments panel

预览功能

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

Electron 3.0 探索

在此里程碑期间,我们探索了将 Electron 3.0.0 打包到 VS Code 中。这是一个主要的 Electron 版本,带有 Chrome 66 和 Node.js 10.x(与我们当前的 Chrome 61 和 Node.js 8.x 版本相比,这是一个巨大的飞跃)。我们计划在不久的将来向我们的 Insiders 用户推送更新,以收集更多反馈。如果您有兴趣提供帮助,请务必安装 VS Code Insiders 版本。

工程

扩展和 webpack

我们现在使用 webpack 来捆绑扩展。它解锁了两项成就:(1) 减少扩展的启动时间,因为要加载的文件更少,要解析的源代码更少;(2) 减少安装时间,因为需要提取和写入磁盘的文件更少。到目前为止,我们已将捆绑包大小减少了约 4000 个文件!

性能金丝雀

我们添加了一个测试工具,以确保我们的启动性能不会下降。有一个新的脚本可以部署到专用计算机以测试 Insider 构建的性能。该脚本只是安装最新的构建,并确保它在时间限制内启动。目前,我们从 Windows 开始,因为性能通常会受到防病毒软件更新的影响,但计划在我们支持的所有平台上进行测试。

IPC 堆栈改进

我们改进了我们自己开发的 IPC 堆栈,以支持进程之间的字节缓冲区消息。这支持某些场景,例如在我们的不同进程之间发送二进制数据而没有开销,并允许我们优化 IPC 以提高性能。

值得注意的修复

  • 6363:保存时删除备用数据流
  • 25919:强制打开新窗口作为本机选项卡的新命令
  • 49021:保存时不要重置 WSL 权限元数据
  • 49403:在集成终端中调试时,自动附加导致问题
  • 55025:允许在扩展主机重启时继续调试
  • 56084:打开的编辑器:重新审视组的顺序以基于视觉顺序
  • 56691:当路径中存在 # 时,启动 vscode 时出错
  • 57018:停止/重启调试器无法停止 babel-node

感谢

最后但同样重要的是,非常感谢!以下人员帮助使 VS Code 变得更好

vscode 的贡献

vscode-vsce 的贡献

vscode-eslint 的贡献

language-server-protocol 的贡献

vscode-languageserver-node 的贡献

debug-adapter-protocol 的贡献

vscode-css-languageservice 的贡献

vscode-html-languageservice 的贡献

vscode-json-languageservice 的贡献

node-jsonc-parser 的贡献

vscode-generator-code 的贡献

本地化贡献

Transifex VS Code 项目团队中大约有 1200 名成员,每月约有 100 位活跃贡献者。我们感谢您的贡献,无论是提供新的翻译、为翻译投票,还是提出流程改进建议。

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

  • 保加利亚语: Любомир Василев。
  • 克罗地亚语: Nikša Mihaica。
  • 丹麦语: Christoffer Bech。
  • 英语(英国): Matthew John Cheetham, Swotboy2000。
  • 芬兰语: Petri Niinimäki, Feetu Nyrhinen, Jussi Palo。
  • 法语: Antoine Griffard, Guillaume Bauer, Smrman。
  • 德语: Carsten Siemens, Carsten Kneip, Jonas Droste, Markus Hatvan, Christian Studer, Peter Schneider, Jonas Keller, thefreshman89。
  • 匈牙利语: Tar Dániel, Bence László。
  • 简体中文: Joel Yang, 子实 王, Wang Dongcheng, pluwen, DongWei, Henry Chu, aimin guo, Chris Pan 潘冬冬, 子昂 马。
  • 繁体中文: Duran Hsieh, Winnie Lin, Poy Chang, Alan Tsai。
  • 印尼语: Wildan Mubarok, G-RiNe Project。
  • 意大利语: Luca Bruni, Alessandro Alpi, Andrea Dottor, Emanuele Curati, Riccardo Cappello, Gianluca Acerbis, Emilie Rollandin, Marco Dal Pino, Luigi Bruno, Lorthirk, Aldo Donetti。
  • 日语: Shunya Tajima, Satoshi Kajiura, Yuichi Nukiyama, Hiroyuki Mori, yoshioms。
  • 韩语: Kyunghee Ko, PaulNara, smallsnail, Kwangjin Hwang。
  • 立陶宛语: Tomas Cimermonas。
  • 波兰语: Artur, hawkeye116477, Patryk Brejdak, Mateusz Gazdziak, Robert Skórski, Sebastian Baran。
  • 葡萄牙语(巴西): Roberto Fonseca, Bruno Sonnino, Marcelo Fernandes, Lucas Miranda, João Mesquita, Danilo Dantas, Rodrigo Crespi, Arthur Bruel, Thiago Moreira de Souza Arrais, Otacilio Saraiva Maia Neto, Loiane Groner, Fabio Correia。
  • 葡萄牙语(葡萄牙): Richard Nunes, Daniel Correia, Tiago Costa。
  • 罗马尼亚语: Bogdan Mateescu, Szauka。
  • 俄语: Roman Slauta, Ivan Kuzmenko。
  • 西班牙语: Alejandro Medina, José M. Aguilar, Roberto Fonseca, Javier Moreno, Andy Gonzalez, Alberto Poblacion, Nancy Todd, Antonio Sanmartín。
  • 泰卢固语: Hari Jujjavarapu, Sridhar L。