Why do so many people only consider Emacs and Vim for programming? There are a plethora of IDEs that have way more features out of the box and even have plugins to make them compatible with Vim and Emacs usage so the switching cost is almost zero.
If you're talking about a statically typed language built for refactoring and static analysis like C# and Java (hopefully one day rust), you're absolutely correct, that's a game changer and you should take advantage of that.
However, the functionality quickly falls off. I do tend to keep around intellij, but mostly for the various debugger integrations, but you can quickly replace any integrations with project-wide search and replace + a decent auto suggest + compile/linting integration. That's not terribly hard to find these days in emacs, vi, vscode, sublime, etc etc, and it's only going to get easier when we start seeing language servers pop up so you can refactor from any editor!
I still find myself frequently working on an unfamiliar Linux system, or one where I can't install any SW. For those situations vim or emacs knowledge is still good to keep around.
Plus the vim-emacs debate is fun to keep alive, it's a like a surrogate discussion. Other people might talk about sports or the weather.
Many people don't like the idea of an IDE. In Unix the whole system is a development environment, the editor is just a part of it. Also having Vim/Emacs-like key bindings is not the same thing as being "compatible" with these editors.
I can't speak for others, but I do almost all of my text-editing via SSH on remote servers so I basically ignore all GUI options. Also I like to be able to load-up a familiar dev environment on any server that I SSH into, so I don't like a ton of customization.
Give me examples. And I think I will be able to explain to you why I prefer emacs/vim over those. It's not like I didn't try them, it's that I haven't found anything better than vim/emacs!
I ended up switching to Emacs after having spent quite a bit of time in Visual Studio, Kate, and Geany (in approximately that order). I've since tried Sublime and Atom, but they don't feel right to me. My '.emacs' turns Emacs into my editor rather than someone else's editor that I happen to use.
Basically: I don't really care about the out-of-the-box environment. I care about an environment that's tailored to my use-cases and programming style. This will cause me to frequently gravitate toward Emacs or something very similar.
I also happen to like Lisp, so there's that. TRAMP also helps considerably for editing remote files, and very few non-Emacs IDEs/editors offer any real equivalent.
I think it is just a matter of taste. I've never found an IDE that didn't try to be way to magic for my tastes. I prefer combining my choice of lower level tools in ways I find useful. So IDEs aren't the competition for people like me. There is competition though, VSCode, Atom, lime, kakoune, etc. It's just that vim and emacs are the classics, so they get discussed a lot.
I don't think it is the typical case that an Emacs and/or Vim user only considers Emacs and/or Vim. I think the typical case is that Emacs and/or Vim offers more appealing sets of tradeoffs to their users.
I mean Visual Studio and Eclipse and (I imagine) Xcode offer substantial features and optimizations for the languages and ecosystems they primarily support. The cost of those optimizations and features appears when a person moves outside of the languages and ecosystems a particular IDE supports. Any language outside of those for which an IDE was designed is an edge-case (google up "Xcode Perl" for example).
Sure, it's possible to use an IDE outside of it's design sweetspot but it's swimming upstream in the Turing Tarpit. And the likely longterm outcome is that a programmer will wind up using a different tool and one of the options for most languages will be a text editor.
So the model I would use for why people choose a text editor is analogous to gradient descent where text editors are a local minima.
At the end of the day, my biggest reason is that few of those work/look/act/configure the same as they did 10 years ago, and will undoubtedly change how they work/look/act/configure in the future.
This isn't a bad thing, I just prefer to stick with what I know how to use efficiently to do the tasks I've done before.
One thing to keep in mind: I don't just use a different set of tools, I have a different workflow. Vim rarely takes up a full screen. (well, half now we've all agreed on widescreen monitors...)
As a quick breakdown of working on a project:
- I usually have a 'command' terminal, where I run build commands, execute / debug the app, manage project files, etc... (usually in the root dir of the project I'm working on, so paths are relative and easy to work with everywhere)
- I have a 'main editor' terminal, using Vim to open multiple files for editing, splitting the window and switching buffers on the fly based on what I'm doing.
- I have a browser window with tabs open to various documentation/reference pages for the code I'm writing. This gives me my 'intellisense' equivalent, I guess.
- I might open terminals temporarily to display other code, etc... when I want additional references displayed. (but only ever edit from the main editor window)
- I use tools like cscope (or even just grep) to browse my source code, which I can even do from the editor.
- I generally write a build.sh / run.sh / clean.sh I'll add to as I go, which wrap things like CMake, Make, lint tools, etc...
The biggest perk is that I can work in 100% the same way from any system with an SSH client, with zero change to my workflow. I can reconfigure my entire development workspace on a clean system and be productive with a couple 'git clone' commands and running a shell script to 'yum/dnf install' a couple standard development tools from the default repos.
I don't mean this defensively, I'm genuinely curious... What do you think an IDE gives you that other tools don't?
The first two that come to mind are a tightly integrated build system (eg. creating a new source file automatically builds and links it with the project), and the GUI design tools that generate the relevant class files. (Those could be huge factors for some people)
Is it simply the all-in-one packaging and integration between the tools?
Thanks for taking the time to reply if you get through all that :)
For vim, at least, those plugins are often highly incompatible with high-intermediate to expert usage; lacking everyday features. Interestingly enough, the only vim plugin I've ever felt comfortable with is evil-mode, which just goes to show that emacs truly is the best ide, even if it comes with a shockingly bad editor.
I could say that the debate is mostly relevant to "1337" hackers, that are un-pragmatic bordering to religious.
I won't do that, and instead state that the wise person selects the tool appropriate for the task.
I sometimes use emacs, and avoids vi as much as possible because I happened to learn emacs first.
But prefer IDE's and typed languages because I have a unreliable memory in respect to function names and argument order and irrelevant details like that, and I don't want to spend half my life trying to set up either emacs or vi to handle code completion so that it's even halfway-decent.