返回 登录
0

VS Code(1.2.0)最新亮点和特性全介绍

五月发布的VS Code加入了一些很棒的新特性,改进了许多现有功能并且修复了重要的Bug。

下面是这个版本的亮点:

  • 编辑器:自动去除插入的空格,可以通过快捷键选择所有匹配项。预览窗口(Peek View)现在可以调整大小了。
  • 检查器:现在支持修复所有检测到的问题,TSLint支持快速修复(Quick Fix)并且可以设置需要排除的文件。
  • 语言:代码补全(IntelliSense),可以跳转或预览定义。查找调用功能已支持在CSS、SCSS、LESS文件中查找CSS变量。
  • 工作台:新集成的终端支持在VS Code里调用系统shell。支持在终端中取消快捷键绑定,在标签中增加了progress支持,可以通过内部版使用。
  • 调试:现在,你可以控制Debug Console出现的方式。我们还改进了单单步调试的性能,带有大量本地变量的Node.js的程序调试性能得到大幅改善。
  • 扩展:现在,你可以从命令行查看扩展列表、安装和卸载扩展。对扩展的开发者,我们对调试、TextMate语法和命令API进行了扩展,并且改进了语言服务器协议。

更多详细信息请继续往下阅读。

编辑器

自动去除空格

新起一行的时候,编辑器会根据缩进规则和上一行的内容自动插入空格。这样会在文件中留下多余的空格。感谢PR #5423的工作,新的editor.trimAutoWhitespace设置可以让编辑器跟踪自动加入的空格并根据情况进行移除,比如在某个地方输入时会自动移除。请注意,该设置默认开启。

Trim Auto Whitespace

查找所有发现的匹配项

你可以通过快捷键快速选中所有找到的选项,OS X的快捷键是⌥Enter,Windows和Linux的快捷键是Alt+Enter。比起先前的查找和替换效率更高,为VS Code的多光标(multi-cursor)操作提升了一大块。感谢PR #5715的工作!

Find All Matches

配置基于单词的提示

当语言服务无法给出语义补全(提示)时,VS Code默认会给出基于单词的提示。这就是为什么在VS Code中编写某些语言代码时,IntelliSense会列出文件中所有单词。一些用户希望不要看到这个提示列表,这时你可以通过editor.wordBasedSuggestions关闭设置。

调整预览窗口大小

预览窗口编辑器用来展示相关引用的搜索结果,提供声明预览功能。现在支持对预览窗口调整大小了!

Peek

工作台

选项卡

注意:选项卡功能没有包含在1.2.0(2016年5月)的稳定版中。可以在VS Code内部版使用。

选项卡支持是来自用户反馈中的一个功能。尽管完全实现该功能还需要多次迭代,但是我们还是想在五月的版本中展示一些开发进展。

在这个里程碑中,我们关注已打开的编辑窗口的 堆栈 管理。在下面的图片中,可以看到左边的面板打开了2个编辑器,中间的面板打开了4个编辑器,右边的面板也打开了超过2个编辑器。通过斜体列出的文件都是 预览 文件,你可以单击浏览文件,不用像以前那样在打开的编辑器列表中查找需要的文件用Tab选择。

Tabs

当你关闭编辑器时会恢复最近一次打开的编辑器堆栈,而不是像现在这样直接关闭面板。除此以外,我们还进行了许多用户体验研究。将研究得出的结果应用在设计中,这些改进包括:

  • 重新设计overflow图标
  • 能够指定 快速打开(Quick Open) 文件是固定(pinned)还是预览
  • 增加了一个命令用来把预览状态的文件转为固定状态

这些工作已经加入到master分支,可以在内部版使用。

终端集成

排在用户反馈第2名的功能是终端集成,issue #143。在集成环境中直接嵌入终端会带来很大的方便,终端初始的路径是正在工作的目录。需要进行终端操作时,无需切换窗口或改变终端的状态,可以迅速上手。

在五月发布的版本中,我们发布了终端集成功能的初始版本。你可以通过快捷键打开终端,OS X的快捷键是 ⌃`,Windows和Linux的快捷键是 Ctrl+`。也可以通过 View | Toggle Integrated Terminal 菜单或者 命令面板(Command Palette) 中的 View > Toggle Integrated Terminal 打开。

默认打开的shell根据系统设置的环境变量决定,Linux和OS X根据 $SHELL 变量,Windows下采用的是%COMSPEC%变量。这些变量的内容可以通过设置选项中的terminal.integrated.shell.*设定覆盖。打开的集成终端和你常用的终端一样使用。

Terminal

请注意,这是一个早期版本。目前VS Code只支持单个终端,并且还有一些与键盘相关的功能尚未支持,比如拷贝粘贴等。Windows 10用户可能在调用 cmd.exe 时遇到问题。如果发现这样的问题,请参照#143的描述启用旧版本的 cmd.exe。完整的问题列表和功能需求可以在这里找到。

注意: 启动集成终端 快捷键(OS X是 ^`,Windows和Linux是 Ctrl+`)之前已经被 切换已打开的编辑器 占用。你可以根据自己的需要进行自定义

定义快捷键取消规则

现在,你可以定义快捷键规则取消默认快捷键。通过 keybindings.json 可以方便地重新定义所有VS Code快捷键,但是要做一些特殊定制可能会比较困难,比如重载快捷键Tab或Esc。从这个版本开始,只要在command前面加上-就可以方便地定义一条快捷键取消规则。

下面是一个示例:

// In Default Keyboard Shortcuts
...
{ "key": "tab", "command": "tab", "when": ... },
{ "key": "tab", "command": "editor.emmet.action.expandAbbreviation", "when": ... },
{ "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": ... },
{ "key": "tab", "command": "acceptQuickFixSuggestion", "when": ... },
{ "key": "tab", "command": "acceptSelectedSuggestion", "when": ... },
...

// To remove the second rule, for example, add in keybindings.json:
{ "key": "tab", "command": "-editor.emmet.action.expandAbbreviation" }

语言

CSS变量

在CSS文件中支持变量是一个新功能提案,目前处在草案状态。VS Code目前对CSS变量提供富代码提示(IntelliSense)以及转到定义、Peek定义和在同一个文件中查找所有引用功能。

例如,这里我们可以预览--bg-color的定义,OS X快捷键⌥F12,Windows快捷键Alt+F12,Linux快捷键Ctrl+Shift+F10

css peek definition

检查器(Linter)

ESLint

ESLint扩展现在支持“修复所有问题”命令。可以通过 eslint.fixAllProblems 设置功能快捷键,比如像下面这样:

[
    { "key": "ctrl+shift+alt+f",   "command": "eslint.fixAllProblems",
                                     "when": "editorTextFocus" }
]

TSLint

TSLint扩展现在支持从待执行lint操作的文件中排除指定文件(PR #47),并且还支持为TSLint告警提供快速更正(PR #40)功能。感谢所有提交pull请求的开发者!

Debugging

调试

控制打开调试控制台

为了在VS Code中提供更好的内部调试控制台,我们在 launch.json 中引入了 internalConsoleOptions 设置(参见#6159)。如果你想在调试过程中使用外部终端,同时在VS Code中关注调试的代码,这个功能会对你有很大帮助。提供的功能有:

  • neverOpen:VS Code 永远不会 打开调试控制台。
  • openOnFirstSessionStart:VS Code在 第一次 调试会话时打开调试控制台。
  • openOnSessionStart:VS Code在 每一次 调试会话时打开调试控制台。

改进Node.js单步调试性能

我们对VS Code的定义是保持轻量级与快速,因此需要对作用域内有大量本地变量的代码单步调试性能进行改进。针对Node.js调试我们做出了下列调整:

  • 如果一个作用域内包含了 超过100个本地变量, VS Code会关闭针对该作用域的自动展开功能。
  • 在手动展开作用域时,只会展示 前100 个本地变量。

作用域的提示只会显示前100个本地变量:

100 Local Variables

要了解不在前100出现的变量,只要在Watch表达式中加入该变量,并在调试控制台查看它的值。

编写扩展

调试扩展API

我们为VS Code调试器组件开放了一个 vscode.startDebug 命令作为扩展API。通过这个命令,既可以传入启动配置文件名也可以传入配置对象,编程启动调试会话:

    let launchConfig = {
        type: "node",
        request: "launch",
        program: "${workspaceRoot}/test.js",
        cwd: "${workspaceRoot}"
    };

    vscode.commands.executeCommand('vscode.startDebug', launchConfig).then(() => {
        vscode.window.showInformationMessage('Debug session started successfully');
    }, err => {
        vscode.window.showInformationMessage('Error: ' + err.message);
    });

更多细节可以在这里找到。

TextMate语法注入

现在可以通过扩展加入TextMate语法,将新的规则注入到已有语法实现高亮。这样就可以在string值或注释中添加颜色,比如对URL或TODO标记实现跨语言高亮。

"grammars": [
  {
    "scopeName": "source.todo",
    "path": "./syntaxes/todo.tmLanguage",
    "injectTo": [  "source.js", "source.ts" ]
  }
]

文件比较

我们添加了新的API命令,可以通过diff编辑器对任意两个资源进行比较,比较命令示例:commands.executeCommand('vscode.diff', uri1, uri2)

扩展示例更新

新的富扩展让你对 虚拟文档事件,以及 将语言功能作为命令 有了丰富的示例。同时html预览的例子也进行了更新:

调试转换器(Debug Adapter):支持“单个”或“全部”线程控制操作

在之前的VS Code调试协议中,我们为 StoppedEvent 增加了 allThreadsStopped属性。通过它,调试转换器能够向前端报告是一个线程还是所有线程已经停止。感谢开发者的反馈,让我们知道 ContinueRequest 也需要这个属性。

在1.9.0版本的VS Code调试协议,我们为ContinueRequest增加了allThreadsContinued属性。通过它,调试转换器能够向UI报告是一个线程还是所有线程在继续执行。更多细节可以在这里找到。

语言服务器协议

语言服务器协议现在为遥测通知(telemetry notification)提供支持。在节点客户端开发库中已经实现了消息追踪功能,可以用来追踪服务器中的问题。通过 ${clientName}.trace.server 设置启用。其中clientName是创建LanguageClient实例的名字,例如eslint.trace.server表示这是针对ESLint的linter服务。

命令行扩展管理

为了让自动化配置VS Code变得更加简单,现在你可以从命令行查看扩展列表、安装和卸载扩展。

示例:

code --list-extensions
code --install-extension ms-vscode.cpptools
code --uninstall-extension ms-vscode.csharp

Monaco编辑器

VS Code的核心是“Monaco”代码编辑器。你可以在在许多微软的产品中找到“Monaco”编辑器,比如OneDrive、VSTS、Azure、TypeScript playground,甚至在IE和Edge的F12工具中都可以发现它的身影。

我们的目标是让每个人都可以使用“Monaco”编辑器并且可以在任何浏览器中的使用。今天,我们需要面临的挑战是vscode仓库中嵌入的编辑器以及语言服务扩展依赖(非浏览器)客户端使用的技术。

要实现编辑器发布,第一步是探索,将TypeScript语言服务从VS Code的源代码中提取出来作为独立的编辑器API使用。

接下来的几周,我们会继续重构API并且将打包自动化,目标是让“Monaco”编辑器可以在六月的VS Code版本中发布。

值得关注的Bug修复

  • 959:在缩放和滚动时字体变得fuzzy
  • 1000:离线状态时响应很慢
  • 2717:设置“Define Keybinding”后keybindings.json失效
  • 4541:韩国语输入有问题
  • 5645:TS仓库对象调用响应缓慢
  • 5780:Linux下外部终端默认值可以改进
  • 6029:node v6无法调试
  • 6151:滚动条很丑,高dpi环境下显示不清晰
  • 6432:安装完成后,Unity桌面没有马上安装
  • 6525:文件名带空格的文件在Linux CLI下打开失败
  • 6530:磁盘驱动器字符大小写不匹配时,源代码地图不显示
  • 6593:在Unbuntu下有时候会出现两个桌面
  • 6609:需要修改”fold all“与”unfold all“快捷键
  • 6878, 6916: 处理压缩的(minified)js文件会卡顿或崩溃

1.2.0版本更新已关闭的Bug已完成的功能

下载

下载:Windows | OS X | Linux 64-bit .zip .deb .rpm | Linux 32-bit .zip .deb .rpm

原文:May 2016 (version 1.2.0)
作者: code.visualstudio.com
译者:赖信涛
责编:钱曙光

评论