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 月版本。此版本包含一些重要的更新,我们希望您会喜欢,其中一些主要亮点包括
- 设置编辑器 - 用于发现、搜索和修改 VS Code 设置的新设置编辑器 UI。
- 自定义菜单栏 - Windows 和 Linux 上完全可主题化的标题栏和菜单栏。
- 面包屑改进 - 使用面包屑导航时突出显示的符号。
- 新终端菜单 - 用于创建终端和管理任务的组合菜单。
- 平台特定的键盘快捷键 - 在不同的操作系统上共享相同的 keybindings.json 文件。
- CSS @import 路径完成 - 在 CSS、SCSS 和 Less 中键入时提供导入路径建议。
- JSON 条件求值 - 支持“if”、“then”和“else”架构关键字。
- 内置加载脚本视图 - 加载脚本资源管理器现在可用于调试扩展。
如果您想在线阅读这些发行说明,请访问 更新,网址为 code.visualstudio.com。
您还可以查看来自云开发倡导者 Brian Clark 的此 1.27 版本 亮点视频。
内部人员:希望尽快看到新功能?您可以下载夜间 内部人员 版本,并在新功能可用后立即试用。要获取最新的 Visual Studio Code 新闻、更新和内容,请关注 Twitter @code!
工作区
设置编辑器
在过去的几个月中,我们一直在开发用于编辑设置的 GUI。在 1.27 中,我们将其设置为默认设置编辑器。
您仍然可以使用命令首选项:打开用户设置(JSON)或通过使用"workbench.settings.editor"
设置更改默认设置编辑器来访问 JSON 设置编辑器。
我们本月进行的一项改进是通过将设置值描述(enumDescriptions
)移到自定义下拉控件中来清理 UI
已修改的设置现在用蓝色线表示,类似于编辑器中已修改的行。齿轮图标会打开一个上下文菜单,其中包含一个选项,用于将设置重置为其默认值。
设置值现在已验证,并且会显示任何验证错误。
目录表现在将在搜索期间保持可见,并过滤以仅显示包含匹配项的类别。您可以单击类别以将结果过滤到该类别下的设置。如果您希望在搜索期间隐藏目录表,请将"workbench.settings.settingsSearchTocBehavior"
设置为"hidden"
。
当您在设置中搜索时,我们由 Bing 提供支持的搜索服务仍在提供它认为相关的结果。现在,该服务还会向您显示来自市场中具有相关设置的扩展。您将在设置搜索结果底部看到一个按钮显示匹配的扩展。单击后,将打开扩展视图,其中包含匹配的扩展。
Windows 和 Linux 上的自定义标题栏和菜单
在过去的几个迭代中,我们一直在努力改进 Windows 和 Linux 上标题栏和菜单的外观和感觉以及可用性。在此迭代中,我们删除了预览标签,旨在使其很快成为 Windows 上的默认体验。要启用此功能,您可以将设置"window.titleBarStyle"
设置为"custom"
。
与默认体验相比,新体验具有以下几个优点
- 整个产品中可主题化的标题栏、菜单栏和上下文菜单。这意味着您的深色主题保持深色!
- 在菜单栏中更好地进行键盘导航。我们使使用键盘在菜单之间切换以及使用菜单助记符变得更容易。
- 不那么引人注目的菜单栏。将
"window.menuBarVisibility"
设置为"toggle"
时,新体验更加紧凑,而且不那么令人反感。 - 更好的辅助功能。已解决几个辅助功能问题,以提高使用屏幕阅读器时的菜单可用性。
由于我们希望使这种新体验成为 Windows 上的默认体验,因此我们鼓励您尝试一下并向我们发送您的反馈,以便我们能够提供最佳体验。
面包屑改进
我们调整了新的面包屑栏,进行了各种改进并修复了错误
- 现在在编辑器中突出显示了已关注的文档符号。
- 在运行聚焦命令(⇧⌘;(Windows、Linux Ctrl+Shift+;))时,面包屑会自动启用。
- 面包屑与主题配合得更好。
- 面包屑现在会遵守文件排除配置。
新终端菜单
任务菜单已重命名为终端,并添加了一些用于集成终端的更多条目。
平台特定的键盘快捷键
现在可以使用isLinux
、isMac
和isWindows
在键盘快捷键的when
子句中启用特定操作系统的键盘快捷键
[
{
"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 或来自集成终端的命令等其他程序)删除或重命名的文件将不再关闭作为编辑器选项卡打开的文件。相反,该文件将指示它已从磁盘中删除,您可以保存该文件以将其恢复。
注意:除非文件已修改,否则文件的内容在重启之间不会保留。
中键单击以在新编辑器中打开文件
现在可以在资源管理器视图中使用鼠标中键单击以在新编辑器中打开文件,而不是在 预览模式 中重用以前的编辑器。
辅助功能改进
我们修复了一些辅助功能问题 - 主要是在键盘导航、屏幕阅读器支持和焦点方面。完整的列表可以在 此处找到。这是一项正在进行的工作,我们计划在 9 月份继续进行。
改进的 Windows 背景更新
我们对自定义的 Windows 背景更新程序进行了一些稳定性工作,以解决导致某些用户安装失败的问题。这是一项持续的工作项,将在未来的版本中进行更多改进。
编辑器
自动关闭和环绕字符
当键入某些括号(如{
、[
或(
)时,根据编程语言,在默认情况下,当它们后面紧跟着通常无法开始表达式的特定字符(例如;:.,=}])>
)时,它们将自动关闭。此行为可以使用editor.autoClosingBrackets
设置进行自定义。类似地,可以使用editor.autoClosingQuotes
自定义键入引号(如"
、'
或`
)时的自动关闭行为。
当选择文本并键入这些字符之一时,选择将被括号或引号包围。现在可以使用新的editor.autoSurround
设置分别调整此行为。
语言
CSS 导入的路径完成
CSS、SCSS 和 Less @import
的路径完成现在可用。SCSS 部分@import
也会被处理。
跳转到 CSS 链接的定义
现在可以在 CSS、SCSS 和 Less 中为@import
和url()
链接跳转到定义。
JSON
内置的 JSON 语言扩展现在支持新的 JSON 架构草案 07。
最有趣的补充是if
、then
、else
关键字,允许进行条件架构求值。
{
"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"
将在达到最大行长时换行属性,并将所有换行与第一个属性对齐。
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 检查器 以可视化语言服务器的行为。
您可以在 Microsoft/language-server-protocol-inspector 和 lsp-log-streaming-sample 中了解更多信息。
调试扩展:内置加载脚本视图
加载脚本资源管理器现在是 VS Code 调试器的内置组件。为了使用它,调试扩展需要以以下方式更改其调试适配器
- 向 `initialize` 请求返回的 `Capabilities` 中添加一个 `supportsLoadedSourcesRequest` 功能,其值为 `true`。
- 通过返回当前加载的源集来实现 `loadedSources` 请求。
- 为新加载或卸载的源发送 `loadedSource` 事件。
新的主题颜色
面包屑有一个新的主题颜色
- `breadcrumb.background`:面包屑项的背景颜色。
设置编辑器有一些新的主题颜色
- `settings.dropdownListBorder`:新下拉控件的边框颜色。
- `settings.modifiedItemIndicator`:指示已修改设置的行颜色。
Git 扩展 API
Git 扩展已开始 公开更明确的 API。该 API 可用于任何其他扩展,以与用户工作区中打开的 Git 存储库进行交互。由于它仍处于初步阶段,因此我们将在即将发布的版本中不断改进该 API。
建议的扩展 API
每个里程碑都伴随着新的提议 API,扩展作者可以试用它们。一如既往,我们热衷于您反馈。这是您试用提议 API 的方法
- 您必须使用内部人员版本,因为提议的 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;
}
要显示评论,扩展必须注册 `DocumentCommentProvider` 或 `WorkspaceCommentProvider`。
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`,可以为打开的文档返回评论。在提供评论时,扩展会指定文档上的当前线程,以及文档支持添加新评论的范围。可以在文档中添加或回复评论。
第一次注册 `WorkspaceCommentProvider` 时,`CommentsPanel` 将变得可见,并显示提供给它的所有评论。当在面板中选择评论时,将运行评论的 `command`,因此扩展确定行为。
预览功能
预览功能尚未准备好发布,但功能已经足够强大,可以供您使用。欢迎您在开发过程中提供早期反馈。
Electron 3.0 探索
在本里程碑中,我们探索了将 Electron 3.0.0 整合到 VS Code 中。这是 Electron 的一个主要版本,并附带 Chrome 66 和 Node.js 10.x(与我们当前版本相比,这是一个重大进步,当前版本具有 Chrome 61 和 Node.js 8.x)。我们计划在不久的将来向我们的内部人员用户推送更新,以收集更多反馈。如果您有兴趣帮忙,请确保安装 VS Code 内部人员版本。
工程
扩展和 webpack
我们现在使用 webpack 来捆绑扩展。它实现了两个目标:(1)减少扩展的启动时间,因为需要加载的文件更少,需要解析和分析的源代码更少;(2)减少安装时间,因为需要提取和写入磁盘的文件更少。到目前为止,我们已将捆绑包大小减少了约 4000 个文件!
性能金丝雀
我们添加了一个测试工具,以确保我们的启动性能不会倒退。有一个新脚本可以部署到专用机器上,以测试内部人员版本的性能。该脚本只需安装最新版本,并确保它在时间限制内启动。目前,我们从 Windows 开始,因为性能经常受到防病毒软件更新的影响,但计划是我们支持的所有平台上进行测试。
IPC 堆栈改进
我们改进了我们自己开发的 IPC 堆栈,以 支持进程之间的字节缓冲区消息。这使某些场景成为可能,例如在我们的不同进程之间发送二进制数据,而不会产生开销,以及允许我们优化 IPC 以提高性能。
值得注意的修复
- 6363:保存时将删除备用数据流
- 25919:强制打开新窗口为本机选项卡的新命令
- 49021:保存时不要重置 WSL 权限元数据
- 49403:自动附加在集成终端中调试时导致问题
- 55025:允许在扩展主机重新启动时继续调试
- 56084:打开的编辑器:重新审视组的顺序,以基于视觉顺序
- 56691:路径中存在 # 时启动 vscode 错误
- 57018:停止/重新启动调试器无法停止 babel-node
感谢
最后但并非最不重要的一点,对以下人士表示衷心的感谢!感谢他们帮助让 VS Code 变得更好
对 `vscode` 的贡献
- 123 (@16m):[修复拼写错误] s/clientWidth/clientHeight/ PR #56544
- Nil (@cdnil):
- Daniel McNab (@DJMcNab):添加 rust 区域注释 (#_55648) PR #57069
- Alexandr Fadeev (@fadeevab):检查改进的测试:${}、$$ 和 $(shell ())。 PR #55826
- Zach Bloomquist (@flotwig):将“快速切换窗口”选择默认设置为下一个窗口 PR #55535
- Olga Lesnikova (@Geloosa):Monarch 语言操作的简写类型 PR #57439
- Gopal Goel (@gopalgoel19):在“不再显示”菜单标签中附加文件扩展名 PR #55984
- Hao Hu (@hhu94):添加 openEditorAtIndex 命令以传递编辑器索引 PR #56441
- Itamar (@itamark):单击“提交错误”后隐藏反馈表单 PR #55938
- Jatin Sandilya (@jats22):扩展库服务不可访问时显示错误消息 PR #56767
- Jean Pierre (@jeanp413):修复 #47852 PR #56775
- Krzysztof Cieślak (@Krzysztof-Cieslak): 前缀检测从文件名开头开始 PR #55961
- Manoel (@ManoelLobo): 添加 .eslintrc 扩展名 PR #57014
- Mathieu Déziel (@mathdeziel): 修复了当左尖括号后面跟着空格时 Emmet 验证的问题 PR #55762
- Matt Ferderer (@mattferderer): 更新 Markdown 链接代码段以使用 https PR #56851
- Dmitry Ignatovich (@mechatroner): 添加更改文档语言的 API 函数 PR #55107
- Jesse Mazzella (@ozyx): 添加选项以启用参数提示的循环 PR #55354
- Karthikayan (@ParkourKarthik): 在“检查扩展更新”操作中通知过时扩展的数量 PR #56053
- @ris58h:
- Nikolai Vavilov (@seishun): 在 Windows 上保存现有文件时,使用 'r+' 进行截断 PR #42899
对 vscode-vsce
的贡献
- Amir Ali Omidi (@aaomidi): 将 useYarn 添加到 ICreateVSIXOptions、IPublishOptions 和 IPublishVSIXOptions 中 PR #279
- Amadeusz Annissimo (@amadeann): 更改了 package 命令中的 --out 标志描述 PR #280
- Sriram Thaiyar (@sri): 发布扩展成功时显示其 URL PR #281
对 vscode-eslint
的贡献
- Jan Pilzer (@Hirse):
- Dave Townsend (@Mossop): 允许为语言服务器设置节点运行时 PR #516
对 language-server-protocol
的贡献
- Jens Fischer (@Gama11): 使用提供的代码操作种类添加 CodeActionOptions PR #534
- Remy Suen (@rcjsuen):
- @ehuss: 修复颜色表示请求中的拼写错误。 PR #544
- Miro Spönemann (@spoenemann): PR #550
对 vscode-languageserver-node
的贡献
- Jens Fischer (@Gama11): 使用提供的代码操作种类添加 CodeActionOptions PR #385
- Anton Kosyakov (@akosyakov): 确保在重启时安装文档监听器 PR #396
对 debug-adapter-protocol
的贡献
- Josh Tynjala (@joshtynjala): 添加 SWF 调试适配器 PR #1
- Glenn Sarti (@glennsarti): (维护) 将 Puppet 添加到实现者列表中 PR #2
- Thomas Müller (@tmueller): 更新 adapters.md PR #4
- F.W. (@fwcd): 将 Eclipse LSP4J 添加到已知 SDK 列表中 PR #5
对 vscode-css-languageservice
的贡献
- Connor Shea (@connorshea): 将 CSS Lint 规则名称添加到 lint 标记中。 PR #116
对 vscode-html-languageservice
的贡献
对 vscode-json-languageservice
的贡献
- Viktor Havrylin (@Fer0x): [draft-07] 实现 if/then/else PR #24
对 node-jsonc-parser
的贡献
- Chris Wendt (@chrismwendt): 不要修改给定的路径 PR #12
对 vscode-generator-code
的贡献
对 localization
的贡献
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.