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.
NERDtree
Figure 1: An example of NERDtree from zalaz.eu
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.
NERDcommenter
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.
ColorSchemes
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
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.
Taglist
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!
Caveats
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.