Open Source.NET

Write Faster Code by Adding VIM to Visual Studio

VIM is a text editor with a Visual Studio extension. Its time-saving power is well worth the learning curve.

One of the greatest productivity gains you can make is to type less and navigate through your code faster. VsVim, written by JaredParsons, is an extension for Visual Studio 2010 and later which will get you doing just that. To get VsVim, you can download it from the Visual Studio Gallery or via the extension manager in Visual Studio. Mastering VsVim takes an investment of time, but learning it will pay dividends.

As the name suggests, VsVim is based on the functionality of the VIM text editor. VIM isn't something picked up as easily as Notepad; it's a powerful tool with a high initial learning curve. This makes it no different than many tools we use every day.

Multiple Modes

VIM has multiple modes:

The Insert mode is most like what Visual Studio users are used to: typing enters text and the modifier keys can be used to execute commands

Normal mode is the main operating mode, and is used for navigation and text manipulation

Visual mode is used for navigating and manipulating selections of text

I recommend going through the built-in tutorial to become familiar with the basic modes and commands. To open the tutorial, go to Start Menu/All Programs/Vim 7.3/Vim tutor.

VsVim brings the tremendous power of VIM to Visual Studio. Once you get past the initial learning curve and start using the basic features, you'll be editing code faster than ever before.

VIM uses commands that build on one another. Commands combine actions and movements. For example, 'd' is for delete and 'e' means move to the end of the word. If you type 'de' it will delete from your cursor to the end of the word. You can use 'w' as well, which takes you to the beginning of the next word (thus, 'dw' will delete from your current location to the beginning of the next word, including whitespace separating words). The curly braces '{' and '}' take you to the beginning of the previous and next paragraph (or block of code).

You can also use numbers combined with movement. The 'hjkl' keys are used for movements: left, down, up, and right. If you want to move down 15 lines, type '15j'. To move three methods down, type '3}'.

Simpler Searching

Everything flows from these conventions. VsVim also includes part of VIM search capabilities. When in normal mode, type '/' followed by what you're looking for and press Enter.

A simple example of relocating a method:

Start with your cursor at or before the current method

Press 'v' to enter visual mode (used for selected ranges of text)

Press '}' to move past this block of text (end of the method)

Press 'd' to delete (cut)

Press '{' twice to move up two methods

Press 'p' to paste the method

To start learning VsVim (and VIM), don't start with empty documents. Print off a cheat sheet with commands and read a couple of articles on VIM. Then start programming with VIM. If you don't know how to do something, look it up, execute the command, and try to use it again.

The motto for learning VIM could be "Repetitio est mater studiorum (repetition is the mother of study)". You'll build muscle memory and subconsciously start navigating your code without having to think about the commands. Once you get 20 to 30 commands into your workflow, you'll be well on your way to being a much more effective typist (and faster programmer).

In addition to all this, you still get IntelliSense, tab completion, snippets and all other base Visual Studio features when in insert mode. There's built in support for key binding collisions, enabling you to choose if VsVim or Visual Studio itself will handle the shortcuts; just click the options button in the bottom right of your code file. If you need to exit VsVim, you can temporarily disable (and restore) it by pressing Ctrl+Shift+F12.

I've barely scratched the surface of VsVim and VIM's capabilities. To expand your knowledge, I've provided some resources below. Take a look at videos online of people using VIM, and experiment for yourself. Think, before you reach for your mouse: Can you do it much faster from your keyboard?

VIM Resources

