2016年6月(1.3版)
1.3.1修复生成
为了解决一些问题,我们发布了1.3.1修复版本。你可以点击这里查看解决的问题。
下载: Windows | OS X | Linux 64-bit .zip .deb .rpm | Linux 32-bit .zip .deb .rpm
六月发布摘要
对于6月发布的VS Code,我们真的很兴奋。我们对扩展管理(专用扩展视图)和添加标签(标签编辑窗口)做了一些重大改变。其他新功能包括全局搜索和替换,改进拖拽和可选的缩进向导。所有这些都是增强现有功能,比如集成终端,并且对一些重要的bug进行了修复。
以下是亮点:
- 选项卡:选项卡式编辑窗口可让您快速浏览到您的文件和组织您的工作台。
- 扩展:在新的扩展视图中可以快速查找,安装和管理您的扩展。
- 工作台:增强拖拽、编辑预览,以减少您的编辑窗口数量, 还有更多的集成终端。
- 编辑:全局搜索和替换,缩进指引,问题面板查看错误和警告。
- 语言:更好,更全面的支持Emmet,Atom JavaScript语法扩展。
- 调试:对附加到运行的Node.js进程和在调试期间改变环境变量做了大量改进。
- 扩展创作:菜单栏和上下文菜单有新功能。对非文本资源开放新的API,并添加编辑装饰附件。
选项卡
在此发布中,VS Code会在编辑器上方的标题区域以选项卡的形式显示打开的文件。您可以通过左右拖拽移动选项卡来组织文件顺序,或在选项卡上单击右键执行文件的具体操作。
如果你不喜欢使用选项卡,可以通过设置workbench.editor.showTabs禁用它们。
当选项卡显示区域没有足够的可用空间来显示所有文件时,你会看到选项卡会在左侧和右侧溢出。您可以随时使用鼠标左右滚动来显示所有选项卡。溢出图标(见下图)会在有可见视图之外的选项卡时被启用。点击溢出图标显示所有在该组中打开的选项卡的列表。
您可以使用新设置workbench.editor.openPositioning来控制新的编辑器在哪里打开。默认情况下,他们会在活动选项卡的右边打开,但你可以设置开在左边,或者所有编辑器的左边或右边。
Open Editors视图
新的OPEN EDITORS视图替换以前的WORKING FILES视图。
OPEN EDITORS视图是一个可视化的编辑器(打开文件)堆栈展示:
- 显示所有编辑器组和编辑器组中的编辑器。
- 通过点击一个编辑器将其激活,并在相应的组中打开它。
- 通过对最高级的操作,可以关闭所有或保存所有打开的编辑器。
- 编辑器级别的操作,可以关闭或保存当前编辑器。
- 为上下文菜单提供更细致的操作。
- 可以在编辑组或者资源管理器之间拖拽编辑器
您可以通过设置显示数量为0,”explorer.openEditors.visible”: 0,来隐藏OPEN EDITORS视图。
注:由于WORKING FILES视图已被删除,请参考这个问题,以获得新的或更改命令标识符的概述。
关于编辑器堆栈更多信息
至于在工作台使标签的准备,我们重新审视你怎么可以在VS代码编辑器进行交互。
在准备推出工作台的选项卡的过程中,我们重新整理了VS Code的用户交互体验。
许多其他工具转移过来的用户对一些在VS Code编辑器(打开文件)中的操作感到困惑。
例如:
- 关闭一个肮脏的编辑器(未保存文件的编辑器),没有保存提示。
- 关闭的编辑器,已经关闭的实例组中不显示之前关闭的编辑器。
- 会显示所有在组中打开的和未打开的编辑器的编辑历史列表。
- 资源管理器中的WORKING FILES视图是一个令人困惑的概念。
我们试图解决编辑栈的这些问题:
- 您最多可以同时并排打开3个编辑器组,每组包含一组编辑器。
- 每次打开一个编辑器时,它会被添加到堆栈的顶部。
- 在最后一个编辑器被关闭和组被隐藏时,组中会显示之前关闭的编辑器。
- 在保存脏浏览器时,您会得到提示。
使用Ctrl + Shift + Tab键弹出一组最近使用的编辑器的列表,以用来快速导航。使用View:Show All Editors 命令显示一个所有组中打开的所有编辑的列表。
注意,编辑器堆栈的操作不依赖于是否启用选项卡。您将受益于这些变化,即使你不想使用选项卡。
注:由于大的方案上的影响,编辑器堆栈中许多命令标识符已被重命名,并添加了新命令。请参考记录了修改的这个问题,。如果您喜欢以前的操作,它还提供了指导,介绍了如何更改键绑定到旧的操作。
扩展管理
我们已经推出了新的扩展视图,提高查找,安装和更新VS Code扩展。
要显示扩展视图,单击扩展视图图标或按Ctrl + Shift + X:
通过点击… More 按钮,能够显示:
- 当前安装的扩展列表
- 可更新的扩展列表
- 根据您的工作区列表推荐的扩展列表
- 全球流行的扩展名列表
清除搜索框,显示已安装的扩展列表。
通过扩展列表浏览,也可以安装,卸载或更新它们。点击一个扩展将在编辑器区域显示详细描述。
工作台
问题窗口中的错误和警告
随着6月发布,我们提供了一个新的Problems 窗口。它停靠在VS Code底部,会显示错误,警告和其他资源生成的信息,比如语法和格式检查器或其他信息。在以前的版本中,我们在编辑器顶部的quick box中显示错误和警告。我们从用户反馈中了解到,这使得它很难在编辑文件审查错误和警告。新的面板可以很容易通过你的错误和警告导航到这些问题,然后解决它,在这个过程中编辑器一直处于打开状态。
提供了一个筛选框来搜索和筛选显示的问题。您可以按类型或文本过滤。例如,“errors”将筛选出所有问题中的error。 “character”将过滤与包含单词“character”有关的问题。
您可以通过一下方式打开Problems 窗口:
- 使用快捷键Ctrl + Shift + M
- 从View|Problems菜单
- 通过在Command Palette 中的View > Show Problems 命令
快捷键Ctrl + Shift + M之前用来在quick open 和quick box中显示错误和警告,现在将打开Problems 窗口。
默认情况下,Problems 窗口滚动显示显示当前文件的问题。如果你不希望自动显示,可以通过设置problems.autoReveal禁用它。 设置problems.autoReveal为false,避免你在活动的文件之间切换时改变问题 视图。
注意:这个视图是由语法、格式检查器、生成任务、配置的扩展生成器或工作区外配置生成的描述展示。您必须配置或者适当地定制他们才能看到预期的问题,。
更强大的拖拽
对于所有选项卡的操作,我们也着眼于改善对编辑器中拖拽的支持。我们总是允许你从VS Code外部拖拽文件到编辑器中打开。现在还有更多功能,你可以:
拖拽分离
拖拽一些文件拖到编辑器侧面的左侧或右侧区域打开。您也可以从资源管理器或功能启动的选项卡上中拖拽文件。
放置反馈
当你在编辑器区域拖拽文件或选项卡时,会得到放置反馈,表明放置的目标位置。
从资源管理器和OPENED EDITORS视图中拖拽
现在,您可以从资源管理器和OPENED EDITORS视图中 拖拽文件或编辑器到指定的编辑器空间。
编辑预览
编辑预览是与编辑器堆栈和选项卡密切相关的。如果你正在浏览许多文件,你可能不希望看到每次打开文件时就打开一个选项卡。编辑预览有助于通过重用当前编辑器以减少编辑器(和选项卡)的打开数量。如果你在资源管理器中单击一个文件,它将会在预览模式下打开。只要编辑停留在预览模式中,其他的文件将在相同位置的预览编辑器中打开。
某些操作会导致预览编辑器成为一个正常的编辑器:
- 当您修改一个文件的内容,编辑器一直保持打开。
- 同样,当你在资源管理器或一个内部选项卡中双击打开文件,或将文件移动到特定的编辑组中。
预览编辑器显示斜体字。
我们引入了新的设置来控制编辑预览:
- workbench.editor.enablePreview全局启用或禁用预览编辑器。
- workbench.editor.enablePreviewFromQuickOpen当从quick box/quick open打开时,启用或禁用预览编辑器。
集成终端
在VS代码1.2.0推出的集成终端在此版本中有许多改进,最关键的是在同一时间启动和使用多个终端。可以通过点击在TERMINAL 面板右上角的加号图标,或通过快捷键Ctrl + Shift +`命令添加终端实例。可以在切换终端的下拉列表旁创建其他实例。
添加一些新的命令与帮助管理TERMINAL 窗口及终端实例。
他们是:
- workbench.action.terminal.focus:在终端上设置焦点。这就像toggle,但不会隐藏焦点终端,它一直可见。
- workbench.action.terminal.focusNext:聚焦下一个终端实例。
- workbench.action.terminal.focusPrevious:聚焦以前的终端实例。
- workbench.action.terminal.kill:删除当前的终端实例。
在当前终端中运行选定文本的能力已经通过workbench.action.terminal.runSelectedText命令添加。
要使用此命令,在编辑器中选择文本,然后通过Command Palette运行命令:
还增加了以下改进:
- 现在在Linux和Windows可以依次使用Ctrl +Insert和Shift + Insert进行复制和粘贴。这个暂时不可配置,直到我们可以在xterm.js库中定制复制/粘贴快捷键。
- CJK字符现在应该使用正确的宽度。表扬@jerch给出的PR。
- 终端的性能已显著改善,运行产生较大输出的命令时,不应该再表现不佳。
- Ctrl +Left和Ctrl + Right 现在会通知underlying shell跳过输入文字。
- 现在默认启用终端光标闪烁。与编辑器的editor.cursorBlinking设置共享配置。
- 当终端不在是焦点时,显示空心光标。
- 终端字体大小和行高可以设置, 感谢@kisstkondoros提供的PR。
- 选择文本样式也有所改进,目前选择完整的一行文本,不包含边缘也切换文本颜色。
- 通过terminal.integrated.shellArgs.*设置,可以将参数传递到Linux和OS X上的终端外壳上。
Command Palette :File: Open Recent
在Command Palette 中运行命令File: Open Recent 可以很容易打开之前打开的文件夹或文件中进行快速切换。一般选定的文件或文件夹将在运行实例中打开。在此版本中,如果(在Mac上的“Cmd’)按住Ctrl键选择一个条目打开,将会打开一个新的窗口。
恢复全屏
新设置window.restoreFullscreen已添加全屏打开VS Code,如果它是在全屏模式之前关闭。
编辑
全局搜索和替换
全局搜索和替换是我们的用户最需要的功能之一。在这个版本中,我们加强了我们的搜索视图,包括替换功能,让您可以替换多个文件中的文本。您可以在所有文件、部分文件或者结果中进行替换。您还可以排除一些结果或文件,然后再在其余部分进行替换。搜索视图为您提供了一个很好的预览功能,点击一个挂起的更改会在DIFF编辑器视图中显示修改前后替换的文本。
访问替换功能,可以通过:
- 在Search View中通过展开搜索文本框
- 使用Ctrl + Shift + H,从 Edit| Replace in Files菜单
- 在Command Palette中使用Replace in Files命令
注意:由于搜索有最多显示2048个结果的限制,因此目前替换也有相同的限制。
缩进指引
VS Code现在可以显示缩进指引,通过editor.renderIndentGuides设置启用此功能。
命令标识符建议
当编辑keybindings.json文件时,你现在会得到可用命令补全。
鼠标滚轮缩放编辑字体
感谢@kisstkondoros提供的PR #6990, 设置editor.mouseWheelZoom: true后,可以通过先按Ctrl(Mac的‘Cmd’)键然后滑动鼠标滚轮来改变字体大小:
多行查找
我们已经添加了对多行查找和替换的支持:
Emmet
感谢来自Denis Malinochkin(@mrmlnc)通过拉取请求和测试提供的大力支持,我们现在覆盖更多的Emmet功能(缩进换行, 移除标签,更新标签,平衡,切换注释,…)。
语言
提取CSS / LESS / SCSS和JSON加入到扩展中
CSS,LESS,和SCSS语言的支持已经被重构,以符合VS Code扩展。所有这些语言都是基于相同的基础代码,它们使用相同的语法。语法在一个单独的节点的进程中运行,使用语法协议与VS Code进行通信。
提取Markdown到扩展中
Markdown语法支持已重构为一个VS Code扩展。它采用了Markdown TextMate来高亮语法规则,并使用依赖于CommonMark Spec的markdown-it 库 提供了HTML格式的Markdown。
Atom JavaScript语法
作为一种替代内置JavaScript语法,现在你可以安装Atom JavaScript语法。它不同于内置的语法,如果主题支持,它可以为变量和方法引用创建tokens来改变不同的颜色。
调试
可移动的调试工具栏
通过这个用户请求启动了这个功能,现在可以水平拖动调试工具栏:
改变变量值
如果调试扩展支持的话,我们现在支持改变简单变量的值。
Node Debug是第一个这样做的扩展:
一个简单的变量就是一个变量树的叶子,例如:一个变量,对象属性,或一个数组元素。
悬停显示变量类型
如果是调试扩展支持的变量类型,现在支持鼠标悬停在变量名上时显示变量类型。
后退
如果调试扩展支持后退,现在显示后退操作和按钮:
操作系统特定的启动配置
由这个用户请求发起的,现在可以在launch.json文件中指定操作系统的特殊配置:
{
"type": "node",
"request": "launch",
"runtimeExecutable": "mynode",
"windows": {
"runtimeExecutable": "mynode.exe"
}
}
Node.js调试
附加到进程
Node.js调试现在支持附加到尚未在调试模式下启动的一个Node.js进程。这非常有用,假如因为怕影响生产服务器性能,你不能一直处在调试模式,这时你就可以使用附加到进程的功能。
要附加到一个Node.js的过程中,需要您在附加启动配置中通过processId 属性指定进程ID。
因为它是不太现实总是有一个开始调试会话之前编辑的启动配置,我们引入了一个新的变量类型可以绑定到一个互动的用户界面,例如到一个进程选择器:
下面是使用$ {command.PickProcess}变量,让用户在启动调试会话之前选择Node.js进程的启动配置:
{
"name": "Attach to Process",
"type": "node",
"request": "attach",
"processId": "${command.PickProcess}"
}
扩展创作
菜单项和上下文菜单项
我们现在允许扩展创作者增加资源管理器右键菜单(explorer/context),编辑器上下文菜单(editor/context),并编辑标题菜单(editor/title)。
它主要作用在两个步骤:
1.使用新增的 commands 扩展节点指定一个命令的标题和图标。
2.使用新的menus 节点创建一个新项。
菜单项就是规定一个像editor/context 一样的菜单地址,并且必须指定运行的 command。为了避免过于杂乱的菜单,菜单项也可以指定它的父级菜单项。最后,可以定义一种顺序的可替代的命令和组。组可以被分开展示,只是凸显navigation 组。
"commands": [{
"command": "markdown.showPreview",
"title": "Open Preview",
"icon": {
"light": "./media/Preview.svg",
"dark": "./media/Preview_inverse.svg"
}
}],
"menus": {
"explorer/context": [
{
"when": "resourceLangId == markdown",
"command": "markdown.showPreview",
"group": "navigation"
}
]
}
上面的代码片段的作用是,当是资源文件使用Markdown语言时,在资源管理器上下文菜单的导航组中增加了一个实例。注意,当执行一个菜单项命令时会将当前资源文件URI传递到该命令。
在文本前后添加装饰
装饰 API添加了新功能。现在,您可以在一个修饰的前后添加’附件’。附件可以是黏在被修饰文本图标和文本,以及那支以装饰文本文本内容。
一个例子是附加到文本的颜色值的CSS颜色装饰:
装饰附件可在装饰类型中定义(见ThemableDecorationInstanceRenderOption 的 before 和after 属性)和微调个别装饰(见ThemableDecorationRenderOptions 的before和 after 属性)。您可以在vscode命名空间中的API参考中查看这些属性。
API调整
- 现在可以使用Uri类从现有项中派生一个Uri:someUri.with({scheme: ‘newScheme’, path: ‘newPath’})
- previewHtml命令现在可以设置标题。
- 当预览HTML,我们通过body元素中的类名暴露当前主题的风格。这些类是vscode-light, vscode-dark 和 vscode-high-contrast。
- 最后,添加了一个新命令 vscode.open来打开非文本资源,如图像。
调试扩展创作:命令变量
VS Code已经支持在launch.json 文件中配置变量代入。此版本引入了一种新的绑定到VS Code命令的变量类型。当启动一个调试会话时,会先收集发生在底层的启动配置命令变量,然后再被执行。多次出现的变量不会导致多次执行。启动配置被传递到调试适配器之前,所有变量会通过命令结果赋值。
扩展中的命令被注册和执行,返回值会赋值给变量。一个命令的执行可以在没有界面的简单表达式中限定,对于一些复杂方法会基于扩展API中的UI方法。
可以在node-debug中查看此功能性的示例。在这里,变量${command.PickProcess} 被绑定到一个进程采集器命令上。当运行启动配置时,’Attach to Process’启动配置使用用户选择的一个Node.js进程作为变量。
引入一个新的命令变量非常简单:
- 在扩展中执行和注册命令(不是在调试适配器中)。
- 在debuggers中添加variables节点。
- 为每个变量添加一个name/command-binding。
例如:
"debuggers": {
...
"variables": {
"RemoteHost": "askUserForRemoteHostCommand"
},
...
}
- 现在启动配置中的任何字符串类型都可以使用变量,比如${command.RemoteHost}。
- 为了使RemoteHost的变量对于用户可见,可以考虑将它添加到debuggers 节点中的configurationAttributes或initialConfigurations部分。
调试扩展创作:增加的调试协议
调试协议已经在三个方面进行了扩展(并且VS Code已经提供了相应的UI界面):
- 编辑变量:如果一个调试适配器返回capabilitysupportsSetVariable,VS Code支持通过调用setVariablerequest在Variables视图中设置非结构化(叶)的变量。
- 步骤回退:如果调试适配器返回capabilitysupportsStepBack,VS Code启用步骤回退UI界面,并且将调用stepBackrequest.。
- 悬停显示变量类型:如果调试适配器返回variabletype的可选type属性,VS Code将显示鼠标悬停的变量名的属性值。
从扩展中创建错误/警告(诊断)
通过引入新的Problems 窗口,我们就开始工作在项目范围内的生成器和格式检查器。第一步,当文档关闭时我们取消了自动清除问题。否则打开和关闭文件都会改变项目生成器生成的问题。对于这个更改,当一个文件被关闭时,像生成诊断的规则检查器的这些扩展是用来清理这些问题的。所有提供生成诊断的扩展供应商需要适配这个更改。
在使用vscode-language-server节点模块的规则检查器中,可以使用如下方式实现:
documents.onDidClose((event) => {
connection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });
});
Monaco Editor
Monaco Editor可以通过 npm下载了!Monaco Editor是一种VS Code源代码编辑器,被提取打包的库可以被集成到可以在任何现代浏览器中被浏览的任何web应用上。我们已经创建了一个playground展示一些API。您可以通过npm install monaco-editor 安装它。
以后Monaco Editor特定的发布日志将可以在分布式repository中获取。
CSS / LESS / SCSS和JSON语言服务现已推出
此外,CSS / LESS / SASS解析器和语言智能源代码已经被提取到了Monaco editor 和VS Code共同使用的单独的vscode-css-languageservice模块节点上。
同样的对于JSON, 包含JSON模式验证器的语言服务被提取到又是与Monaco editor共享的 vscode-json-languageservice中。
值得注意的Bug修复
SASS语言ID已经从’sass’ 重命名为’SCSS‘。如果已经为Sass定制了任何规则检查器设置,只需将配置关键字’sass.’ 重命名为 ‘scss.’。
- 6316: 更新应该重新打开所有最后打开的文件夹
- 1210: 打开文件对话框应打开在当前激活文件的目录中
- 7391: 从最后更新开始,编辑器其他时间不再响应
- 这个修复改进了所有colorizers的内存占用,通过不可变占用链接到在vscode-textmate中行之间的表示colorizer状态的列表。
- 8173: 明显的延迟打开一个Markdown文件(源)
- 一个 比手写快10倍的TextMate语法plist解析器的方法提高了所有colorizers的启动时间。我们正在研究提取这个方法到它自己的节点模块。
此外,下面是被修复的集成终端的错误:
- #7911: 终端中的行有margin
- #7684: 点击进入编辑器不从终端视图去掉焦点
- #7458: 失控的terminalProcess进程
- #6738, #7442, #7444: 调整终端尺寸的一些问题
- #6743: 集成终端的鼠标滚轮滚动仅适用于填充区域
- #7357: 有时调用终端会出现错误 “Cannot set property ‘innerHTML’ of undefined”
- #6457: vim覆盖终端的颜色方案
这些都是关闭的bug,还有这些都是1.3更新中关闭的功能需求。
下载
下载: Windows | OS X | Linux 64-bit .zip .deb .rpm | Linux 32-bit .zip .deb .rpm最后但并非最不重要的,非常感谢!下面的小伙伴们帮助我们使VS Code变得更好:
- Denis Malinochkin (@mrmlnc): Emmet – 支持所有功能PR #7926, PR #8155, PR #8489
- Rob Lourens (roblourens): TimeTravel Debugging的UI 支持 PR #7734
- xzper (f111fei): 调试:当名称为null或未定义时,修复setConfiguration 错误PR #7636
- Thomas Stringer (tstringer): 添加删除和禁用所有断点操作 PR #7627
- Ed Munoz (edumunoz):
- Giorgos Retsinas (@elemongw): 在关闭所有窗口时打开激活窗口PR #7547
- Andrew Arnott (@AArnott): LS Protocol-Clarifications 关注 JSON-RPC header PR #15
- Vaclav Pavlin (@vpavlin): LS Protocol-Fix 在 protocol.md中的书写错误 PR #20
- Tamas Kiss (@kisstkondoros):
- Basarat Ali Syed (@basarat): 修复: 单独的Monaco 文本编辑验证 PR #7864
- Christian Svensson (@csvn): 排序snippet tab stops PR #7925
- Phill (@ph1ll): 修复’shaddow’ 拼写错误PR #7981
- Huachao Mao (@Huachao): 添加Productivity 到扩展类型中PR #7304
- Sajjad Hashemian (@sijad):
- Eshwar Andhavarapu (@gontadu):
- Cătălin Mariș (@alrra): 按照JSON处理.webmanifest 文件 PR #8019
- Øyvind Kallstad (@gravejester): 重构PowerShell 语言定义PR #7522
- Jan Niklas Hasse (@jhasse): 像一个Makefile一样高亮.mk 文件 PR #7328
- Christian Heilmann (@codepo8): 将自动完成值添加到input/select/textarea PR #7152