It’s been about 5 months since I made the move to VIM so I figure it’s about time that I gave an update.
Before I get started here is a downloadable copy of my vimrc.
I have learned much during this process. Fist I have learned that many of the “die hard” VIM users I know, some of the same people that would giggle in my general direction for using Emacs, do not really “use” VIM. They are what I would call casual users. Sure they did their editing in VI/VIM but do not use may of it’s general features. There is nothing wrong with this but asking for help in those quarters did not yield much fruit.
I also learned that VI/VIM key bindings for movement are VERY addictive and, due to that, I will occasionally end up with Word docs (when I have to write them) with embedded “3di” or “hjjk” sequences. The easy fix is … write all of my docs in VIM then mark them up in the other programs ;) On OSX this was not an issue as it uses the Emacs key-bindings by default.
On a positive note I have made serious ground in my usage of VIM; I use the movement keys almost exclusively, only using the cursor keys when I am switching back to VIM from something else, such as a browser. My editing speed has significantly increased and I have gotten over my addiction of having an embedded shell although I sometimes still miss this.
The plug-in support for VIM is outstanding, both the packages and how easy they are to install. This is one major advantage over Emacs just in that you can be playing with a new plug-in within seconds of downloading it. Emacs Lisp is still far more accessible to me then VIM script (or what ever it is called) but that is just a matter of time I would imagine.
It is comforting to get back to using system tools to do things like I do from the command line not that the same tools are not supported in Emacs, more that it is not the default thinking.
For example in VIM if I want to pull in a directory listing reformatted in a particular manner I will run something like:
:r!ls -al | cut -c1-11,51- | awk '{ print($1" "$2) }'
Where as in the past I would just run “ls -al” and then manually edit the output.
I am not sure why this is. Maybe it is just that in the past I defaulted to the line of thought that the editor suggested. In Emacs this would have been, for me at least, get the data into a buffer and edit it. Whereas VI(M) feels much more like a small tool in the tool chain so I end up using it like it was any other command line tool. Hmmm, this reminds me of the Einstein Quote “We can’t solve problems by using the same kind of thinking we used when we created them.”
So at the minimum using VIM for the last few months has changed my thinking process; I am solving problems in a different, more efficient, way. In the words of the Pragmatic Programmer “Invest Regularly in Your Knowledge Portfolio”. Before I close this I should point out some of the cool VIM plug-ins that I am using.
- Omni Completion aka Intellisense
- NERDTree a file system browser
- NERDCommenter enhanced comment mode for various file types
- Tag List a source code browser (like NERDTree for code)
- Fuzzy Finder like quicksilver for VIM
- Snippets Textmate-style snippets for VIM
- BufExplorer Better buffer management
I will probably write something up for each of these later but it is late and I have things to do before sleep.
In closing I am very happy with the move to VIM; it has forced me to think differently and for that I am a better developer. I don’t necessarily think everyone should do it but if you are looking for an alternative or if you already use it occasionally then I think it is worth the effort to really learn it.