Here’s the deal: Emacs keybindings make my fingers hurt. I don’t think I ever experienced RSI before I started using Emacs. I guess I’ve been using Emacs for about 6 years. I’m very efficient with it. I can edit almost as fast as I can think, my fingers never need to take a break. But that efficiency comes at a steep price, I feel.
I hypothesize that chords are to blame, and that I would be happier and less achey if I used a modal set of keybindings, like in Vim, in which every key binding is a single character. Not all the keybindings (e.g.
$) are a single key press, but most are.
evil-mode, and it’s pretty poor. It doesn’t provide a proper mapping to Emacs; hitting
$ doesn’t actually execute
move-end-of-line, it executes
evil-end-of-line, which does not integrate with existing modes well at all. It’s catering to Vimers, but it’s not good for Emacs power users.
I suspect that I would like to have a global modal switcher that will make
M- implicit somehow, so that
a SPC e w is equivalent to typing
C-a C-SPC C-e C-w. Before sitting down to develop such a system, tackle the problem of how to start and exit the mode, and how to deal with the meta key, I thought I would collect some statistics. (And actually there are systems like sticky keys or chords for Emacs for tackling stuff like this, so it’s not a scary, new area.)
What I wanted to prove (or collect evidence for) was:
I already had a trivial script to print key presses for screencasts, so I modified that to also store the time and mode in the buffer, and I opened a
keys.log file to which I would save the key presses for a day.
I then whipped up a script to read in those statistics and print out a summary, to (hopefully) provide evidence for the above claims.
The output is the following:
Recording start/end: 2013-08-07 09:52:23 UTC/2013-08-08 07:54:23 UTC
Time spent: 22 hours (not 100% activity)
Total key presses: 29687
Commands (including character presses): 22657
Single-key commands: 16457
C- or M- commands: 6200 (27.36%)
Runs of (consecutively) unique C-/M- clusters: min/max/avg/stddev: 1/45/2.25/2.52
Runs of non-unique C-/M- clusters: min/max/avg/stddev: 1/189/3.35/7.04
Key presses used on C-/M- commands: 13230 (44.56%)
Runs of C-f/C-n/C-p/C-b: min/max/avg/stddev: 1/39/2.96/4.63
Key presses used on C-f/C-b/C-n/C-p: 4572 (15.40% of all key presses, 34.56% of C-/M- command key presses)
Top commands used: 1 | 750 | C-n 2 | 716 | C-p 3 | 355 | C-f 4 | 341 | C-/ 5 | 335 | C-b 6 | 259 | M-DEL 7 | 248 | C-z 8 | 245 | M-b 9 | 231 | C-e 10 | 221 | M-p 11 | 193 | C-d 12 | 189 | M-f 13 | 157 | C-s 14 | 145 | C-M-u 15 | 142 | C-g 16 | 136 | C-a 17 | 117 | C-y 18 | 109 | C-x C-s 19 | 107 | M- 20 | 92 | C-SPC
C-SPC C-a C-w– this would cut the text from the point to the start of the line, that’s a unique cluster.
C-f C-f C-f– move forward three times, that’s a non-unique cluster.
For unique clusters, I’m doing 2.26 commands per cluster. So if I used sticky keys, or a modal switcher, it would not be a gain. E.g.
C f f C vs
C-f C-f is no gain, it’s actually more presses due to having to hit C again.
But in terms of non-unique clusters, there’s a gain at 3.44 commands per cluster. That means
C f f f C vs
C-f C-f C-f, which is one key less pressed. If I’m pressing
9218 keys for
M- commands, there might be a 20% decrease in key presses.
I’d love to see a similar analysis done of Vim. How often do Vim users switch from insert mode to normal or presentation mode? I will continue recording my keys for the next couple of days.
Very interesting is how much I use navigation functions. In reaction to this, I’m disabling those keybindings and switching to arrow keys. And I’ve found
M-e, a more convenient binding for
C-M-u. I will also stop using
C-d and use