Of course, referring to Vim as an IDE isn’t specifically correct. It’s a text editor, but man, it can do so much more. I think most programmers are always on the lookout for the text editor/IDE that really fits them. It’s not that we’re looking for a magic bullet that will write the code for us. For me, at least, I want my IDE to get out of my way. I don’t want to have to wrestle with it just to get some code written. I’ve tried them all, and there are a lot of really good IDE’s and text editors out there. Gedit, kate, IntelliJ Ideas, KDevelop, SublimeText, Komodo Edit… I’m sure the list goes on forever. I thought I had reached the top of the mountain with either SublimeText or KomodoEdit. For my money, they’re the best GUI based IDE’s out there right now. But I still wanted something more. A colleague talked to me seriously about Vim. Of course I had tried it in the past. You can’t do anything on the command line without running into it at some point, and banging your head against the wall trying to figure out how to get the hell out of it! But until you start seriously trying to learn the Vim way, you’ll never understand how amazing it is. Of course, there’s a huge learning curve to using Vim effectively. But once you get even a little way down that curve, you’ll be able to do things that just blow you away.
So, what are some specific things about Vim that I love.
- First, no mouse. When you use a GUI based IDE, you find things with the mouse. You have to take your hands off the keyboard, find the mouse, drag the mouse to locate the menu item you were looking for, click something, wait, what was I doing???? With vim, the only option is keyboard shortcuts, and your fingers really start to fly when you only use them to type. It’s such a small thing, but it has an amazing impact on my productivity.
- Macros. Holy smokes, but macros are just amazing in Vim. Macros are simple, really. It’s just a recording of a series of keystrokes that can be played back. But when coupled with Vim’s raw keyboard power, macros can do amazing things. For instance, recently I had a csv file that had a list of settings. I had to get only some of these settings into a .yaml configuration file. With a mouse, I would have been there all day, since there were a couple hundred settings. With Vim, I opened a split window with the .yaml file in one split, and the .csv file in the other. I figured out a series of keystrokes that would switch splits, search for the next setting, copy it, switch back to the other split, go the next line and paste. Once I had that, I simply recorded it as a macro, and ran that a couple hundred times. Took all of 5 seconds.
- I may have heard this from somewhere else, but Vim is a programming language in and of itself. I’m not talking about Vim script. I’m talking about the way that Vim makes you think about what you want to do with the text. Vim has a syntax that expresses what I’m doing in a manner that really makes me think about what I’m doing. It’s hard to explain, but “yiw 5j f’ viwp” is satisfying on a spiritual level, where double clicking things just isn’t.
- It’s everywhere. I know that any server I log onto is probably going to have Vim. If I get used to doing things in Komodo Edit, then I have to work on a remote server, then I’m still going to wind up having to use Vim. So why not get to know and love Vim with all it’s power.
- Plugins. Vim has one of the largest ecosystems that I’ve ever seen. People have been writing plugins for Vim, almost as long as Vim has been around. And brother, that’s been a while. Granted, you can go overboard with the plugins, but Vim follows the UNIX principle of small tools that do limited things very well, so occasionally, there are things that are difficult to do in Vim. That’s where plugins come in. Chances are, if you find yourself wishing that Vim could do “x”, someone has written a plugin for it.
Of course, text editors have been the cause of many a holy war. Programmers seem to either love Vim or hate it. You don’t see a lot of middle ground with regard to feelings about Vim. And it does have a pretty tremendous learning curve. It takes a while to get to the point where you can be really productive in Vim, but once you get there, you’ll wonder how you ever got anything done without it.