2016 年 10 月 (版本 1.7)
1.7.2 恢复版本
我们今天发布 1.7.2 版本,其中包含新版本的 TypeScript 服务器(更新至 2.0.10)。服务器更新将默认重新为 JavaScript 用户启用自动类型获取 (ATA) 功能。此功能极大地改进了 JavaScript 项目中的 IntelliSense,并消除了手动安装 TypeScript 声明文件 (.d.ts 文件) 的需要。此功能通过查询 npmjs 服务来检索所用模块的相关声明文件。有关此功能的更多详细信息,包括如何禁用它的详细信息,请参阅这些发行说明的相关部分。
1.7.2 版本还添加了最终的 1.7 翻译并修复了几个重要的问题。
下载:Windows | Mac | Linux 64 位:.tar.gz .deb .rpm | Linux 32 位:.tar.gz .deb .rpm
1.7.1 恢复版本
我们正在发布 1.7.1 恢复版本,以禁用自动 JavaScript 类型文件获取功能。我们需要调整获取方式,以避免 NPM 注册表的不必要负载,我们正在与 TypeScript 和 npmjs.org 团队密切合作。我们希望在未来的版本中启用此功能。
如果您对详细信息感到好奇,可以阅读我们描述此事件以及 NPM 和 VS Code 缓解措施的博客文章。
下载:Windows | Mac | Linux 64 位:.tar.gz .deb .rpm | Linux 32 位:.tar.gz .deb .rpm
10 月发行摘要
欢迎使用 Visual Studio Code 的 10 月版本。此版本中有许多重大更新,我们希望您会喜欢,其中一些主要亮点包括
- 水平布局 - 将编辑器组织为垂直或水平组。
- 键盘快捷键参考 - 新的可打印键盘快捷键 PDF 备忘单。
- HTML 中的 CSS 自动完成 - 在 HTML 中嵌入的 CSS 中获取丰富的自动完成。
- 调试命中计数控制 - 设置断点命中计数条件。
- 简化的 Node.js 调试 - 轻松配置您的 Node.js 调试会话。
- Sublime 和 Atom 的键绑定 - 您现在可以在 VS Code 中使用这些众所周知的键盘快捷键。
- 禁用扩展 - 快速全局禁用扩展或针对特定工作区禁用扩展。
- 改进的 TypeScript 和 JavaScript 语法 - Dark+ 主题现在为变量和函数引用着色。
- 扩展包 - 直接在扩展详细信息中查看扩展包的依赖项。
发布说明按以下与 VS Code 重点领域相关的部分进行排列。以下是一些进一步的更新
- 工作台 - 一些视图状态现在持久保存在用户设置中。从快速打开中打开多个文件。
- 编辑器 - 键盘快捷键参考、更精细的格式控制。
- 语言 - JavaScript 和 CSS 改进。
- 扩展 - 新的键绑定和格式化程序类别,便于搜索。
- Node.js 调试 - 多目标调试支持、新的调试设置。
- 扩展创作 - 支持扩展 CHANGELOG.md 文件。添加到编辑器选项卡上下文菜单。
工作台
水平布局
您现在可以将编辑器组的布局更改为垂直或水平。两种布局的行为与以前相同,允许您移动和调整编辑器和编辑器组的大小。

要为当前工作区启用水平布局,请使用
- 视图菜单 切换编辑器组布局。
- 命令面板 切换垂直/水平编辑器组布局。
- 打开的编辑器视图标题中的操作。

还有一个键盘快捷键 (⌥⌘0 (Windows, Linux Shift+Alt+0)) 可在两种布局之间快速切换。
一旦您选择了布局,我们将为当前工作区保留它并在重新启动后恢复它。
切换最大化面板
我们引入了一个全局工作台命令,用于最大化面板大小(总高度的 80%)。如果面板已经最大化,此命令将面板缩小到其先前的大小。当您有大量输出需要快速查看时,这非常方便。此命令目前未绑定到任何键盘快捷键,但您可以轻松添加自己的键绑定。
切换侧边栏和隐藏状态栏现在持久保存在用户设置中
我们更改了“视图”菜单中的一些切换,以更新您的用户设置文件,而不是在浏览器中保留其状态。这将使在另一台机器上通过复制设置文件来恢复相同状态变得更容易。
当您从“视图”菜单更改以下设置时,它们现在将在您的用户设置文件中更改
workbench.sideBar.location控制侧边栏的位置(左或右)workbench.statusBar.visible控制状态栏的可见性
此外,从“视图”菜单更改缩放级别现在会写入 window.zoomLevel。
从快速打开中打开多个文件
感谢 Will Prater (@wprater),您现在只需按向右箭头键即可从快速打开中打开多个文件。这将在后台打开当前选定的文件,您可以继续从快速打开中选择文件。
编辑器
键盘快捷键参考
帮助 > 键盘快捷键参考 会调出 VS Code 命令键盘快捷键的可打印 PDF 参考表。将此参考随身携带,您将很快成为 VS Code 高级用户。
这是 macOS 的参考

以下是三个特定于平台的版本的链接
注意:我们还添加了一个菜单命令,用于转到介绍性视频(帮助 > 介绍性视频)。
格式化文档 / 格式化选择
编辑器现在有两个明确的格式化操作:格式化文档 (⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I)) 和 格式化选择 (⌘K ⌘F (Windows, Linux Ctrl+K Ctrl+F))。

我们还添加了新的配置选项来启用/禁用 JavaScript、TypeScript、JSON 和 HTML 的默认格式化程序。当您安装了提供相同语言格式化的另一个扩展时,请使用这些选项。
我们向 Marketplace 添加了一个新的 Formatters 类别,以便您可以轻松搜索和查找源代码格式化扩展。

语言
更好的 JavaScript IntelliSense
注意:此功能在 1.7.1 版本中被禁用。请继续阅读以了解未来版本中将推出什么。
VS Code 使用 TypeScript 语言服务器在 JavaScript 文件中提供 IntelliSense。过去,您必须创建一个 jsconfig.json 文件。您还必须手动安装所有正在使用的模块和库的 typings(类型声明)文件。这不是一件容易的事,特别是当您是纯 JavaScript 开发人员时。
我们与 TypeScript 团队的朋友们进行了交流,他们提出了“自动类型获取”(Automatic Type Acquisition)。ATA 使 typings 文件几乎不可见。启用了 ATA 的 TypeScript 语言服务器会监视您的 package.json 文件,并自动将所有依赖项的 typings 文件安装到文件系统上的缓存中。当它发现对已知客户端库的引用时,它也会执行相同的操作。当您随后调用 IntelliSense 时,TypeScript 服务器会使用缓存中的 typings 文件。缓存由您的所有工作区共享。如果没有 jsconfig.json 文件,TypeScript 服务器会假定工作区中的所有内容都属于同一项目。
我们认为这太酷了,希望您能尽快体验它。我们对 ATA 的集成仍然有些粗糙,但我们决定默认启用它。如果您遇到问题,可以通过在用户设置中将 typescript.disableAutomaticTypeAcquisition 设置为 true 来将其关闭。
以下是使用 ATA 时需要注意的几点
- ATA 向后兼容。如果您有一个
typings文件夹或使用npm安装了 typings,那么这些优先于自动获取的 typings 文件。 - ATA 获取最新可用版本的 typings 文件。如果您依赖于较旧版本的库或模块,那么库或模块公开的实际 API 与 typings 文件中描述的 API 之间可能存在差异。如果您需要特定版本的 typings 文件,可以手动安装:
npm install @types/<module name>@x.y.z。 - 越来越多的 npm 模块捆绑了它们的 typings 文件,这意味着获取 typings 的唯一方法是安装模块。ATA 不会为您安装 npm 模块,因此您必须自己完成。
- 从对
package.json文件中的依赖项进行更改到获取相应的 typings 文件并可用于 IntelliSense 之间存在短暂延迟。 - 在实现中,ATA 功能首先查询 npmjs 以查找包含已知声明文件列表的模块。如果您的项目包含任何这些模块,它们的声明文件将被下载并添加到全局缓存中。
HTML 中的 CSS 完成
您现在可以看到 HTML 中嵌入的 CSS 样式(例如代码完成、验证和颜色注释)的 CSS 语言功能。

改进的 TypeScript 和 JavaScript 语法
TypeScript 和 JavaScript 语法突出显示基于 TypeScript 团队编写的 TypeScript textmate 语法。最近几个月,该语法已完全重写。
主要目标是解决尽可能多的报告问题。此外,我们希望通过生成更接近其他流行 JavaScript 语法(例如 Atom 语法)的范围来提供更好的现有颜色主题体验,同时仍支持 JavaScript React 语法等功能。
由于这项努力,超过 100 个问题已得到修复,包括报告变量和函数引用的请求。我们决定利用新范围,现在还在我们的默认深色和浅色 Plus 主题中为变量和函数引用着色。我们希望您喜欢它!
注意:如果您已经一直在帮助我们使用 最新 TypeScript 和 JavaScript 语法扩展 测试最新语法:您现在可以卸载该扩展。
Linter 扩展
vscode-eslint 和 vscode-tslint 扩展现在提供设置以在保存时自动更正可修复的警告。
{
"eslint.autoFixOnSave": true,
"tslint.autoFixOnSave": true
}
注意:当 files.autoSave 设置为 afterDelay 时,此设置将被忽略。
扩展
键绑定类别
键盘快捷键对于提高工作效率至关重要,改变键盘习惯可能很困难。为了帮助解决这个问题,我们添加了两个新扩展,并在 Marketplace 中引入了一个新类别 Keymaps。目的是通过消除学习新键盘快捷键的需要,使在编辑器之间切换变得更容易。
我们为 Atom 和 Sublime Text 构建了一个扩展。我们发现了一些最流行的键盘快捷键,希望您能提供反馈,告诉我们缺少什么。如果我们遗漏了某个键盘快捷键,请在 repo 中打开一个 issue 或提出 PR。

此外,您可以使用 keybindings 贡献点创建自己的键绑定扩展,并将其添加到 Keymaps 类别中。
格式化程序类别
存在许多提供源代码格式化功能的扩展。一些最流行的格式化程序安装量超过 10 万次!我们希望让您更容易找到格式化程序,因此我们在 Marketplace 中添加了一个名为 Formatters 的新类别。今天就在 Marketplace 上搜索并安装 Formatter。
以下是我们最喜欢的一些
禁用扩展
您通常有多个工作区和安装的各种扩展来支持这些工作区。大多数情况下,这些扩展是单个工作区独有的,其他工作区不需要。例如,如果您有 JavaScript 和 Go 语言工作区,您不需要在 Go 工作区中使用 JavaScript linting 扩展,反之亦然。在此版本中,您现在可以只运行您认为工作区必要的扩展,并禁用其余的扩展。如果您不想卸载它们,并且不希望它们运行,您还可以为整个 VS Code 应用程序禁用扩展。

您还可以通过 VS Code 中的几次点击来禁用或启用所有扩展。

扩展包
上一个版本我们介绍了“扩展包”,它们是依赖于其他扩展的扩展。在此版本中,我们向扩展编辑器添加了一个新选项卡,以显示安装包时安装的这些依赖项。

当您卸载扩展包时,其所有引用的依赖扩展也会被卸载。
Node 调试
简化的启动配置
为了使设置 Node.js 调试尽可能简单,我们尝试简化初始“launch.json”体验
- 必需但很少更改的属性现在呈现为灰色,以便更清楚地表明在最常见的情况下无需更改它们。
- 不常用(具有良好默认值)的属性已从初始配置中删除,以减少“噪音”。这些属性仍然可以通过 IntelliSense 轻松发现。
- 添加了注释和在线文档链接。
- 在线调试文档已重写和改进。

注意:由于我们只能更改 VS Code 的内置 Node.js 调试器,因此我们依靠其他调试扩展的作者来做类似的事情(如果需要)。
命中计数条件断点
VS Code 现在支持为断点设置“命中计数条件”(除了前段时间引入的“表达式条件”)。“命中计数条件”控制断点需要被命中的次数才能“中断”执行。

是否遵守“命中计数条件”以及表达式的确切语法取决于所使用的调试器扩展。在此里程碑中,只有内置的 Node.js 调试器支持命中计数(但我们希望其他调试器扩展会很快跟进)。
Node.js 调试器支持的命中计数语法要么是整数,要么是运算符 <、<=、=、>、>=、% 后跟整数。
一些示例
>10在命中 10 次后始终中断<3仅在前两次命中时中断10与>=10相同%2每隔一次命中中断
多目标调试
10 月版本包含“多目标调试”的早期实现,即单个 VS Code 实例(和单个项目文件夹)中可以同时激活多个调试会话。
此功能有助于以下场景
- 同时调试扩展及其调试适配器和/或语言服务器。
- 从单个项目文件夹调试客户端和服务器。
- 调试集群程序。
注意:在此里程碑中,重点是使多目标调试的内部抽象正确,而不是如何在 UI 中体现它。因此,多目标调试的 UI 及其设置方式具有高度实验性,并且肯定会在接下来的里程碑中发生变化。
要启用“多目标调试”,请创建一个类型为 composite 的新启动配置,并添加一个数组类型属性 configurationNames。在该属性下列出应并行启动的其他启动配置的名称。
启动 composite 配置后,单个会话将显示为 CALL STACK 视图中的顶级元素。操作(例如浮动调试小部件中的所有操作)始终在 CALL STACK 视图中当前选定的会话上执行。

调试设置
我们引入了以下新设置
debug.allowBreakpointsEverywhere- 允许在任何文件中设置断点(而不仅仅是在明确注册的文件中)。如果您想使用现有调试器(例如 Node.js 调试器)调试新(转译)语言,这很有用。debug.openExplorerOnEnd- 控制调试会话结束时是否应自动打开资源管理器。
扩展开发
重大更改:MarkedString[] 语义
返回 MarkedString | MarkedString[] 的 API 相关实现已更改语义。每个 MarkedString 将通过一条水平线在视觉上彼此分开。HoverProvider 和 Decoration API 都受此影响。
更新日志
您现在可以直接在扩展详细信息视图中显示扩展的 CHANGELOG.md。
我们建议扩展作者将现有更新日志从扩展的 README.md 移动到单独的 CHANGELOG.md 文件中。与 README.md 类似,如果 CHANGELOG.md 放置在扩展的工作区根目录中,它将由 vsce 发布工具自动包含。
为编辑器选项卡上下文菜单提供菜单项
我们添加了一个附加位置,扩展可以在其中贡献菜单项,即编辑器选项卡(当选项卡被禁用时也有效)的上下文菜单。在此处贡献的相关菜单路径是 editor/title/context。
例如
"commands": [{
"command": "doSomething",
"title": "Do Something"
}],
"menus": {
"editor/title/context": [
{
"command": "doSomething"
}
]
}
onDidChangeVisibleTextEditors 事件
我们添加了一个 onDidChangeVisibleTextEditors 事件,每当可见编辑器列表发生变化时,该事件就会触发。
立即更新:使用最新的 vscode.d.ts
一如既往,我们扩展 API 的最新版本在 vscode.d.ts 文件中定义。
注意:当您更新扩展以使用 API 版本 1.7.0 或更高版本时,请确保使用最新版本的 vscode-node-module (^1.0.3) 并确保使用 TypeScript 2.0。
请阅读此处了解如何将现有扩展迁移到最新的 vscode 模块。
新命令
| 键 | 命令 | 命令 ID |
|---|---|---|
| ⌥⌘0 (Windows, Linux Shift+Alt+0) | 切换编辑器组布局 | workbench.action.toggleEditorGroupLayout |
未分配 |
切换最大化面板 | workbench.action.toggleMaximizedPanel |
| 格式化 | ||
| ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) | 格式化文档 | editor.action.formatDocument |
| ⌘K ⌘F (Windows, Linux Ctrl+K Ctrl+F) | 格式化选择 | editor.action.formatSelection |
| 集成终端 | ||
| ⌘Home (Windows Ctrl+Home, Linux Shift+Home) | 滚动到顶部 | workbench.action.terminal.scrollToTop |
| ⌘End (Windows Ctrl+End, Linux Shift+End) | 滚动到底部 | workbench.action.terminal.scrollToBottom |
显著变化
- 929: Windows 10: 焦点未置于窗口,但任务栏闪烁
- 2814: Windows: Reveal in Explorer 功能不再将资源管理器窗口置于 vscode 前面
- 6466: 使用 cmder 时,Open in Command Prompt 不会打开 cwd
- 10210: 无法复制调试元素的值,例如异常消息
- 11334 & 13229: 改进的终端 IME 支持
- 11431: RPM 包缺少 PATH 中的快捷方式
- 12036: 在带有触摸屏的系统上使用时,VS Code 非常卡顿
- 12260: 终端中没有足够的存储空间来处理此命令
- 12969: HTML: script 标签内的注释不再对 script 语言敏感
- 13554: 集成终端偶尔会包裹一些行
- 14102: 默认折叠默认设置并记住编辑器状态
由于 13919,Windows 中的文件扩展名关联已损坏。您需要重置文件扩展名关联才能使用 VS Code 打开。
这些是 已关闭的错误,这些是 1.7 更新的 已关闭的功能请求。
对扩展的贡献
我们的团队维护或贡献了许多 VS Code 扩展。最值得注意的是
感谢
最后但同样重要的是,衷心感谢!以下帮助使 VS Code 变得更好的各位:
- @barakd: Git quick open should correct invalid branch names PR #12194
- Christian Alexander (@ChristianAlexander)
- Cliff Koh (@cliffkoh): Fix typos and consistency issues PR #14078
- Sergey Shakhnazarov (@daserge): Avoiding "write EPIPE process.send" error on exit PR #13774
- xzper (@f111fei): Fixed #13670 PR #13739
- @greams: Add option for --list-extensions arg PR #13131
- Kei Son (@heycalmdown): Add an indicator for the current window PR #13113
- Huachao Mao (@Huachao): Update handlebars block comments symbols PR #12271
- Michael Hudson (@Huddo121): Increase coverage of tests for IAction.isAction() PR #13992
- Yuki Ueda (@Ikuyadeu): fix ini #13648 PR #13923
- Jeong Woo Chang (@inspiredjw): Cannot read property 'uri' of null fix PR #13263
- Jess Chadwick (@jchadwick)
- Kai Wood (@kaiwood): Add setting to prevent copying empty selections PR #13678
- Krzysztof Cieślak (@Krzysztof-Cieslak)
- Michael (@michaelchiche): fix typo in type definition PR #13159
- Michael Chou (@MikeChou): Follow symlinks recursively in Linux launch script PR #14046
- Denis Malinochkin (@mrmlnc)
- Renfred Harper (@renfredxh): Enable line highlighting for read only editors PR #14022
- Robin Munn (@rmunn): Remove incorrect ANSI escape code for LF PR #13345
- Sirisak Lueangsaksri (@spywhere): Sort the installed extension list PR #13399
- Tereza Tomcova (@the-ress)
- Call AllowSetForegroundWindow before sending IPC PR #13255
- Convert strings passed from node using UTF-8, not the system code page Issue #7727
- Follow Windows conventions when composing cmdline Issue #8429
- Ivan Samoylenko (@The-Smallest): Typo in project.json PR #13461
- Will Prater (@wprater)
- Toru Nagashima (@mysticatea): Fixes zero location support PR-ESLint #153
- Dario Fuzinato (@fussinatto): Fixing typos in readme PR-ESLint #157
- Morton Fox (@mortonfox): Fix license link PR-LSP #74
- Asad Saeeduddin (@masaeedu): Fix typo in protocol documentation PR-LSP #85
- Anton Kosyakov (@akosyakov)
- Fixes Microsoft/language-server-protocol #87 PR-LSP #90
- Fixes issues #72 and #78 PR-LSP #91
- Richard Lasjunies (@rlasjunies): support of fixes provided by TSLint engine PR #96
- Robert Stoll (@robstoll): fixed regexp pattern, violated rule was missing PR #107