Skip to main content
  1. Posts/

Why I switched to Neovim from Emacs

·1328 words·7 mins·
Neovim Technology
Joshua Blais
Author
Joshua Blais
Table of Contents

At the beginning of this year, I aimed to simplify many of my processes so that I could focus on the things that I actually wanted to do with a computer - namely build things efficiently and quickly. This included a move from Arch to Fedora, bringing back cli to the forefront in all that I do, and yes, switching out my beloved emacs for Neovim.

About six months into the change, I am not looking back, and here is why.

I will preface this with the fact that people are probably asking “Why, isn’t emacs everything you wanted? You wrote a book in it for crying out loud!”

To which I would say

“It was… almost.”

There were some minor annoyances with emacs that by themselves were not enough to push me away, but combined they were enough to give me wandering eyes. Neovim added lua support in 2019 - while previously I was still using vanilla vim (and vimscript), so this was enough to make me have another go.

Neovim, too was a bit more community orientated than vanilla Vim, and that community and userbase was a big part of my decision.

But I am getting ahead of myself!

Let’s discuss the reasons that I left Emacs for Neovim.

I have always been a “vim user”
#

I never fully integrated into the emacs world in that I was originally a convert from Vim in the late 2010’s. I used evil for the whole time I was an emacs user, and very seldom used the native emacs commands. Doom Emacs made the use of emacs very straight-forward for me.

Vim keys, in my opinion, are the superior way to use a text editor, and that is why I never switched away from them - movement, finding of position, and editing were just more intuitive to me.

Don’t hate the playa.

I even wrote macros in emacs using the vim way of doing so, so I was never a purist. This was the first reason that it was easy for me to look to neovim as a replacement.

Emacs is slow
#

Admittedly, emacs is not so resource hungry with modern computers, but the fact is that in large code bases, I saw it hanging and freezing at unacceptable frequencies. This was the first thing that had me looking elsewhere and my first major annoyance. I understand native compilation may have solved some of these issues in Emacs 29 onwards, but I do not know, someone post in the comments below if so. Note I always ran Emacs in the daemon, and while this sped up start time, the speed within the editor is slower than Neovim (subjectively for me.)

Neovim is far faster for my workflow, and because I have written additional scripts and navigation aliases, as well as use hotkeys to launch the programs that I replaced my emacs use with, it is way faster to get to files and make changes in them, too.

Emacs tries to be everything to everyone
#

This ties into the previous reason: I want programs to do the things they are intended to do, and to do them well. Emacs tries to be everything to everyone, and it is good but not the best at various things.

This is a direct contradiction to the unix philosophy.

The meme of “emacs is a great operating system, it just lacks a solid text editor” is to a degree true - and using it to listen to my music, read my newsfeeds, handle IRC, and do everything was a bit much for me - it was good at this, but not the best program for the job.

Now, if I was forced to use Windows or Mac at work for instance, Emacs would be the solution to the problem of customization and useability for me - I would simply load a configuration onto the base OS and use Emacs as my “OS” for all my day to day activities, not caring about the base OS.

I keep a configuration in my github for this very reason.

But, because I use Linux with a Window Manager and have setup my Zen environment (go watch my previous video on this or read my blog) setup, I have picked and chosen the programs that do each of these things and configured them to my specifications. This is quicker and more intuitive (for me.)

I wanted a terminal centric workflow and vterm ain’t it
#

The issue that I have with emacs is that it is really meant to be a GUI app, and getting it to work over a network (ie. ssh’ed into a server somewhere) is not that efficient. Yes I know tramp exists etc, but in practice I never felt it was as solid as a commandline solution.

I went to a meetup about a year ago where I saw a developer simply ssh into his box at home and run his dev environment from the laptop with everything as he had left it at home on his desktop, and this made me think.

Vterm is not a native terminal, and has it’s flaws (copy pasting, movement etc.) that have always been nagging points for me. Adding tmux back into my workflow made this so much better, and I much prefer tmux for multiplexing, starting up sessions and reloading them with resurrect.

Hotkeys in my window manager work better
#

I have utilities for email, my newsfeed, tasks, etc, and they are quicker to get to than anything in emacs was. Not only this, these apps are easy to take anywhere (newsboat in termux on android for example). CLI apps are a game changer and I don’t see myself returning to anything else truly.

I replaced magit with lazygit, emms with ncmpcpp, erc with weechat, and MU4e with Neomutt. All are bound to hotkeys in hyprland.

For example, to get to my newsfeed, I simply hit Alt + Z and there is my Newsboat. Or, to launch my music, Alt + Ctrl + M opens ncmpcpp. These two replace Elfeed and EMMS. I started using IRC on a server instead of logging in all the time, and that is accessed by ssh’ing to the server and attaching to an active tmux session.

Replacing Org-mode
#

I will concede that replacing org-mode is really not so easy. In fact, org was the thing that started me on the emacs train all those years ago.

One can create custom scripts and replicate the functionality, but it is a system that is very good. I have written various scripts to pull in TODOs from projects and allow me to clock in and out on them so I can keep track of what I am working on daily. I have deadlines set up in these TODOs, as well as creating deadlines in a monthly tracking file that resembles a bullet journal setup, but I do miss the agenda, I can’t lie.

Maybe one day I will come up with something that rivals org-mode. Until then, I will be over here with my lowly scripts. I think I’ll build something… (hint)

Neovim development
#

There is a massive ecosystem surrounding neovim and the community is phenomenal. New plugins are coming out all the time, and while emacs does have this development, too, Neovim is head and shoulders above it just because of userbase size and because it is seemingly a bit of a meme in the tech world (although it really is good!)

Conclusion
#

While this is not to knock emacs, I think that neovim has better met my needs as of late, and I will be sticking to it for the forseeable future. Tune in next week when I release my “switching from neovim to emacs” post!

What about you, do you use emacs? Have you made the switch to neovim or vice versa? Post in the comments below.

God bless, and until next time!