Vim for Visual Studio Code
Go to file
2016-10-10 23:46:31 -07:00
.github Fix Docs (#807) 2016-09-27 23:16:48 -07:00
.vscode Add another build option for the impatient. 2016-10-03 01:50:10 -07:00
images Add new logo icon (#852) 2016-10-06 16:49:03 -07:00
src Always bring search result into view. 2016-10-10 23:46:31 -07:00
test remove unused interface 2016-10-09 22:01:43 -07:00
typings/vscode Clean up typings 2016-10-02 01:34:11 -07:00
.gitignore Clean up typings 2016-10-02 01:34:11 -07:00
.travis.yml update travis VS_TOKEN 2016-10-07 17:44:24 -07:00
.vscodeignore Tests: Fixes #15 enabling all tests to be run within Travis 2016-01-02 02:15:41 -08:00
extension.ts Always bring search result into view. 2016-10-10 23:46:31 -07:00
gulpfile.js Add another build option for the impatient. 2016-10-03 01:50:10 -07:00
LICENSE Initial commit 2015-11-12 01:02:24 -08:00
package.json 0.3.5 2016-10-10 16:59:48 -07:00
README.md Update README.md 2016-10-07 17:54:57 -07:00
ROADMAP.md Update ROADMAP 2016-10-01 18:41:26 -07:00
STYLE.md Fix Docs (#807) 2016-09-27 23:16:48 -07:00
tabsizefix 0.3.4 2016-10-10 16:17:39 -07:00
tsconfig.json Refactor code with enumerator 2016-08-12 21:28:05 +08:00
tsd.json Stop using jsdiff. Use diff-match-patch. 2016-08-14 12:03:45 -07:00
tslint.json Fix all tslint issues 2016-09-15 16:58:01 -07:00
typings.json Clean up typings 2016-10-02 01:34:11 -07:00

Version Build Status Slack Status

Vim

VSCodeVim is a Visual Studio Code extension that provides Vim keybindings within Visual Studio Code.

Please report missing or buggy features on GitHub. We've added a lot of functionality, but everyone uses Vim in their own special way, so let us know if we're missing your favourite obscure command. 😉

We're super friendly people if you want to drop by and talk to us on Slack.

Screenshot

Features We Support

  • All modes (including visual block mode!)
  • Most typical commands, including command combinations like c3w, daw, 2dd, etc. (Check the roadmap for details.)
  • Command remapping (jj to esc)
  • Repeating actions with .
  • Incremental search with / and ? that works like Vim (doesn't just open the search box!)
  • Correct undo/redo state
  • Marks
  • Vim Options
  • Multiple Cursor mode (allows multiple simultaneous cursors to receive Vim commands. It's like macros, but in real time. Allows / search, has independent clipboards for each cursor, etc.)

Roadmap

See our Github Milestone page for an idea of what we plan to implement next.

Install

Install the extension through the VS Code Marketplace.

Configure

Due to overlap between VS Code and Vim, options are loaded slightly different from native Vim. The option loading sequence is

  1. :set {option} on the fly
  2. [TODO] .vimrc.
  3. vim.{option} from user settings or workspace settings.
  4. VSCode configuration
  5. VSCodeVim flavored Vim option default values

Multi-Cursor Mode

Multi-Cursor mode is currently in beta. Please report things you expected to work but didn't to our feedback thread.

Getting into multi-cursor mode

You can enter multi-cursor mode by:

  • Pressing cmd-d on OSX.
  • Runing "Add Cursor Above/Below" or the shortcut on any platform.
  • Pressing gc, a new shortcut we added which is equivalent to cmd-d on OSX or ctrl-d on Windows. (It adds another cursor at the next word that matches the word the cursor is currently on.)

Doing stuff

Now that you have multiple cursors, you should be able to use Vim commands as you see fit. Most of them should work. There is a list of things I know of which don't here. If you find yourself wanting one of these, please add it to our feedback thread.

Each cursor has its own clipboard.

Pressing Escape in Multi-Cursor Visual Mode will bring you to Multi-Cursor Normal mode. Pressing it again will return you to Normal mode.

Supported Options

Vim options can be added to your user or workspace settings (open the Command Pallete and search for "User Settings" or "Workspace Settings"). Changes require restarting of VSCode to take effect.

The following is a subset of the supported configurations; the full list is described in package.json:

  • insertModeKeyBindings/otherModesKeyBindings

    • Keybinding overrides to use for insert and other (non-insert) modes

    • Example: Bind jj to <Esc> while in insert mode

        "vim.insertModeKeyBindings": [
             {
                 "before": ["j", "j"],
                 "after": ["<Esc>"]
             }
        ]
      

      Similarly for otherModesKeyBindings, bind jj to <Esc> for modes which are not insert mode

        "vim.otherModesKeyBindings": [
             {
                 "before": ["j", "j"],
                 "after": ["<Esc>"]
             }
        ]
      
  • insertModeKeyBindingsNonRecursive/otherModesKeyBindingsNonRecursive

    • Non-recursive keybinding overrides to use for insert and other (non-insert) modes (similar to :noremap)

    • Example: Bind j to gj. Notice that if you attempted this binding normally, the j in gj would be expanded into gj, on and on forever. Stop this recursive expansion using insertModeKeyBindingsNonRecursive and/or otherModesKeyBindingNonRecursive.

      "vim.otherModesKeyBindingsNonRecursive": [
      {
          "before": ["j"],
          "after": ["g", "j"]
      }]
      
  • useCtrlKeys

    • Enable Vim ctrl keys overriding common VS Code operations (eg. copy, paste, find, etc). Setting this option to true will enable:

      • ctrl+c, ctrl+[ => <Esc>
      • ctrl+f => Page Forward
      • ctrl+v => Visual Block Mode
      • etc.
    • Type: Boolean (Default: false)

    • Example:

      "vim.useCtrlKeys": true
      
  • useSystemClipboard

    • Enable yanking to the system clipboard by default
    • Type: Boolean (Default: false)
    • Note: Linux users must have xclip installed
  • useSolidBlockCursor

    • Use a non-blinking block cursor
    • Type: Boolean (Default: false)
  • ignorecase

    • Ignore case in search patterns
    • Type: Boolean (Default: true)
  • smartcase

    • Override the 'ignorecase' option if the search pattern contains upper case characters
    • Type: Boolean (Default: true)
  • hlsearch

    • When there is a previous search pattern, highlight all its matches
    • Type: Boolean (Default: false)
  • autoindent

    • Copy indent from current line when starting a new line
    • Type: Boolean (Default: true)

F.A.Q.

j, k and others don't repeat when I hold them down.

On OS X, open Terminal and run the following command:

defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false         // For VS Code
defaults write com.microsoft.VSCodeInsiders ApplePressAndHoldEnabled -bool false // For VS Code Insider

Contributing

This project is maintained by a group of awesome contributors and contributions are extremely welcome ❤️. If you are having trouble thinking of how you can help, check out our roadmap. For a quick tutorial on how to get started, see our contributing guide.

Thanks to Kevin Coleman, who created our awesome logo!

Changelog

Please see our list of recent releases and features added.