35 comments

[ 3.0 ms ] story [ 84.9 ms ] thread
Love Sacha Chua.

So grateful for everything she has done for the Emacs community.

It's funny, for 2024 I decided to take a crack at Emacs after 15 years of Vim. I forgot how absolutely horrible the new user experience is. First write a bunch of config to undo all the bad settings and nonsense that comes with the stock editor, then do three days of Googling to add basic features like fuzzy finding, LSP, VCS support you would expect to be built in in 2023.

Not saying Vim is any better, at least there's a package manager and they decided to include eglot in the base. But man, sometimes I wonder if we're all suffering from Stockholm syndrome and we need to break out and just remove the bad defaults and add in the damn stuff we all know people expect in an editor in 2023 and write it into the tutorial.

Try something like Doom Emacs if you'd like those features off the shelf.
I have looked at Doom, etc. but I'm definitely turned off by the level of complexity of these "distros", especially Doom, which is essentially more divergent from Emacs than Vim. Multi-thousand line config, it's own management cli, documentation, packages, etc...

Since I'm looking to "learn" Emacs I'd love to start with Vanilla and add in things as required as you would with any other editor. Starting with something like Doom makes it near impossible to untangle what is coming from where and trim down to exactly what you want, which is sort of the point of using Emacs in the first place.

agree with that sentiment. unfortunately, you have to bite the bullet and start something of your own, if you want to learn the beast.

thankfully though, most of the stuff that you want to do are just a google search away these days, and presence of declarative package-managers f.e. use-package, straight etc. does lighten the burden somewhat.

you might want to look at: https://emacs.amodernist.com/ which provides a rudimentary configuration generator.

Felt (still am, actually) this problem too. Started with the same approach (Vanilla Emacs) a few years back in order to really learn the ins-and-outs after giving DOOM and others a shot and feeling like I didn't have the faintest what was really going on with all the magic. I somehow did end up falling in love with Emacs again[^1].

Won't lie... there was a fair amount of cursing involved and, despite the love, I wouldn't recommend many to venture down this road[^2].

Now I have gone the literate config way in my dotfiles https://github.com/vidbina/dotfiles/tree/main/emacs and I jump between Cursor (vscode-based), Neovim and Emacs for different tasks on a daily. I also found https://github.com/dustinlyons/nixos-config/blob/main/module... just a few days ago which could be a useful resource when you're building yours up.

> Unsolicited tip: Take it as a hobby! Picked up a bunch of useful learnings from my Emacs experiences (a. literate configs, b. comfort around working with LISPs, c. bigger appreciation for parts of the GNU ecosystem, d. more in-depth understanding of how my devtools work which helps me debug issues in Neovim or vscode when I see them) but still think that I'm cursed by wanting to go down this road so badly. Wish I could just vscode my way through life and build dope stuff, unencumbered!

P.S.: I found Emacs far less painful ever since I started rubber-ducking with ChatGPT about my elisp and configuration problems a few years ago, so now is definitely a nicer time to take the plunge.

1: Used Emacs heavily in college over 12 years ago when I would boot the Windows + Novell groupware school computers into my own Ubuntu config with my Emacs and embedded dev toolchain from my pendrive.

2: The single-threaded-ness and related ocassional unresponsiveness/hangups still grind my gears.

maybe this helps:

"This is a minimal Emacs starter kit. Like, really minimal. Here's the short of the philosophy:

    Focus on using default, built-in Emacs behavior

    Yes, we all love our fancy third-party packages. This starter kit focuses on what is built-in to Emacs. Why? Because there are too many good packages and picking and choosing the best is a joy we leave to the user.

    Explain every customization and encourage modification

    The goal of this starter kit is to encourage end-user adaptation and growth. All of the .el files should be legible and, more importantly, justify in plain English the rationale for adding the configuration they do.

    No magic

    We keep things crushingly simple here. That means no fancy loadable modules or whatnot. Everything is as straight-forward as can be."
https://sr.ht/~ashton314/emacs-bedrock/
:) Hey! That’s my project! Let me know if you have any questions.
I came across this when setting up my new config, thanks for sharing!
I rolled my own emacs configuration for many years, but I've been extremely happy after switching to doom. It includes sane defaults and comes with some special tricks for making startup fast. If there's something that's not exactly what I want, I just figure out how to fix it in elisp and that's where my emacs learning comes in.

You really don't need to build up a config from scratch to get the full power of emacs. Using doom just gets you further along the curve to having the config that you want. You will definitely need to do some further tinkering with elisp to get doom configured "just so" or to implement functionality, and I find that's plenty enough for learning emacs.

>I forgot how absolutely horrible the new user experience is.

It's terrible, but the people in a position to change it aren't new users and they have decade-old configs, so it stays terrible.

Try suggesting making CUA-mode the default (to ease onboarding new users) on the mailing lists or /r/emacs, for example. It's amazing how vitriolic people can be.

> First write a bunch of config to undo all the bad settings and nonsense that comes with the stock editor

I've now used Emacs for 30 year. The only people who have large configs for basic text editing are people who don't understand the first thing about Emacs.

Emacs is not a text editor. It is an elisp environment focused on text manipulation.

For some reason these people are extremely loud and have a lot of blogs.

The only parts of my init.el which aren't stock are those used to setup speciality packages like the tui for connecting to the prod database.

The rest of my code is in packages which do something useful. E.g. local llm integration.

How do you avoid horrible default configurations if not in your init.el?
What are the horrible defaults that you find the most problematic? I've found that the default keys for e.g. movement, saving, loafing etc are very productive, and are at worst not much different in efficiency etc. than any other set of choices you could pick.
I find if pressed, most people can't come up with anything excepting that Windows, Mac OS, and the various window managers all chose poorly when it comes to cut / copy / paste and the fact that emacs uses C-w, M-w,and C-y instead is just too mind blowing for them to comprehend.
The movement keys are the best example of horrible defaults. They're all over the place. There are several good options, but my setup uses IJKL for arrow keys, and a bunch of other movement-related keybinds on IJKL and surrounding keys. That's just one example.
I learn to use the tool at hand.

I don't complain that it's hard to give myself a manicure with a chainsaw either.

I'll assume those 15 years of Vim acquired a lot of stuff in your .vimrc. Stock Vim is similar to stock Emacs (as you concluded), so I don't know about this comparison.

> then do three days of Googling to add basic features like fuzzy finding, LSP, VCS support you would expect to be built in in 2023.

All these things are built in Emacs, except fuzzy finding. For that, you use fzf, just like in Vim.

> add in the damn stuff we all know people expect in an editor in 2023

What did people expect in an editor in 2023? I don't use LSP, popups, fancy themes/modelines, or fancy fonts, and I know many devs who prefer the same, especially experienced ones. We expect the same behavior from the editor in 2023, just like we had it in 2003 and want it in 2033. Also, I know many devs who spend all day making their terminals, editor(s), and window managers fancy to show how cool their setup is. But to each their own, and these things are highly subjective.

Please don't include LSP in fancy things to show off. It's a productivity game changer if you work on large codebases.
YMMV, but I find ctags/global way more versatile (and faster) than LSP, especially if the codebase contains multiple different languages.
> fuzzy finding, LSP, VCS

Unironically get one of those horrid IDE's if you want that crap.

(That said, Emacs has git support out of the box. I don't really use it though.)

Emacs has everything you list (and much more). Builtin, only rnabling needed: version control, lsp support, fuzzy-like search across all things and completion.

External packages expand on the vanilla experience but most of the things are just there. For beginners and pros alike which-key is a perfect place to speed up learning.

New user experience is as scary as it always has been, yes, but there so many great tutorials, docs, videos, books out there. Emacs has a tutorial, a manual and a elisp reference built-in and integrated.

Most of the complaints we see here are just flavours of "why is it not like my favourite editor?!". It feels old and boring by now.

I think it's a valid criticism.

Even with a lot of stuff built in, it's not very accessible and it's a chore to setup some things that could be just a checkbox or something.

True.

Emacs has a different model of configuration. It is natural for people familiar with lisp machines or smalltalk programmers but is alien for the rest of first time users.

But the original comment was not about this expectation mismatch. It listed things that have been around for quite a while and do not even need any extra configuration outside of enabling.

You're not wrong. I seriously attempted to use Emacs for about 5 years (after using it throughout university decades ago), and I got it to about 95%, but got exhausted of it being so fiddly. You can also never get away from the inherent performance flaws (single threaded, doesn't handle large files well), which comes up more than you'd think.

I just want to do my work and not spend time debugging why the latest package update broke my helm/ivy lookup, or why lsp-mode suddenly stopped working with x language server. I swapped to VSCode / Obsidian (to replace org mode) and haven't looked back. I can't even remember the last time I looked at my VSCode config, maybe 6 months ago.

The only thing I really miss are the editing capabilities, using evil-mode and various evil plugins. But coding is only about 10% editing speed imo, so not worth the pain for me.

> I forgot how absolutely horrible the new user experience is...

The bbatsov/prelude project was started in 2011 to help address that problem. I started using it not long after that, as a new Emacs user, and it's been a joy to use ever since.

And by "started using" I mean I forked it on GitHub, stared personalizing, and then merging/rebasing upstream at my own leisure.

https://github.com/bbatsov/prelude

https://prelude.emacsredux.com/en/latest/

From 2011 to present, not everyone in the Emacs community feels bbatsov's Prelude makes the best/correct decisions, but given how long Emacs has been around and how large its community has been over time, what can you really expect?

It's certainly a lighter-weight starter kit compared to Doom Emacs and Spacemacs. (I'm not knocking those projects!). I've also looked at some of the newer starter kits mentioned in other comments here and in previous HN threads; they seem okay to me, just reinventing a lot of the same "wheels" you'll find in Prelude, but in a less refined form... such are the freedoms, joys, and challenges of Free Software.

As others have said, all those features are built in (or are a three-line tweak away). The tricky part is configuring it.

I agree that defaults matter and I would love to see them change. That said, you might like looking at my Emacs Bedrock [1] starter kit. It’s not like other kits like Doom, which act like a distro unto themselves and need fiddling, updates, etc. Bedrock focuses on tweaking default behavior, rather than pouring on package after package. It’s basically all the things that I would make default if I could. There are a few “extras” that provide clear examples of how to configure e.g. language server or evil-mode support.

Let me know if it helps. :)

[1]: https://sr.ht/~ashton314/emacs-bedrock/

If you're not brain damaged from vi use, there is really no problem with the default settings for emacs. Copy-paste using different keys? Well, that's Mac and Windows brain damage, emacs was there first with yank and kill.
Sacha Chua is an undersung emacs hero. She has faithfully published Emacs News for so long, quietly pushing good things forward, quietly helping people understand the weird thing about emacs ... there actually is a "there" there.
I agree. I follow her on X/Twitter to get notifications for her newsletter.
I just subscribe to her RSS feed like a normal person :D
Incredible contributor in both technical and organizational ways. And nice as hell too.
20 year vim user that learnt (and now teaches), just enough emacs for magit to vim users, and I must say I'm impressed with the whole emacs philosophy. Emacs is not an editor, it's a windowing + text editing toolkit. You run your lisp commands on it and modify things on the fly. It's addons before addons were cool lol.
Emacs is the only viable free and open source IDE for Common Lisp. For other languages I use other IDEs.