Meow is a modal editing package for Emacs. It’s founded on the principles of simplicity and minimalism, and has recently been heralded as a replacement for
Evil. The editing grammar is “backwards” from vim’s verb-(preposition-)-object style, with an implicit region upon which all key commands operate. It also tries to simplify a couple other things, which it mostly succeeds at.
Because I was kind of bored. Or rather, I had hit a wall with Evil.
I simply added this block:
(use-package meow :init (meow-global-mode 1))
, and then ran
well, truth be told I'm lying
Yeah, turns out that Meow doesn’t map any keys by default, so the tutorial shows them all as M-x commands. In order to practically use Meow, you have to copy a big old snippet of
(meow-normal-define-key) into your config before turning on
meow-global-mode. There’s a big block of bindings optimized for QWERTY keyboards, so I just pasted that in.
Once that was taken care of, I re-ran the tutorial. It’s clearly modeled after the Vim tutor, but that’s not at all a bad thing.
Some good before the storm
Meow is fast. This is the sort of thing you don’t notice until moving back to the old ways:
keypad-mode is perfect.
keypadis a feature of Meow that removes the need to chord any modifier keys. It is the simplest practical distillation of SPC leader-key binding, as shipped by Spacemacs and Doom. Instead of creating complicated nested keymaps, meow just takes the native Emacs bindings as they exist, and streamlines them uniformly. For example:
C-x ssaves the file. With meow enabled, that becomes
SPC x s. Likewise,
SPC m x. This is objectively the right way to do this.
Meow is visually modern. When you search for a word (“visit” in meow’s terminology), it reads from the minibuffer, and the match is highlighted. Not only that, an overlay appears at the end of the line with a counter for which instance of the word it is (for example, [5/13]. When you do an operation like selecting a word or line, numbers pop up on the next 9 of those units, which you can type for a repeat action.
<escape> are different keys. This has never been a problem before - Evil just treated them as one, like a normal person. But
ESC (so far as I can find) is the same as
C-[ which is how TTY emacs simulates the
Meta key. And GUI emacs also enables it just in case. And lots of built-in features bind to it. Again, Evil seems to override this completely, to the extent that I never even knew it could possibly be a problem.
My capslock key is bound to
ESC at the display-server level - see my xkb config files for how exactly this works. There are other ways of accomplishing approximately the same thing, but adding an XKB rule was the most portable way of doing it.
If I hit the “real” Esc key, meow understands that. It leaves Insert mode. It cancels the selection. It finishes recording the macro.
しかし, if I hit the more convenient CapsLock key (as I have been doing since before I even switched to Emacs), it starts a key chord in the
ESC- map. Which again is just a Meta-binding but worse and unwelcome.
I tentatively plan to look through the Evil source code and just copy whatever it is they do for this. The blame is hardly on Meow’s shoulders, it’s merely the unlucky messenger.
The freakin' awesome!
beacon-mode is what vim’s visual-block-mode wishes it could be. It’s also the only thing called “multiple-cursors” that isn’t a ridiculous unnecessary mess [more testing is needed, but
replace-regexp can both do the same thing, so there! Checkmate VSCodeTards…].
In practice, this takes some getting used to. I’ve run across a few cases where I wanted to do multi-edits with beacon but couldn’t figure out what keys to press to make it happen.
And also the whole Esc-being-broken thing sort of breaks it.
But still, this alone is what got me to try meow, and hopefully it will push you too.
Needs more than a week to get used to. It’s a language, as much as vi, and much more than most programming languages.
Meow has some great ideas, and it’s pretty solid except for the giant gaping hole of that escape key. But for someone less invested in the Evil way of doing things, it’s probably perfect.
If you know of something I should be doing differently, have a solution to the
<escape> problem, or want to defend the idea of multiple-cursors over regex replace, you can reach me at https://emacs.ch/@mitchmarq42xyz.