Emacs 2011-2023
bastibe.de
bastibe.de
I use Eclipse as my main IDE, but for smaller stuff I use KATE on Linux and BBEdit in macOS. Similarly, my knowledge base has to be divided between two tools.
When you have time, this is no burden. But if you don't, then it starts to bother you. Also, creating digital systems requires time and experience.
However, I'm very with you on VSCode thing. It's a proprietary tool looks like a free one, and keeping people imprisoned without they realize. As a fun side note, VSCode's Java language server is a headless Eclipse instance.
I'm not and won't be using it.
And, I don't prefer to feed closed source ecosystems with open source plugins, since the core is not open to begin with.
It's not that I'm in need of an IDE-like code editor. I got that part covered already. Also for larger needs, I use the same tool for the last 20 years, which is Eclipse.
Lastly, while I love to support Free Software, I have limited time and have to choose my battles wisely. So, instead I build the tools I need in my personal and professional life instead of developing plugins.
If I have more time, I'd rather develop plugins for Eclipse, though.
What also helps is keybindings. I like vim so I use evil and whatever the VSC equivalent is, and most other commands are done with a "leader key" in both editors, so there's not a big difference in ergonomy.
It's really not much trouble to have these two setups co-existing. In fact I'd be upset if I had to choose only one.
At the end of the day, it's just another tool with its own weight. And if the weight becomes bigger than the benefit, it's time to move on.
It is more pragmatic to simply find a tool that works for whatever I'm doing and call it a day.
OP explains as follows:
>as my Emacs usage waned, so its ancient keyboard shortcuts started to become a liability. I started mis-typing Emacs things in Visual Studio, and hitting Windows shortcuts in Emacs.
This meme really needs to die.
I use emacs a lot, but the attitude that it's not just a text editor leads people to accept UX mediocrity.
Emacs has fallen behind VS Code in many ways, including text editing.
- VS Code Org Mode[1] has maybe 2% of the features of Org for Emacs.
- The only VS Code-based mail client I've ever found is VSCode Mail Client[1], which was developed during a single month and then abandoned.
VS Code is clearly for normies who use WYSIWYG word processors, webmail, etc. Suggesting that VS Code has surpassed Emacs for non-coding activities is laughable.
Hey, me too. Or at least, I used to. I've done most of those things but you know what? There are specialty tools that do almost everything better than emacs does it.
Emacs calendar is inferior to Google calendar, thunderbird, or even Apple's calendar app.
Org mode spreadsheets pale in comparison to libre office and excel.
Emacs's email handling is straight up dog shit.
Doing simple calculations is better/easier in a python or sbcl repl than am emacs buffer.
Generation of static sites is easier, more flexible, and generally better dx with a shell script.
Actually writing text is better in vscode. It's more performant, for starters. Imagine a program in 2024 that locks up the GUI if you make a network request. Oh wait that's emacs. Embarrassing.
I've used emacs since the early 2000s and I am not afraid to admit VS Code is a better text editor than emacs.
I'd rather use specialized tools for each task, maybe gluing them together with python or bash if needed.
I personally am using a mix of tools with my editors being vim for editing files quickly on cli, emacs for magit (honestly I just use it as a git tool and it works amazing, the startup and leaving it running 24/7 is no issue on a modern computer), intellij for java (it just works), and vscode for python, terraform, javascript/node.
I see absolutely no issue with this setup, I’m not sure I would recommend it to everyone but if you use a tool, that you feel works better for even a specific case why not use it for that. If new tools popup in the future I’m always willing to try them, if they work better I’ll add them to my workflow.
Escaping Emacs terminology ("buffers", "frames", etc.) was a big win, as far as I'm concerned.
* Keybindings are different, and switching back and forth adds friction.
* You get looks if you use Emacs. From those over 45 it's like "I remember that from my DEC days; why use it now in the age of Eclipse/JetBrains/Atom/VSCode?" From those under 45 it's more like "You're using that ancient thing from the 70s?!" There are probably Facebook memes out there with an Emacs screenshot and the caption "If you use this to code you're a psychopath." Social pressure these days is against Emacs, so if you're going to use something else, may as well go with the flow and use something else, not something else and Emacs and be thought a weirdo.
I remember briefly using the Git features in Xcode and IntelliJ, but both were pretty convoluted and lacked specific features I use daily, such as staging ranges of a diff (rather than an entire diff). There's also little things that make Magit essential to me, like cherry-picking a commit from the reflog having virtually identical UI to cherry-picking in general. Never bothered to try learning how to these things in Xcode or IntelliJ since the interface was complicated enough just to create commits and view a log.
I don't use VS Code, but my coworkers that do use VS Code seem to use git entirely from a terminal window. So I am guessing VS Code doesn't have a Magit equivalent.
0. https://marketplace.visualstudio.com/items?itemName=kahole.m...
There’s nothing “similar” to it but vscode does have git tools, it just feels really clunky to use imo. Same goes for intellij’s UI. I guess it works for some people but they sort of just hurt my head to look at.
I always leaned on emacs due to its versatility working in remote environments on the command line. I still use it occasionally, but for me the feature that finally made me switch to VSCode as my main daily driver was the remote SSH plugin. It's a game changer and the best remote IDE experience I've ever had. Then Copilot came out and cemented the change.
I think in general emacs and vi users learn to live with the UX and legibility issues of the software. I find vscode to be better at that. It strikes the right balance on a lot of things, in particular I find myself learning new things faster and with less frustration because the shortcuts, commands, and contextual information are more intuitive and in line with my expectations.
No line-by-line committing, no branch spinout/spinoff, no worktree support, no interactive rebase support, no reflog, the list goes on.
I can see OSS Code being better for only novice Git users.
no, it really really doesn't, compared to magit.
Have you tried using TRAMP? Depending on the specific backend chosen (ssh, scp, ...) it has varying levels of speed, but I have found it sufficient for my needs.
Regarding Copilot, that's an interesting use case. It makes me wonder if other editors have extensions that try to recreate this experience. I wouldn't be surprised if Copilot is the killer feature of VS Code nowadays.
I expect rewriting Emacs to use async IO to be a massive effort. It's difficult to write async code in Elisp.
Take a look at the diagram here: https://code.visualstudio.com/docs/remote/ssh - you will see that VSCode does not simply connect to the remote computer to read and write some files. It installs an entire VSCode server - seamlessly to the user every time they connect to a remote - that keeps track of all project facilities, shells, extension accessory runtimes, takes care of embedded or computationally heavy tasks like compiling, building, running project-wide code analysis tools, etc. while keeping all settings, editor windows, and accessory panes local (which is critical for UX and latency). VSCode appropriately partitions responsibilities between the local and the remote, automatically restores IDE infrastructure on the remote as needed, and enforces the partitioning architecturally for all extensions.
These latency optimizations and offloads are not ad hoc; they are rooted in VSCode's origin as a browser-based IDE, and make use of the LSP and other architectural features that simply don't exist in Emacs because nobody really thought deliberately about running the extensions at an arm's length from the editor UI in Emacs, using an async protocol that doesn't allow extensions to impact core UI latency.
A routine issue with TRAMP is that some unrelated plugin makes editing very slow and subject to random freezes because it expects low-latency I/O to the file being edited and to other accessory files next to it. This is a major issue that absolutely kills editing UX and confidence. It doesn't really happen with VSCode (worst case, the red squiggles show up a few seconds late), and just as importantly, the entire project behaves predictably because it's not just TRAMP running on the remote but the entire IDE infrastructure.
Ironically, I think Emacs' origin on X-based systems foreclosed on the architectural possibility of a clean separation of concerns that can be seen in browser-based IDEs; it would be wildly disruptive to the package ecosystem.
For everything else, I stick to the command line. That's the only part of git that will always work no matter the interface. I find it easier to memorize, too, and it's of course much easier to search for online.
A few weeks ago I asked myself if I can use Emacs as a front end for my markdown files in my Obsidian vault. So I started setting up Emacs for searching files via counsel-fzf and via ripgrep (I can jump to any heading in my markdown files, find any content in my 17k+ files, in an instant, using Emacs). I use yasnippet for templates.
After a week or so I realize this:
0. I love writing documents in Emacs, use Elisp to automate my workflow, and have all my files available on the go via Obsidian.
1. Emacs + Elisp are a wonderful platform for all things text.
2. Markdown is less capabable then org-mode, but it's available everywhere.
3. Org-mode is tied to Emacs, and thus no mobile solution.
4. Broke down my 5k lines Emacs config file into packages and import them. This made it more managable. And now I version control my configs and packages. This also made it more managable.
I still use VS Code for writing code, BBEdit for regex search/replace across files, I just have re-discovered Emacs again. It's just unbelievably versatile with the Emacs Lisp language. I cannot automate Obsidian just as fast (or at all).
## Edit
I have said fare-well to Emacs soo many times, just to realize how absolutely lovely it is / was, and come back to it. Always. And then, with a fresh perspective, appreciating it even more. So I don't believe this fella is going to stay away from it :)
## Edit 2
What boosted my Emacs usage is ChatGPT and Claude 3. I have never created that many Emacs packages in my life like in the past two weeks or so. With the right prompt and a few iterations I can make Emacs do whatever I need it to do. Absolutely stunnig.
I don't know if I'll stick with it, or if it'll get sluggish after a while, but right now the searching, rich-text, and pdf-annotation seems refreshing.
Just recently I wanted the M-x shell to support OSC 8 links(you can click them to go to a file), and all it required was to write a small function to do so. This function goes into the thousand odd lines of lisp that I have curated over a 16 years. It is an editor that keeps evolving.
But although I've used VSCode since (mostly for TypeScript development), I can't say that I like it. It is forever showing me things (pop-ups) I didn't ask to see, and it has problems working with WSL2 (it doesn't seem to notice filesystem changes correctly), etc. As usual, though, I am busy enough with real work that worrying about the ideal development environment has had to take a back seat.
So it's possible I will eventually return to Emacs. More likely I will find some other tool. I'm tired of the Emacs way of doing things, even though I think the architecture of the editor was brilliant.
ALL software has flaws; it's just a question of whether you can fix it yourself or you have to live it with and hope someone fixes it for you.
When it comes however to keyboard focused, unmoused control of a cumputer, then Emacs is the only option, there is no other option. Text is of course very central to Emacs, but images or anything else can be embedded and processed inside Emacs.
Emacs lacked till now the killer app, and i think that app is LLMs. Emacs has already 5 different packages for interfacing with LLM's. Personally, i just cannot imagine using LLM's without Emacs.
One example i could give, by using the GhostText extension, one can write in a textarea in a browser inside of emacs. Poe.com for example has a textarea the size of which, is not adjustable like HN comment-textarea, and writing anything more than 3 lines is confusing. Big deal, write inside the textarea using emacs, much faster and accurate.
If someone knows, what's the big deal with pair programming that Emacs cannot replicate? Is is a good implementation of CRDT's?
When I first entered the market 15 years ago there were loads of Windows only places that were completely out of the question for me. The world then seemed to change and it was easy to get a good job for a while. But the forces of darkness never went away, it seems. I always said I'd rather just quit computers then do anything Microsoft. I hope I don't have to put my money where my mouth is, but I'm still prepared to.
I'll probably never let go of Emacs, but have encouraged both of my kids to avoid it and use VSCode instead.
There are still things I miss which are impossible to replicate in vscode without breaking it, but I feel the out of the box experience and reduction in configuration complexity is a rather large net positive.
vim is still what I use to edit stuff via ssh and in docker images, though.
Emacs' key idea is a composable environment, which translates poorly to non-LISP languages and other programmable editors due to their more rigid design. It's really an operating system with a non-conventional architecture.
But nowadays, it's just VSCode. It may not be open source, and it may not be a particularly exciting (or good?) text editor. But it has become so ubiquitous that I'd just short-change my students if I recommended anything else.
They'd still occasionally see me type into my Emacs (which looks nothing like stock Emacs). And sometimes it would even get a kid or two interested. Some even switched to Emacs because of those classes. I have since given up teaching, though.
(I started using Emacs in law school, and wrote keystroke emulators for both Word Perfect BITD and Word. Nowawdays, when using Word on others' machines, I have to remember that, say, Ctrl-A doesn't go to the beginning of the line.)
- having others using different tools and being non in comfy position it's a known thing, and often demonstrate that others choose bad habits instead of you
- pair programming is harmful
nothing else. I almost live in Emacs digitally since I boot to EXWM, have my files as org-mode attachments, info in general in notes and so on, I have some complaint like poor handling of floating windows, some blocking operation, rare crashes, ... witch are Emacs issues (well, Emacs ecosystem, at least), but the fact that others have other tools and working together due to the tools other use, not made to play with other, is an issue it's not an Emacs issue. It's like saying "Emails are bad because my contacts use WA and WA can't read or send emails". Pair programming fall in a similar category: "hey, I'm tall/short/fat/hairy/with little|large feet|hands so I do not fit well in common clothes, it's the final nail I have to conform my body to the others". It's not an argument, it's the DEFEAT of a human choosing to be part of a machine instead of being a human, with it's idea, tools and so on cooperating with other humans, similar, but different where the difference is the key of intelligent innovation, evolution, if our peers are smart.
Working in a setup that demand such level of conformism means working in a fragile setup (too tied to some third party tool) with limited innovation margins since different vision can't be compared and discussed regularly boosting idea migration.
Some conformism is useful under certain emergency, not in the ordinary life. Making ordinary life like an emergency means being unable to live.
Visual Studio Code is just aimed at a different kind of developer than I am. (ThePrimeagen fans, stay quiet; you risk violating someone's code of conduct if you speak up now.) It doesn't work the way my mind works, so I will always be a foreigner in its lands. Plus, Emacs is just too cozy. It's like a beanbag chair: once ensconced in it, you struggle to get out... and you really don't want to.
Emacs now has a package called crdt that uses -- you guessed it -- CRDTs to provide collaborative editing. I've seen YouTube videos of it in use and it seems to work rather well. So you can pair program remotely with it, but I don't pair program often enough to need it.
Interesting that the straw that broke the camel's back for the author was pair programming. I've been pairing pretty regularly for a long time now, and everybody using their preferred editor/IDE was never a problem. Live editing the same code is something we played around with every now and then, but there wasn't real utility. One person sharing their screen is pretty much how I've done it for the last five years or so. If we want to switch who's driving, we just commit.
Edit: In fact, my experience is that it has never been so _easy_ for everyone to use different editors. CLI toolchains, editorconfig, auto formatters and linters, LSP, ...
In non-remote jobs I would always set up my station with two keyboards and two mice for this reason. Now that I work remote I always keep VS code configured for the codebase and use it for pairing. Even though my personal editor is, yes, emacs.
I don't want to oversell it. It's not perfect, and has loads of bugs. But the fact that we can refractor the code base with two cursors simultaneously, is actually super powerful. Often one person is typing while the other is cleaning up a typo a few characters ago. It feels like symbiosis. It's really good.
And noticeably less lag than screen sharing, too.
FWIW, I spent a lot of time in Notepad++ with my own syntax and settings setup for a specific video game I made mods for. And then I learned Linux and really bought into BOTH Vim and Emacs. And then I stopped playing around with computers and pretty much forgot about all of that stuff. No hard feelings.
But I never gelled with it.
I've always found its complexity a bit overwhelming.
I learned the few things I needed. Things like read and write files, arrows to move, pgup, pgdown, ^S, ^R, M-X compile, ^K, ^Y -- honestly, that's about it, no doubt there are others, tab, auto-indent, paren matching. I've made a little progress using Slime for Lisp, or the scratch buffer, but tend to just fall back to save the file and reload.
Emacs is infinitely customizable, and I don't customize things.
To quote the Genie: "Phenomenal cosmic powers! Itty bitty living space!"
That's the emacs I live in.
I've never been comfortable with its chording control style. While everything is documented, it's not necessarily discoverable. Never got comfortable with its scrolling style. I always fumble with switching between buffers, particularly when it's more than just to and fro with ^X-b.
There's a drop down menu on the menubar (on my Mac, I use stock Emacs), but it actually takes 2 clicks to use.
And trying to set it up to develop Java is just...well, complicated.
I originally used Emacs to write Java, back in the pre-IDE days. I liked its free syntax coloring, I liked that Ant worked with it, out of the box (maybe with -e for emacs messages or something). And I muddled with that for several years.
Eventually I switched to NetBeans, and I can't do Java without all of the autocomplete and other gizmos NetBeans gives me out of the box.
And why NetBeans rather than Eclipse? Because it works great out of the box, and I don't have to customize it (note earlier). Early Eclipse was plug-in mania.
I won't give it up, I use it for my Lisp coding (auto-indent and paren matching mostly). But, I doubt I'll ever curl up with it.
But you bring up a good point. Perhaps installing packages willy nilly is orthogonal to the editor choice.
Or we switch back to vim.
I vastly prefer IntelliJ, but project setup on vscode has never been a major speed bump in my shop.
Spending time fiddling with extensions makes me want to stick forks in my eyes, but I'm genuinely curious if other people just generally suck it up and get it figured out or if they just ignore error squiggles a lot.
I would never go anywhere near Java with Emacs though, I would just bust out Intellij or Eclipse for that.
For Lua last time I tried I just did not install any Lua extension, just use the native syntax highlighting and move on.
I just can't come at the combination of Electron, non-free components, and the owning company. Codium helps, but not enough
I've done the journey Vim -> VSCode -> Emacs -> Neovim -> Kakoune -> and then Emacs back again. This time I'm sticking with it. The reason is simply that I think it provides capabilities for:
- great devdocs and info pages integration
- automations (compile project, set up project specific bindings etc.)
- email (mu4e)
- navigation (vertico + ripgrep integrations)
- note-taking (howm)
- magit for git handling
... and then everything else it comes with. I'm quite a big fan of everything being minimal and text only.
I have to say that the author's story is sad. It is scary how Microsoft is locking down the ecosystem though through their pair-programming tools and other integrations. I really wish we could use the tools we prefer rather than succumb to Microsoft overlords.