You might think what does that have to do with the title of this post? Well, originally my plan was to write a blog post contrasting on the differences between Javascript and C#, as well as the development environments and deployment platforms. But really, what I really wanted to write about was Vim.
Moving from Visual Studio to Vim was a progression through different editors and environments. The first thing I used to write Javascript was Webstorm. Over time I realized that you didn't really need an IDE to write Javascript/CSS. Then, I used Sublime Text for a little bit. But ultimately, I settled on Vim, and stayed there.
My stubbornness turned out to be beneficial when I was learning Vim because the first month was absolutely painful. I remapped all of my arrows keys to do nothing to force myself to use hjkl. Eventually I got the hang of it, and now I definitely have the muscle memory that makes me much more productive when editing (and reading) text.
By default Vim is just a text editor. But I work on a project, so like most lazy people I searched for prepackaged plugins and came across two popular distributions: spf13 and janus. When I installed them, it was like someone took over Vim and made it change into a completely different beast. I didn't know how to use it anymore.
I took a step back. I forgot where I got this advice, but I think anyone using Vim needs to do this: start your own vimrc from scratch.
I took a look at all the settings that spf13 and janus changed. I copied them to my vimrc one by one, and also :helping each setting so that I knew exactly what it changed. I must say, Vim's documentation is some of the best and most comprehensive of any tool I've worked with. It was incredibly helpful in my progression.
Then, I did the same thing for plugins. And the nice thing was that most plugins followed the Vim pattern of having good documentation. After installing fooplugin, I just :help fooplugin and I got all the information I needed to know about the plugin.
I became obsessed with optimizing my vimrc, and trying out different plugins on a daily basis. And because I was very adamant with trying one plugin at a time, I got to know them very well. I knew about how to turn certain settings on and off, how to configure their bindings, and more importantly, how it interacted with all of the other plugins I have already installed. Over time my vimrc became a full blown distribution in its own right, highly customized to my personal work habits.
However, even though I recommend that anyone interested in taking their Vim skills to the next level should do this discovery that I have done, there are certainly classes of plugins that I deem to be must-have for any Vim user and I wanted to highlight them here.
Plugin Management
Fuzzy File Searching
CommandT (written in Ruby) is noticeably much faster than CtrlP (pure VimScript), but CtrlP has a lot more features. There's also FuzzyFinder, which I have not tried.
Autocomplete and Snippets
And of course, a good collection of snippets like honza's collection.
And that's it!
Out of the box Vim has some interesting defaults, mainly for backwards compatibility with Vi, but I think it's safe to say that anyone who uses Vim seriously will have a custom vimrc. If you're just starting out and don't know what to change, sensible is a good set of defaults.
Vim has changed my work habits dramatically. I think and dream Vim. I install Vim plugins in my browsers. And every day, she still teaches me new tricks. It's quite exhilarating!
If you've read until this point you might be interested in the full set of plugins that I'm using. If so, head over to my project page!