July 2016 (version 1.4)

During July, we slowed down feature work in favor of reducing our bug backlog and removing engineering debt. However, we were still able to add some improvements.

Here are the highlights:

  • Workbench: Editor actions such as Open Preview and Switch to Changes View are back on the title bar. IME and Copy/Paste support in the Integrated Terminal.
  • Editor: Better snippet and suggestions control. New Insert Snippet command with dedicated UI.
  • Debugging: Restart Frame action to rerun a specific stack frame. 'Variable paging' feature moved into VS Code and available to all debug extensions.
  • Extension Authoring: New 'move' commands to better support VIM gestures. Custom link behavior with the DocumentLinkProvider API. Expanded Debug Protocol.

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

Editor

Snippets and Suggestions

By default, VS Code shows snippets and completion proposals in one widget. This is not always desirable so we added a new configuration setting called editor.snippetSuggestions. To remove snippets from the suggestions widget, set the value to "none". If you'd like to see snippets, you can specify the order relative to suggestions; at the top ("top"), at the bottom ("bottom"), or inline ordered alphabetically ("inline"). The default is "inline".

In addition, we added a new command to insert a snippet, Insert Snippet, which displays the available snippets in a dropdown.

snippet insert

Tab Completion

The editor now supports Tab completions. You can enable it with the editor.tabCompletion setting. After typing the prefix of a snippet, press Tab to insert it.

tab completions

Note that quick suggestions and Tab completion might interfere because the suggestions widget also reacts to Tab.

Either disable quick suggestions:

{
  "editor.quickSuggestions": false
}

or remove snippets from the suggest widget:

{
  "editor.snippetSuggestions": "none"
}

Workbench

Editor Actions

When we added Tabs (tabbed headings), we put editor actions (Switch to Changes View, Open Preview) into the context menu to gain some space. User feedback was clear that this made the actions much harder to discover and so we have added them back to the title header.

Menu Group Sorting

Drag and Drop

You can now drag and drop Tabs (tabbed headings) across windows. You can now also drop a folder into VS Code to open it.

Git commit message template

If you have a message template configured in your Git settings, then the Git view in VS Code will show that message in the commit message box by default. Thanks to William Raiford for contributing this feature.

Faster Quick Open

We made the first steps in improving the performance of Quick Open, particularly for large workspaces such as Chromium. On Mac (⌘+P) and on Linux (Ctrl+P), Quick Open on a Chromium workspace now takes less than half the time it took before. On Windows (Ctrl+P), it originally took twice as long as on Mac and now it is just as fast. We are not finished, expect more performance gains in the next iteration.

Integrated Terminal

The integrated terminal had several changes related to polish and compatibility this release:

  • IME support: Input Method Editor (IME) support has been implemented, allowing input of CJK and Indic characters.

    IME support in Visual Studio Code

  • Copy and paste support on Windows and Linux: Proper copy and paste support has arrived for Windows and Linux within the terminal. The default keybindings are ⌘C (Windows, Linux Ctrl+Shift+C) and ⌘V (Windows Ctrl+V, Linux Ctrl+Shift+V) respectively. Note that these command keybindings are not assigned by default on Mac but you can easily add your own keybindings.

  • Context menu: A right-click context menu has been added with the options New Terminal, Copy and Paste.

  • Accessibility: It's now possible to escape focus in the terminal by pressing ⌃⇧M (Windows, Linux Ctrl+M) to enable Tab focus mode, just like in the editor. When this mode is enabled, Tab and Shift+Tab will not be passed to the terminal but instead change the element that is being focused.

Languages

JSON completions

There has been some small improvements for the JSON completions:

  • In schema based JSON documents, we offer completions for empty arrays, objects and string if we know the type of a property but the schema doesn't describe any defaults.
  • Completion support for the $schema property and values.

Debugging

Restart Frame

VS Code now supports restarting execution at a stack frame. This can be useful in situations where you have found a problem in your source code and you want to rerun a small portion of the code with modified input values. Stopping and then restarting the full debug session can be very time-consuming. The Restart Frame action allows you to re-enter the current function after you have changed variables with the Set Value action:

Restart Frame

Note that Restart Frame won't unroll any state changes, so it may not always work as expected.

Restart Frame is only available if the underlying debug extension supports it and currently only VS Code's built-in Node.js debugging does. Make sure to use a Node.js version >= 5.11 since earlier versions do not work in all situations.

Variable Paging

Previously VS Code expected that large data structures like arrays were broken into "chunks" in a debug extension and consequently only a few debug extensions supported this useful feature. With this release, we have moved this functionality into the VS Code debugger front-end so that all debug extensions can easily benefit from this in the future.

Variable Paging

See section "Debug Protocol Changes" below for details of how a debug extension can make use of this.

Double Click Debug Toolbar Centers

Double clicking on the Debug view toolbar drag icon will center the Debug toolbar. This makes it easy to restore the default state.

Extension Authoring

New settings to replace deprecated __characterPairSupport and __electricCharacterSupport.

The deprecated configuration settings can now both be replaced by the autoClosingPairs setting in the language-configuration.json file in your extension. See #9281 for detailed instructions.

Editor Commands

In order to allow the VIM extension to make good progress on their roadmap particularly on up-and-down motion and Tab related commands, we added the following editor APIs:

  • Move cursor: Moves the cursor to different logical positions in the editor - See 9143.
commands.executeCommand('cursorMove', { to: 'up', by: 'wrappedLine', value: '2' });
  • Move active editor: Moves the active editor across groups or across Tabs within a group - See 8234.
commands.executeCommand('moveActiveEditor', { to: 'left', by: 'tab', value: '3' });

Sorting of groups

Last milestone, we added support to contribute menu items to different places in the editor. This milestone we refined sorting of groups. They are now sorted in lexicographical order with the following defaults/rules.

The context menu of the editor has these default:

  • navigation - The navigation group comes first in all cases.
  • 1_modification - This group comes next and contains commands that modify your code.
  • 9_cutcopypaste - The last default group with the basic editing commands.

Menu Group Sorting

You can add menu items to these groups or add new groups of menu items in between, below, or above. In this release, only the editor context menu allows this grouping control but it will soon be available for the editor title menu and the explorer context menu as well.

DocumentLinkProvider API

VS Code has a built in link detector that finds http, https, and file links to make them clickable in the editor. We have added new API that allows extension writers to add custom link detection logic. Implement a DocumentLinkProvider and use the registerDocumentLinkProvider function to register it with the editor.

Debug Extension Authoring: Additions to the Debug Protocol

The debug protocol has been extended in the following areas (and VS Code already provides the corresponding UI):

  • Restart Frame: If a debug adapter returns the capability supportsRestartFrame, VS Code shows a Restart Frame action in the context menu of the CALL STACK view and calls the new restartFrame request upon execution of the Restart Frame action. The restartFrame request must result in a StoppedEvent so that the UI can be updated for the new location.
  • Variable Paging: 'Variables paging' adds support for paging variables and their children. The debugger UI in VS Code 1.4 uses this to present variables with many children with a better scalable (paged) UI and fetches the children in a piecemeal way. A debug adapter can find out whether the client supports variable paging by checking the value of the supportsVariablePaging client capability passed as an argument to the initializeRequest.
    Through the optional attributes indexedVariables and namedVariables, the debug adapter can return both the number of indexed properties (e.g. array slots) and named properties of a variable. These two properties can be returned in all places where a variablesReference property is returned, that is in the Variables and Scope data types and in the evaluateRequest response.
    Additional optional attributes have been added to the variablesRequest to give the VS Code debugger UI better control over what children of a variable to fetch. An attribute filter is used to limit the fetched children to either indexed or named and the attributes start and count are used to further limit the children to a certain range.
  • Continued Event: A debug adapter can now optionally send a ContinueEvent to the client to indicate that the execution of the debuggee has continued.
  • Source request supports MIME type: A debug adapter can now set a mimeType attribute on the SourceRequest response which a client can use to find a suitable editor.
  • Variable Type client capability: A debug adapter can find out whether the client shows the variable's type attribute in the UI by checking the value of the supportsVariableType client capability passed as an argument to the initializeRequest.

Notable Changes

  • 4842: Allow to disable drag and drop in the files explorer
  • 7839: Sometimes SVG icons do not show up on Windows 7
  • 8788: Weird tabs auto scrolling behaviour
  • 8704: Deleting folder containing dirty files closes dirty editors
  • 8617: Run selected text in active terminal is not running the selected text on Windows
  • 8219: Lines containing unicode characters in integrated terminal differ in height
  • 9010: Global search and replace: Support regular expression variables in replace

These are the closed bugs and these are the closed feature requests for the 1.4 update.

Thank You

Last but certainly not least, a big Thank You! to the following folks that helped to make VS Code even better: