Comment by wilkystyle

Comment by wilkystyle a day ago

21 replies

I've recently been on a little side quest to rebuild my editor configurations (20 year Emacs user, 15 year Vim user—in parallel with Emacs because I can't seem to pick a favorite). The goal is to see how quickly I can get to a daily-driving complete setup for enterprise-grade software work largely in Python. My goal for the rebuild is to see how much I can drop as far as reliance on third-party extensions and still have the functionality that I need (or which makes me unreasonably more productive).

My Neovim configuration[0] is currently the best it's been IMO, but I ended up having a few more plugins than I thought I would need.

I am earlier along in my Emacs rebuild, but what is really interesting to me is that there are a lot of improvements in modern versions of Emacs (30+) that dramatically reduce my dependence on third party plug-ins. Eglot has been fantastic for me, as a former long-time lsp-mode user. Completion preview mode is not quite a replacement for corfu, but it's pretty darn good and only going to get better.

So far my list of must have plug-ins for Emacs:

- Magit - Expreg (teeesitter expand region) - Multiple cursors - dape (debugging in coordination with Eglot)

Thinking I will probably end up adding Consult + orderless, too, as that is a search/navigation superpower.

[0] https://github.com/wilkystyle/nvim

edit to add nvim repo link

dannyfritz07 a day ago

Newer nvim is also slowly eating into the plugins needed. There is a built in plugin manager, diff viewer, and lsp now.

  • wilkystyle 19 hours ago

    Yes! I was very happy to see this. It's simplified my configuration a little bit, but there are still some niceties I would consider as necessary in order to be productive, so I am using Mason, mason-lspconfig (automatically configure and use any lsp servers installed by mason), and Blink for fast and ergonomic autocomplete popup.

    IMO Neovim OOB experience isn't quite as nice as what Eglot and completion-preview-mode do for the Emacs OOB experience, but I love that every time I check back in on the latest state of either editor, they are sensibly adding really solid functionality to the core that continuously reduces my reliance on third-party plug-ins!

  • petepete a day ago

    Undotree functionality was recently merged in too.

k_bx a day ago

I'm very interested in reports of 10+ year users of Emacs, how do Helix/Vim compare? I understand reports from zero-to-Helix/Vim users that they're good, but I don't believe they truly understand how great Emacs is unless they really use it for a long time.

But because Vim-like keys and modes seem to be so much better integrated in all other editors these days (no good Emacs mode in VSCode for example), seems like it won, and it'll soon be time to accept that.

But every time I tried – I never had enough patience to use it until my fingers have the memory, and didn't see the point enough to keep smashing the editor.

So, very interested in reports of actual hardcore Emacs users about the switch.

  • skydhash 19 hours ago

    I'm not a 10+ year user of emacs, and have switched from vim to emacs. But here is my 2 cents if you're willing to take it.

    Vim (and variants) is a language for editing first, and an editor second. Most of vim parts from a text editor perspective is found in some way or others in other editors. It's biggest pro is being centered about the vim language of editing. Once you master that, editing is very fast and you can extend the language easily by using external tools. And there's already a good number of integrations through builtin mechanisms and various plugins.

    Emacs is a collections of tools for working with textual interfaces. Where Emacs easily wins is how easy it it is to integrate with anything that plays with text, (which is basically everything). The good part is that every plugin (even builtin one) is a software, a library, and a playground at the same time.

  • landtuna 18 hours ago

    I switched to Helix 2 years ago after 28 years of emacs and didn't look back. My emacs config was huge, and I didn't enjoy all the tweaking I was doing to get LSPs to work the way I wanted. I had tried evil mode (and vile before that) without really getting comfortable. I think the Kakoune-style order clicked much better for me than vi descendants. Also, the multiple cursors in Helix work so much better than the equivalent emacs plug-ins. The only thing I really miss is tramp. I liked magit a lot, but jujutsu obsoleted that for me.

  • wilkystyle 19 hours ago

    For me personally, there's probably too much to put in a comment, but the essence of it is:

    - Vim modes are prolific, but they always fall short in some annoying way (Jupyterlab-vim plug-in is so bad it's almost not even worth considering Vim emulation). I inevitably find myself missing the full power of true Neovim, especially with the live find/replace in the buffer, `:cdo`, and things like `:g//norm` (which could be an entire tutorial in itself!)

    - Emacs: I have never met another editor (or even piece of software) that is not only so customizable but so designed to be customized. It's really hard to capture it in words, but it's such a comprehensive ecosystem of tools that all are designed to work together incredibly well and designed in such a way that when you make your customizations you can do it in a way that everything still plays really nicely together. For example, I can use Tramp to make my local, fully-customized Emacs edit on a remote filesystem as though my local setup is there, any arbitrary number of SSH hops away, even sudo'd to root on the target machine. I can further leverage the built-in /docker: protocol to edit with my local editor, on that remote machine, as root. Eglot plays nicely so my local editor uses remote LSP servers. dired-mode plays nicely so that I can browse and modify the filesystem on the remote target with my local editor. Because everything is nicely integrated together, pressing M-! to run a shell command while editing a remote buffer will run the shell command on the remote target in the same directory as that remote buffer. Similarly, M-x shell opens a terminal window on the remote target, in the same directory as the remote file I'm editing, as whatever user I have sudo'd to (if applicable). And it does everything with pure SSH, no remote daemon needed. And then there is the customization. Vim/Neovim score very well on the customization front, but I guess the way I would put it is that the difference in philosophy is that Vim/Neovim (and most other customizable software) are applications for which the developers give you a ton of APIs to affect the behavior of an otherwise closed system. With Emacs, by contrast, nearly all of the system is open. There are compiled C functions at the core, but anything in lisp is there for inspecting and modifying in real time while the system is running. And for all the things that are compiled that you cannot affect, there are further paradigms such as the advice system, which allows you to modify built-in behavior by wrapping existing functionality with things like pre- or post- actions (among other things too numerous to get into in a comment). emacs is built with the philosophy that there should never be an area of the software that you don't fully own, control, and have the ability to inspect and understand.

    I guess this turned into a classic Emacs-nerd rant about why Emacs is great, but to answer your question the long way:

    There's no Vim like (Neo)vim, and if you are an advanced enough (Neo)vim user, everything else falls short in ways that suck.

    And there is simply no software I have ever come across like Emacs. It takes a lot of work to make it your own, and I totally get that is not for everyone. But if it is for you, everything else is too limiting.

    (maybe to answer your actual question, I've never successfully made the switch. I always come back.)

    • k_bx 13 hours ago

      Thank you for the detailed report!

      Anothing thing from my recent (couple years) discoveries is that emacs is actually pretty good out of the box, so on my servers/containers I just started doing `sudo apt-get install --no-recommends emacs-nox` and use that. The only annoying default is the need to disable the "backup files".

dannyfritz07 a day ago

That is quite a lot of nvim plugins to maintain! I just rewrote my nvim last week with 4 plugins (mini.nvim counts as 1). I feel when I stack up too many plugins the stability and reliability of nvim plummets to an annoying level.

I envy that with emacs you feel you only need 2 plugins. That probably operates with a ton more stability.

https://codeberg.org/dannyfritz/dotfiles/src/commit/b647b440...

jatins a day ago

Not a diss but even after spending O(months) do you think it's as good as what you get with Pycharm + IdeaVIM out of the box?

Of course, there are other reasons to build your own configuration but I found purely from "IDE as means to an end" perspective getting into Neovim rabbit hole is a bit of waste of a time

  • wilkystyle 18 hours ago

    This is a great question! It's also a really hard one to answer.

    When newer developers come to me looking for a recommendation of an editor to use, I don't often recommend Neovim, and I pretty much never recommend Emacs. I do recommend learning Vim motions, however, and my go-to is VS Code with the vscode-neovim plugin (uses actual nvim binary under the hood—no crappy emulation slowness/inaccuracies!)

    For me personally, I've never met a situation where my Neovim or Emacs configuration couldn't handle a refactor or some other thing an IDE does. And then with all the other things like search/navigation (Consult+Orderless in Emacs is unparalleled) and working with files, git, or the filesystem (dired-mode in emacs, Oil.nvim for Neovim)... I'm just so much faster in one of those two editors than I am in any IDE. The ability to do everything you need in a single tool using the same paradigm and keybindings and concepts to get all of it done is pretty powerful.

    I do also have a nervous aversion to using products that are not fully open source. Probably an OCD fear of losing full control over my editing and development experience.

  • maleldil a day ago

    I imagine Pycharm would still be better at refactoring (extract method/variable, in-line variable, etc.) LSPs are good at renaming, but not much else. There's a plug-in, but it breaks very often.

evertedsphere 21 hours ago

> Expreg (teeesitter expand region)

reminds me of combobulate (which i haven't tried but think looks cool) but sounds much more light/limited

  • wilkystyle 19 hours ago

    I think that is an accurate assessment! It's actually the reason I prefer it. I only wanted the ability to expand to treesitter text objects and then contract that selection if desired. I almost wrote it myself but then found that plug-in.

    • tiu 12 hours ago

      Slightly off topic here but do you (or anyone) happen to know how to get old Eglot behaviour back of showing entire types and parameter information instead of only the first line? It has been bugging me whole week and I cannot seem to find any fix for this.

      • wilkystyle 8 hours ago

        Are you referring to the eldoc help text in the echo area at the bottom? Hard to know without more specifics, but maybe one thing to check might be the value of eldoc-echo-area-use-multiline-p. I have mine explicitly set to `nil` because I find the default eldoc behavior of constantly resizing the echo area to fit more information to be very distracting. I instead have a keybinding to call `eldoc` (an alias for `eldoc-print-current-symbol-info`) on demand, which opens a side split that shows the full symbol information.

        • tiu 7 hours ago

          Yes I am talking about the help text in echo area. In newer versions apparently they only show a single line by truncating the eldoc-doc-buffer content(not super sure on this but they do truncate to 1 line). eldoc-echo-area-use-multiline-p does not work for that sadly.

          Apparently this was changed only recently. I am surprised not many people know/talk about this change. Still looking for a fix.

          Edit: I do agree it is annoying but for unknown codebases it helped me a lot.

cmrdporcupine 20 hours ago

BTW it's crazy how good Claude Code is at emacs configuration, and in fact elisp writing in general.

I also switched from lsp-mode to eglot and it's better. Less fragile.

  • wilkystyle 19 hours ago

    > I also switched from lsp-mode to eglot and it's better. Less fragile.

    I agree with this, and it's a big reason why I made the switch myself. I also find myself favoring lightweight (and especially builtin) capabilities, because really large, comprehensive plug-ins tend to have their own paradigms or ways of doing things that break from the super well-designed Emacs system of everything just working together magically.