> If you don't understand why so many developers are so committed to Vim
The only real reason I've heard people use vim instead of a GUI IDE is because it's simply what they're used to and don't want to change. (EDIT: And the fact that it's available on every system, but that only gives a reason to learn vim, not a reason to prefer it over an IDE)
In terms of features, there's not a damn thing vim can do that an IDE can't, while there are tons of things IDEs can do. It's excruciating to hear developers say "I use vim instead of an IDE because I can do X in vim" when every IDE made in the last 10 years can do X. And it does it out of the box without needing plugins!
I've literally heard people say they like vim because they can do some key combination to highlight several lines of text and then hit TAB to indent them all at once.
Vim is at the end of the day also just a text editor, so no, there's no things that it does that you cannot achieve in some way or another with any other text editor.
The point is how quickly you can achieve these things.
Vim requires a lot of learning before you can use it effectively, but if you do know it, you can do things with it quicker than you can with other text editors.
For example, to delete the last three words in a line, you can type into Vim's command mode "$ 3b D".
The $ moves your cursor to the end of the line,
the 3 does three times whatever comes next,
the b moves your cursor back a word,
and the D deletes everything to the end of the line.
This is the kind of stuff you can do with it. And well, you can mix and match these to do lots of different things.
It is somewhat ridiculous, but for people who actually know these commands, they have every right to feel horribly slow in any text editor that doesn't work like this.
And aside from that, Vim is really extensible, so whatever feature an IDE might offer, you can probably get that in Vim, too.
I don't have much experience with Vim, so I don't really have the whole picture here, but I never understood why the examples of Vim's usefulness was appealing. They all seem to be examples of how you can edit text very efficiently, but that never seemed to be a problem for me. When I program, typing speed is never the bottleneck - I spend most of my time thinking about how to implement something, testing it, and debugging it. The actual typing part is a fairly small portion of it. Letting me input the text with like 25% increased speed doesn't seem worth the overhead of internalizing such a complex system. I'd rather work in an environment with good debugging tools and autocomplete system (but maybe those aren't incompatible with Vim; again, I'm not too experienced with using it).
Perhaps it depends on the type of work. I imagine some types of programming require more typing than others. I could see typing efficiency being really beneficial for front end web stuff. I mostly work on game engine things, and rarely does my speed-of-thinking-of-things-to-type exceed my typing speed.
Yeah, I also think it depends on what you're doing.
I'm currently in the middle of writing an application with Java, which is more or less just a GUI to enter things into a database. And both, the GUI code and the database code, is 90% just spelling out the obvious.
I mean, for the GUI code, context-sensitive autocompletion is still important, no doubt, even just so I don't have to type out "pnlInputTimeSpan" and similar all the time, but the naming is relatively consistent, so I could certainly imagine just typing it.
And there is something to be said as well about actually just typing things out, rather than also interacting with the GUI of your IDE. Remembering the name correctly and typing it, to me, feels closer to the core thought process than interacting with the GUI of my IDE.
Lastly, many people tell themselves they edit text all day long, so whatever helps to speed that up, even if it's just a few percent, is going to be worth it in the long run.
You can easily delete the last 3 words in a line in any other text editor just as fast.
Press End to move the cursor to the end. Then hold CTRL-SHIFT and hit left arrow 3 times to highlight the last three words. Press Delete or Backspace. It's just as fast as typing "$ 3b D" and is far more intuitive.
Don't even need to highlight the words. Just hit the end-key and then press Ctrl+Backspace three times.
I know. It was just an example to illustrate the sort of syntax that you'll find more of.
If I myself actually properly knew Vim, I would have given you an example that by itself is most definitely quicker than normal keybindings, too. But I figured, if you actually care to understand, you'll see that it's just an example, if you don't, then you won't.
All I know, is that you can find videos of people using Vim well and they're most definitely faster than anyone I've ever seen with a normal text editor.
There's a lot more physical movement involved in the end/ctrl+backspace method, even though it's fewer keystrokes.
The big thing with Vim's modal editing is that it allows you to have keyboard shortcuts involving keys that aren't way off in the boonies. Some examples:
* / or ? to search for text
* dd to delete the current line
* Stuff like ciw or ci" will delete a word or the contents of a double-quoted string, and drop you into insert mode. I use this one constantly.
When prompted, people try to come up with really crazy complex things, but frankly the bigger thing is just being able to actually reach things.
If I tried to use shortcuts in other editors to the extent that I do in vim, my hands would constantly be in pain. This is why I never got into emacs, though I've seen some folks be terrifyingly fast with it as well.
1.) They abstract important (to me) details. For example, build system integration. I prefer to see the actual Makefile to ensure that things are being linked correctly. This is especially important on large HPC clusters where there are a plethora of compiler options.
2.) They are too graphical. Essentially all of my programming is done through the terminal, which is fast and lightweight as compared to, say, Visual Studio or XCode (or w/e the standard OS-X IDE is).
3.) They do too much to 'help' the user, which ultimately just gets in the way. This is obviously a highly personal and biased opinion on my part. However, it is important (to me) to physically type the source, rather than starting from some template with boilerplate and adapting it to my needs. This is perhaps a reflection of the poor design of many languages (e.g. Java, C++) which necessitate such quality of life 'improvements' for some. But, for me, I just want to code what I want to code without an IDE getting in the way ala the maligned Microsoft Paperclip.
While I personally prefer emacs to vim, I have no doubt that these points may be common to developers who prefer either to an IDE. To your point, I do not know (but would not be surprised) to learn that some fantastic modern IDE could do all of the above. But, why do all that when emacs works so darn well for me?
> Edit text without having to constantly move hands off of the keyboard home row to move the mouse or hit keys like PgUp/PgDn.
There's probably more you can do without using the mouse than you realize.
> # Change all the 'X's to 'Y's on the current line in 5 seconds.
In PyCharm, I can easily select the current line with Home followed by Shift+End, hit CTRL-R, X, Tab, Y, click Replace All. Doesn't really take much more effort than whatever black magic command vim uses.
> # Syntax highlighting for [any language the IDE doesn't compile].
Then you're using the wrong IDE. PyCharm is primarily a Python IDE, but also does syntax highlighting for JavaScript, HTML, XML, YAML, CSS, and CoffeeScript. Visual Studio Code supports C/C++, C#, CSS, Go HTML, Java, JavaScript, JSON, PHP, Python, and a few others.
Both of them have support for adding custom syntax highlighting.
> # Pipe text through an external program.
I'd be doing this on the command line anyways.
> # Start quickly enough to pop open text files whenever you need it.
I'll give you that one. But that's not enough to do your general development in vim.
I'm much more of an emacs than vim user, but the "wrong IDE" part is not quite true. Most IDEs support the common languages that you've listed, but once you go a bit further into domain specific, it is not as common any more. Speaking of what I'm familiar with (statistics), even SAS is supported in a very spotty manner, or at least was last time I've checked, and this is a popular language that has been around longer than C. At best you would get some limited R support, which really pales in comparison to what you can get in Emacs (and surely vim). Sure, sometimes they have their own IDEs (RStudio is quite good, and so is Matlab's IDE), but they have their own issues. I'm sure the same is true for lots of other DSLs.
The only real reason I've heard people use vim instead of a GUI IDE is because it's simply what they're used to and don't want to change. (EDIT: And the fact that it's available on every system, but that only gives a reason to learn vim, not a reason to prefer it over an IDE)
In terms of features, there's not a damn thing vim can do that an IDE can't, while there are tons of things IDEs can do. It's excruciating to hear developers say "I use vim instead of an IDE because I can do X in vim" when every IDE made in the last 10 years can do X. And it does it out of the box without needing plugins!
I've literally heard people say they like vim because they can do some key combination to highlight several lines of text and then hit TAB to indent them all at once.