vi, Emacs, Keybinding Design

Perm url with updates: http://xahlee.info/kbd/vi_emacs_keybinding_design.html

vi, Emacs, Keybinding Design

Xah Lee, 2011-02-24

fortunatus <daniel.elia...@excite.com> wrote:

You must be a Windows user. You must also not be an Emacs power user, because you think it's acceptable to use the arrow keys as cursors. If you don't, please use C-b, C-f, C-p, and C-n in place of the arrow keys. It dramatically improves speed.

Rafe Kettler <rafe.kett...@gmail.com> wrote:

Don't go down that path: "vi" has a way-better key binding for cursor movement!!

it should be noted, that vi's h j k l is not optimal. Better is


in inverted T shape.

also, note that vi's Esc is FAST route to RSI. See: Left Wrist side-to-side Motion Pain; vi Esc key Syndrome.

also note, emacs keys and vi keys, are not out of much conscious design. Like unix tool bags, they are piled on over the years without much thinking. It was good enough, at the time. In fact, most things in life are like that. They are not anywhere close to optimal in any sense.

Daniel Weinreb, co-founder of Symbolics, alludes to why emacs keybinding is the way they are. Source

Xah wrote:

Emacs's default cursor moving shortcuts are 【Ctrl+f】, 【Ctrl+b】, 【Ctrl+n】, 【Ctrl+p】. The keys f, b, n, p are scattered around the keyboard and are not under the home row.

Daniel wrote:

That's true. At the time Guy Steele put together the Emacs default key mappings, many people in the target user community (about 20 people at MIT!) were already using these key bindings. It would have been hard to get the new Emacs bindings accepted by the community if they differed for such basic commands. As you point out, anyone using Emacs can very easily change this based on their own ergonomic preferences.


This “design” by evolution applies to Keyboard hardware itself. As it is, it's the worst shit possible. It was good enough in the 1970s, where there are just a handful of programers in the world. And today, but vast majority of people (mom & pop, who occasionally chat online or write email), it's good enough! Even for most programers, who's finger actually dance on keyboard perhaps no more than accumulated 3 hours a day, it's good enough! But for data entry clerks, or programers who seriously type a lot or write docs all day, it's hello RSI. That's why we have so many problems on keybinding debates, radical input device designs, dvorak advocacy, and RSI is a serious medical problem. See: Keyboard Hardware Design Flaws.

this also applies to key layouts. e.g. we all know the story of qwerty and dvorak. But in my study, i found that it's just not that. Most international layout are ergonomic garbage. See:

also note, in the programing industry, if there is one software that induces most cases of RSI, it is emacs, by far. See: Celebrity Programers with RSI (Repetitive Strain Injury).

the emacs's keybinding, in my assessment, of all possible keybinding systems one could devise, with the PC keyboard as given constraint, i rate it near the bottom. Better than random assignment, but not much.

One thing damaging is that GNU Emacs has a tendency to refuse change, much like most unix-bag. Emacs's keybinding today is pretty much identical to emacs of 1970s. But, the landscape of computing has changed tremendously in past 30 years.

why most emacs people don't see this but in fact advocates emacs keybinding? My guess is that most people have not studied the issue. There are tens of thousands of things in life, we learned and use daily by habit, but never thought about it seriously. If you are interested, i think if you actually start to study keybinding, say, in the next 30 days, your job is to research keybinding design 8 hours a day for 30 days, i think you'll have a changed view. (no, i don't mean to brag about how many hundreds of software you've used in past n decades. Me too bro. I mean: stop dead and spend 8 hours a day for the next 30 days to do nothing but study keybindings. Yours truely have done so.)

Xah ∑ http://xahlee.org/

✻ ✻ ✻

This article is originally a post in “gnu.help.emacs” newsgroup. For previous 2 articles leading to this one, see: