Vim for Visual Studio Code
Go to file
2016-11-22 20:35:23 -08:00
.github Update PULL_REQUEST_TEMPLATE.md 2016-11-19 12:26:20 -08:00
.vscode Remove fix-whitespace gulp command. Replaced by .vscode/settings.json (#999) 2016-10-27 00:54:39 -07:00
images Update Readme. Attempt to make it more succint and add point about useCtrlKeys option in an attempt to avoid those questions on our Slack. (#1012) 2016-10-28 12:14:08 -07:00
src Merge pull request #1071 from xconverge/support-for-ctrl-o 2016-11-22 18:29:23 -05:00
test Merge pull request #1071 from xconverge/support-for-ctrl-o 2016-11-22 18:29:23 -05: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 Mac builds on Travis take hours. Likelihood of x-plat issue is minimal. Removing mac build 2016-10-19 14:44:08 -07:00
.vscodeignore put the markdown files back in the vsix package 2016-10-18 11:42:56 -07:00
extension.ts fix #977 (#981) 2016-10-24 16:41:16 -07:00
gulpfile.js Remove fix-whitespace gulp command. Replaced by .vscode/settings.json (#999) 2016-10-27 00:54:39 -07:00
LICENSE Initial commit 2015-11-12 01:02:24 -08:00
package.json Merge pull request #1071 from xconverge/support-for-ctrl-o 2016-11-22 18:29:23 -05:00
README.md Update README 2016-11-01 16:28:26 -07:00
ROADMAP.md Update roadmap for ctrl-o 2016-11-22 20:35:23 -08:00
STYLE.md Fix Docs (#807) 2016-09-27 23:16:48 -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

Vim Version Build Status Slack Status

A Visual Studio Code extension that enables Vim keybindings including:

  • Modes (normal, insert, command, visual block)
  • Command combinations (c3w, daw, 2dd, etc) and remapping (jj to esc)
  • Incremental search with / and ?
  • Marks
  • Vim settings (like .vimrc)
  • Multi-cursor support. Allows multiple simultaneous cursors to receive Vim commands (e.g. allows / search, each cursor has independent clipboards, etc.).
  • And much more! Refer to the roadmap or everything we support.

Please report missing features/bugs on GitHub. Everyone uses Vim in their own special way, so let us know if we're missing your favourite command. Drop by and say hi on Slack.

Configure

Vim options are loaded in the following sequence:

  1. :set {option}
  2. vim.{option} from user/workspace settings.
  3. VSCode configuration
  4. VSCodeVim default values

Note: changes to the user/workspace settings require a restart of VS Code to take effect.

Supported Options

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)

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.

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

Halp! None of the vim ctrl (e.g. ctrl+f, ctrl+v) commands work

Configure the useCtrlKeys option (see configurations#useCtrlKeys) to true.

Contributing

This project is maintained by a group of awesome people and contributions are extremely welcome ❤️. For a quick tutorial on how you can help, see our contributing guide.

Special props to Kevin Coleman, who created our awesome logo!

Release Notes

Our recent releases and update notes are available here.