Most of my coworkers use modern IDEs/text editors, including Sublime Text, VS Code, and WebStorm. I continue to use vim. Every time we have a conversation about this, there's always the same arguments from non-vimmers: 1) vim isn't an IDE and you have to customize it to make it do all the things that modern javacript IDEs do out of the box. 2) Their editor of choice includes a vim mode, so they're not really missing anything. I feel like these are pretty difficult questions to address satisfactorily to people who haven't used vim exhaustively. I certainly don't consider them valid, as evidenced by my continued use of vim. I also don't object to them, however. I'm only a casual vim evangelist, and I don't begrudge those who don't want to use vim. Vim's learning curve is well-documented, and I don't believe it's for everyone. But I feel like I owe at least a vague handwave at my insistence on using something originally developed in the 70s, so I'm going to attempt to address these questions (but probably more likely, just wander through corridors of unexplored thoughts on the topic).

But first a story. How did I come to use vim in the first place? I wasn't always a vim user. I used Notepad++ for a while before I knew better, then later Aptana and even Sublime Text briefly. And I was reasonably proficient, or proficient enough. But I had a few colleagues at the time who were vim users and every time I watched them edit text, it just felt like magic to me. Like, I couldn't even keep up with what was happening. They were pushing keys and text was just changing and moving around, and they were jumping between 7 different files and splitting them in various arrangements, and it was all done from the keyboard.

Maybe this is what makes one likely to succeed using vim because even then I knew that it was faster typing than using a mouse. I was always learning keyboard shortcuts for various programs I used (not just my editor), and I even went through a period of time where all my passwords were things I could type with only the left hand, so that I didn't have to move my right hand between my keyboard and mouse. If you think that using a mouse is just as proficient as doing everything with the keyboard, then vim is not likely for you. Of course, I disagree with that, but I don't care if you embrace it. I don't feel the need to argue about it. I know for me, since I switched to vim, I've been signicantly more productive. I can just move so much faster than I could with my old editor. And yeah, there was a learning curve. I knew some very basic motions and commands when I started with vim, and I did a lot of insert mode arrow key holding for a while. But the beauty of vim is that when you find yourself doing something tedious and time consuming, there's almost always a better way. So you just learn things one at a time until suddenly (and probably without noticing it) you're actually proficient again.

My Editor Has Vim Mode

Now to address those common question, beginning with the second point. I almost feel like it should go without saying that the fact that every other editor ports basic vim functionality indicates something about the quality of that functionality. Clearly there's something to like about vim and modal editing or other editors wouldn't bother copying it. But I also feel like it's just really freaking hard to explain to people who don't use vim regularly just how far apart vim mode in a javascript IDE and real vim actually are. Usually when other editors have a vim mode, it means they have modal editing and some (but probably not all) of vim's motion and action keybindings. That is, they let you do things like go to the end of a line with $ and cut inside a word with ciw. They typically even have some ex commands, like :w and :q. But please listen to me. There's just so much more than this to vim. I learned many (most?) of the basic motion and action keybindings in the first year of using vim. And many of the ex commands as well. It's almost 4 years later, and I'm still learning something new about vim almost every single day. Basically everything you can do in vim mode of an editor is "year 1" of vim. In that sense, vim mode in another editor is a great way to learn to use vim because not only does it provide an extremely useful subset of functionality, but you can also just turn it off when you get frustrated that it's not doing what you expect (a common feeling when learning vim).

But I even feel like calling it a "subset" of vim is misleading. Like, to me, that suggests that other editors plucked out the good parts, and left all the esoteric edge-case-y stuff behind. But the best parts of vim are the things I've only just been learning in year 5. This isn't like the abacus once the calculator came out. Vim can do everything that a modern IDE can do. To be fair to both sides, I think a modern IDE can do all the things vim can do too, or at least all the things you'd probably want to do on a regular basis. I don't see an appreciable difference in the editors available today. But I do think vim does a lot of things better than modern IDEs. By which I mean it's easier to do them quickly because everything in vim is based on using the keyboard.

I also think that "My editor has vim mode" is a bit of a red herring because most people using non-vim editors (most) aren't actually using vim mode. "But it's there if I want it!" Yeah, but you obviously don't want it. I think that's what it comes down to in the end. I don't think there's anything wrong with the argument "I just don't want to use vim, okay?" So let's stop pretending that whether your editor has vim mode has anything to do with which editor you're using or that that's somehow an argument against using vim.

Vim Doesn't Do As Much Out of the Box

No argument there. And some of vim's defaults are wonky too. The first time you try to use backspace in vim, you are going to be surprised. But it's also not that hard to fix these things. Tim Pope's vim-sensible is a good start. My contention with this argument is that it doesn't matter. Some things take some work, but that doesn't mean they're not as good. Take typing for example. At some point in your life you probably knew how to handwrite in English, but not how to type. You wouldn't say "It's too much work to learn how to type" because you know that ultimately it's a lot faster typing that handwriting. The amount of work doesn't matter if the end result is improved productivity.

Additionally, vim's lack of default features keeps it fast. The fact that vim doesn't come with every feature known to frontend dev means that it has a lot less system bloat. Its start up time beats virtually every editor in existence, even once you install a handful of plugins. Editors that have tons of built in jazz, probably also have a lot of things you never use.

Furthermore, setting stuff up in vim is just not that hard. Yeah, vim doesn't come with built-in git integration. That's because vim predates git. But adding git support isn't hard. vim-fugitive does a great job. There are existing plugins for almost everything you might want to do in an editor - including view files in a side bar file tree, expand snippets, use multiple cursors, tab complete, fuzzy file find - and many for things you never knew you wanted to do in an editor - like open the current file in its github repo or generate html from css-like selector paths. All you have to do to get vim set up to do the things you want is follow the installation guide for one plugin manager, and then just add plugins for the functionality you want. Not sure where to start? I really like vim-plug for managing plugins. Some people prefer the simpler vim-pathogen. Then check out VimAwesome to find plugins. Or have a look at the ones I'm using. Or just import the entirety of Tim Pope's github profile.

That's one thing VS Code, Atom, WebStorm, and Sublime Text don't have . . . Tim Pope.

Or Bram Moolenar.

Happy vimming.