Vim: My new IDE

On Michael Trier's suggestion, I've decided to make Vim my primary editor once again. Having recently switched from Textmate, there were a few things that I needed to get up and running to stay productive. Here they are in no particular order.



Figure 1: An example of NERDtree from

The NERDtree plugin functions much the same way that TM's project drawer works. It allows a hierarchal view of a folder structure. From this view, you can open files in new tabs, in the opposite window, even in split views. The only downside I've come across yet is the inability to perform file operations from within NERDtree. That being said, TM's implementation of this was always felt a bit wonky to me as well.


Also from the NERD family, the commenting tool is surprisingly useful, specifically because it understands so many different syntaxes. To comment out large portions of code, you just have to select it in visual mode and hit the default binding ,cc and it comments out the current line or current selection.



Figure 2: Examples of the Elflord and Brookstream color themes.

Decent color schemes are also something that's pretty important to me. The esthetic of a good color scheme makes hours of staring at code a little bit easier. I'm currently using Brookstream (right), a teal, blue and purple color scheme set to a black background. When not in GUI mode, I use elflord (left) whose pastel colors are passable for console work.


LodgeIt is one of my favorite plugins by far. Its a simple pastebin service that's hooked into vim. With a quick execution of the ,p command, my current selection or entire file is uploaded to the pasting service and the url is copied to my clipboard. This makes debugging with others and getting help from someone on IRC super easy.

Snippets Emu

Similar to all of the great bundles of Textmate fame, snippetsEmu provides intelligent command completion. It has bundles for several major programming frameworks/languages. Most importantly, at least for me, it has support for Django.



Figure 3: An example of Taglist on a Django model.

Taglist is one of the key features that people from Eclipse, Komodo, and that ilk always proclaim as being indispensable. Its the ability to list all of the classes in your code, their methods and various other bits. It will also keep a history of recently accessed files and their methods in handy vim code folding.

VCS Command

VCS Command is one of those plugins that isn't super exciting. It doesn't have the flash and glam that the other plugins have. What it does, however, keep your alt+tab fingers happy. I have rebound the aliases (as they conflict with NERDcommenter) to handle status, diffs and log commands. I prefer to be a bit more careful when committing to repos, so I reserve that action for the terminal.

SCM Diff

Tied in with VCS Command, SCM Diff shows you visually how your current file differs from the previous versions of the file. With a simple ,d (which I chose to remap) I can see an inline diff to the right of my current file. Quite handy!


So there is a thing or two I should mention about this particular setup. First, multiple windows. With NERDtree and Taglist fighting or which window is which, I've had to resort to toggling them on and off. Not such a big deal, as it gives me more code real estate, but something that I should mention.

Missing Pieces

Django Management Commands! I'm really hoping some friendly programmer will create a method to run Django's runserver, syncdb, flush, and the rest of their friends from Vim. If no one steps up to that plate, I may have to be that guy.

See something I'm missing? Is there a big piece of functionality my setup doesn't provide? I'd love to hear your thoughts!

Update: You can find my vimrc here.

Note: I no longer use vim, thus that repo is more or less static.