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!
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.
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 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.
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 :)
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.
But that's just me...