Short version:
I'm building a new Emacs package: Helix Mode. Helix Mode implements the Helix modal keybindings in Emacs. It's been my daily driver for about a month, and while it still has some bugs, I'm reasonably confident it's in a usable state.
Install Helix Mode in Emacs 30.1:
(use-package helix
:vc (:url "https://github.com/mgmarlow/helix-mode")
:config
(helix-mode))
Long version:
About six months ago I attempted to set up Emacs on a Windows machine and found it to be an immensely frustrating experience. The default Windows Emacs build works well enough if you don't use any third-party packages, but who is using Emacs who isn't also using packages? Diving into the complexity of setting up my entire Emacs config exposed a reliance on Linux CLI tools that I hadn't installed, and attempting to configure my Windows environment to properly export paths with cygwin/w64devkit/whatever was not going well.
Eventually I gave up and swapped over to WSL, the Linux emulation layer for Windows. For the most part WSL is great, provided you use the terminal. Attempting to use GUI Emacs from WSL results in a Frankenstein-like windowing experience. It kinda works but is far from ideal.
With these frustrations top of mind, I decided to drop Emacs altogether and experiment with a terminal-first workflow. I had already been itching for an excuse to try out Helix and this felt like the perfect opportunity.
As it turns out, Helix is an incredibly capable text editor, if a bit light on the tooling. The vim-ish keybinding scheme is magical once you understand the basics, and the automatic configuration settings for tree-sitter and LSP work amazingly well. That said, Helix is not very featureful and expects a lot of supplemental work done in the terminal. It really needs to be paired with a terminal multiplexer like Zellij or tmux to work effectively.
I settled on tmux and set up a light config that emulates Emacs:
# remap prefix from C-b to C-x
unbind C-b
set-option -g prefix C-x
bind-key C-x send-prefix
# split panes
bind 0 kill-pane
bind 1 kill-pane -a
bind 2 split-window -v
bind 3 split-window -h
unbind '"'
unbind %
# zellij-style pane swapping
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
If you're willing to settle for a minimal text editor that's supplemented with tmux and small scripting languages, I think Helix is incredibly compelling. It remixes the Vim keybindings[1] in a way that makes them far more intuitive.
The principle change is flipping around Vim's verb-object model. In
Vim, if you want to delete the next word, you first press d
(delete)
and followup with w
(word). The idea is that you declare your action
before your intended target, queuing up what you intend to perform
before telling Vim what to perform it on.
Helix is the opposite. First you select your intended target: w
(word). Helix automatically selects the word as the cursor navigates
to it, clarifying the selection visually. Then you perform your
action: d
(delete).
It's kind of like Helix is operating in a permanent, automatic visual mode. In Vim, I often found myself resorting to visual mode because I didn't inherently trust my muscle memory to select the appropriate selection before performing a deletion. This is problematic because Vim's visual mode makes everything less efficient. Here's how you'd delete with visual mode:
- Press
v
to enter visual mode. - Press
w
to navigate word. - Press
d
to delete.
The funny thing is that visual mode makes Vim function like Helix, but requires an extra keypress for every action. In Helix, the selection is automatic so you don't lose any street cred.
Back to Emacs
Despite enjoying the Helix + tmux workflow, in the last couple months I've come to miss some of the niceties of Emacs:
- Built-in diffing tools like
vc-diff
are really nice, even if I prefer the git CLI for most everything else. project.el
is unbeatable. Helix doesn't have a concept of workspaces, nor does it allow global search & replace likeproject-query-replace-regexp
.- Helix only recently got a proper file navigator but it hasn't yet been released. I doubt that it will be as useful as dired.
- Emacs remains the king of Lisp editing (shoutout to the 2025 Spring Lisp Game Jam where I'm using Fennel & Love2d).
And so the idea for Helix Mode developed. It's easily my most ambitious Emacs package, both in lines of code and functionality. But it brings all of my favorite pieces of Helix into the Emacs editing experience.
Helix Mode isn't designed to re-implement all of Helix, nor provide
the extensibility of the venerable Evil Mode. Instead it's aimed at
the subset of Helix keybindings responsible for editing and
navigation, leaving everything else to the responsibility of
Emacs. That means you'll still be using stuff like M-x replace-string
or consult.
What it does offer is the same object-verb navigation as Helix,
complete with automatic selections. It also includes some of the Helix
sub-modes, like the Goto mode that provides go-to definition (g d
)
or the Space mode that allows navigation across a project
(SPC f
). Both of which integrate with project.el
and xref
.
If I haven't bored you with the details of my text-editor dabblings over the past six months, I encourage you to check out Helix Mode. I have a long list of features and improvements that I'd like to make before the 1.0.0 release, but I think it's currently in a very usable state.