I've been programmer for about 20 years now and I could never understand why Vi(m) or Emacs exists with those weird bindings which are completely different from pretty much everything else.
I'm not that old, maybe they had their cake in 80s, but perhaps time to move on to something modern which would have modern defaults (if many need to customize there's something wrong with the defaults) that appeal to all keyboards.
> I've been programmer for about 20 years now and I could never understand
I doubt there's any hope for you... but from other thing you said:
> are completely different from pretty much everything else.
I can conclude that you were programming something that's not a typical modern computer. I.e. you never used things like terminal (with readline), never red a manpage, never used pagers like more / less, which would mean that you also never used the most popular operating system in the world, where, for instance, if you need to get access to its service logs, they'd open in a pager...
I mean... was it like 20 years of Scratch programming on a game console or something? Or maybe COBOL on a MF? Like, what were you doing all these 20 years that kept you so far away from the most popular thing in the world?
Hey, me to! I started with ActionScript. (Well, I've done some Pascal and QBasic before then, but that doesn't count.) I was kind of a big deal on actionscript.org, when that was a thing :D I also did some C# because of FlashDevelop (I wrote some plugins).
Also, was looking at JS/TS back in the days when I had to migrate away from AS.
> Yup, I'm pretty much working with terminal everyday,
Doing something every day doesn't mean you do it well. Apparently, in your case, you don't. Readline interface to the terminal uses the same keybindings as vanilla Emacs. You just somehow don't know it. Kind of weird, as there are hardly any keybindings to learn, and yet.
> most popular thing seems to be Vscode.
VSCode is, well, junk. And so is Linux! Popular doesn't mean it's good. In programming, it's actually rare when it's both. And people like you and me have contributed to this being the case.
You see, the difference between you and me was the stupid chance. When FlashDevelop was considering Linux support, they didn't have a good program about what to do with their text editing component (Scintilla) that was festered with p-invokes. So, in a very ambitious project I wanted to replace that component with Vim. That proved to be absurdly hard... and I quickly gave up any hope of that happening. But, I learned few things about Linux that, later, made me switch.
My first editor on Linux was Eclipse. I still used it on and off for a long time due to Flex Builder, and later Flash Builder. It sucked, especially because Adobe's support sucked, and eventually, they cut it off entirely. I was still patching the last version of Eclipse to get Flash Builder running, but, eventually, that became irrelevant.
Somewhat in parallel and increasingly more often, once I started working mostly on Linux, I switched to Vim. Ironically, because I wanted to work with Common Lisp, which is another hilarious misunderstanding story. After trying it several times and giving up, eventually, I switched to Emacs.
In my professional life, I was at that time hired by HP to work on some sort of a SAP knock-off that had its interface written in Flex. By the time the project was due, they declared to the customer they won't support Flex anymore, and switched to GWT (the Java framework that generated JavaScript). I didn't make it into the group of developers who were assigned to continue that project, however, somehow, I got reassigned to the ops team.
HP had a corporate IntelliJ license, and made use of IntelliJ products mandatory at work. My job in the ops team was to navigate the cubicles of desperate Java dummies hired into this mindless grind of Java/XML and "fix" their Maven builds. Usually, the fixing amounted to explaining to them for the zillions time the basics of using their editor -- the fabled IntelliJ IDEA. It was ridiculous how unproductive these people were with that monster of an editor. Ironically, quite a few of them would also use Notepad++ as a side hustle. But they sucked at that too.
Later on, I switched to supporting MSBuild projects in a different company, and had to battle the unimaginable stupidity of its MSVS users, who couldn't understand how their editor worked, and didn't care. It was a game shop that made games for "smart" TV, and they actually wrote them in TS.
I've seen editors like Atom or VSCode come and go. And I've seen quite a few users of those too. It's a choice for people who don't have or don't value the skill of using their editor. These people are in constant fear of the tools they use, constant anxiety about the next Git command they are going to type and how this will "ruin their day", people who don't know how to open a file without extension...
I don't work with such people anymore. Not in my day job at least. Though my wife, she has to deal with this kind of audience. And, sometimes, she has to call me to fix the problems these people create for themselves.
But, you know what served me faithfully through the years, no matter the language I used, no matter the platform, no matter how modern or archaic, no matter if in the cloud, in a crippled unter-computer, or in HPC setting, no matter if having X-server? -- And, always with great performance, and always keeping few tricks up its sleeve? -- That's right, Emacs. VSCode is so pathetically bad compared to it, it's ridiculous to even think that someone may suggest it as a hacker's tool. It's a toy "doctor set" from AliExpress in the real surgery room. Good for giggles, but that's about it.
So, back to how we contribute to the awful state of affairs in programming: we don't create a system of values based on research. We proclaim that thing X is better than Y. And sometimes also give rationalization that is complete nonsense. While we might have real experts, those aren't found in the places they should be: academia failed us -- their titles are worthless. Industry failed us -- it doesn't need quality, it ranks software success by commercial success. People like me and you may stay in the industry for decades and end up complete noobs. With the added aspect that after a long time of being a noob, even if nothing really changed the noobs start to believe themselves to be pros. And then they take to teaching others.
We belong to the wave of programmers which wiped the little accomplishment that there was there in the 70's and flooded the field with ridiculous unga-bunga nonsense that we sell as "programming". We are the lords of the flies.
Modal editing exists because the mouse didn't exist then, and it continues to exist because modal editing is very powerful because you get to be in a mode where you type commands for cursor movements, textual transformations, etc., which allows power users to be very productive.
I don't think I've ever seen evidence that emacs users actually need to be very productive in their text editor even if it works.
Though it might not work - the original Mac user research found that keyboards make users think they're faster, but don't actually make them faster, because of time blindness.
I wouldn't know. I'm a vi user. I don't know how much more productive I am with VI than non-modal editors, and even if I did know that would just be anecdotal, but I feel more productive coding in (Neo)vi(m) than I do in any non-modal editor, and it's much more comfortable anyways.
Vi has a steep learning curve, but once mastered, it is on-par or exceeds the best of other editors. It is also present everywhere (on Linux at least) and works via ssh as well as locally.
I'm not using it anymore myself, but I know and respect people who do. For me the tradeoff was not worth it, however it still annoys me to hell and back that I have to reach for the mouse so often in vscode.
I develop mostly mobile apps and I need to be using mouse/trackpad anyway frequently so that's not an issue.
Though about the keyboard part: I'm used to Vscode's keyboard shortcuts too (and I can in no way say I know all of it) and I can easily navigate and code in Vscode too.
Perhaps many people who got used to those tools developed muscle memory so much that they can't give Vscode (or anything modern) the chance it deserves.
I also use keyboard shortcuts (obviously), but in some cases it seems impossible to configure them - for example maximizing the terminal window vertically seems to not be supported by shortcuts.
There's really no mystery here. The reasons are the same as in every other part of society where outdated conventions are maintained despite massive, obvious problems. The phenomenon itself is as predictable as the arguments used by its defenders, mostly variations of "it works for me".
I think there's more reasons that are not so negative.
First of all, vi predates all those others. That means it's always had an active userbase werken other tools were in fashion. Changing the bindings at any point in time would have hurt a lot of people's muscle memory. It would also be extremely annoying when one has older versions on some machines with the old bindings and some with the new. I deal with the Mac vs Windows/Linux copy paste problem every day.
Also, vim just has a ton of functions and there's always going to be some shortcuts that will be awkward on some or other keyboard layout.
Finally, you don't have to use it :) or you could distribute your custom config file with bindings to every machine you use.
… or also because it’s significantly more productive than any other editor. But hey, it’s much easier for you to assume everyone making a choice for themselves is part of some cult than giving them the ability to think and make good choices.
I use heirloom vi (while making it clear when asked that I doubt the person asking me should do the same ;)
I was basically forced into learning vi to begin with (editing things on a -very- heterogenous collection of servers) but then found after a few weeks that I found it surprisingly pleasant and stuck with it.
Then again I don't recall sending a vi instance anything involving the control key except for Ctrl-C, Ctrl-L and Ctrl-Z.
It’s not problems, it’s opportunities you’re missing, because you don’t understand and aggressively don’t want to understand the actual reasons why people are using it, whining about elitism and other bullshit instead.
I've been programmer for about 20 years now and I could never understand why Vi(m) or Emacs exists with those weird bindings which are completely different from pretty much everything else.
I'm not that old, maybe they had their cake in 80s, but perhaps time to move on to something modern which would have modern defaults (if many need to customize there's something wrong with the defaults) that appeal to all keyboards.