ZMonster's Blog 巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟

修改键位+使用smex,告别Emacs小指综合症

Emacs小指综合症

所谓“Emacs小指综合症”,是指由于长期使用Emacs导致左手小指疼痛的问题——嗯,没错,这是我下的定义——英文说法是 Emacs Pinky Problem 。这一问题的根源是因为Emacs的快捷键频繁使用键盘的 ctrl 键,而由于现在被普遍应用的 QWERTY 键盘布局上的 ctrl 键都只能用小指来按下(不过通常Emacser只使用左侧的 ctrl 键),且在按下 ctrl 时小指的负荷很大。

这个问题是Emacs被诟病的几个主要问题之一,不过严格来说,这并不是Emacs的错,因为Emacs被设计时考虑的键盘布局和现在是不一样的,那个时候的 esc 键和 ctrl 键都是在比较舒服的位置的,所以这是个历史遗留问题。

常规解决办法

修改键位或键盘布局

这种办法的核心思想是通过一些措施把 ctrl 键映射到物理键盘上比较好按的键位上。常见的方法是将 ctrl 键和 caps lock 键交换,在Planet Emacsen 上还提到了另外一种办法:将 ctrl 键和回车键交换。

使用正确的姿势

在笔记本的键盘按左 ctrl 键尤其难受,不过在笔记本键盘上,可以通过用手掌根部按压左 ctrl 键来避免使左手小指受损。

不过我并不习惯这种姿势。

使用合理的键盘

使用设计更加合理的、符合人体工程学的键盘是解决这个问题的好办法。这个方法不仅能避免Emacs导致的问题,还能减轻其他因为长期使用电脑/键盘而出现的健康问题。

当然,为了健康而投入资金是必须的。

使用smex插件

smex是Emacs的一个插件,这里 是相关说明。

smex是一个"M-x"快捷键的增强工具,它能够使得在Emacs中调用各种命令更为方便,能更智能地对命令进行补全,还能根据使用者调用命令的频率来猜测用户可能会执行的命令。如下图所示:

2013-12-31-smex-use.png

不少Emacs中的命令名字都很长,所以如果不使用smex的话,一来很多命令根本记不住,二来就算记住了输入时也要花费许多的时间——这也是为什么Emacs有如此多的快捷键的原因之一吧。

smex的使用也很简单,下载smex并放置到Emacs的加载目录中后,在配置文件中添加这么几条语句:

(load "~/.emacs.d/site-lisp/smex.el")
(require 'smex)
(smex-initialize)
(global-set-key (kbd "M-x") 'smex)
(global-set-key (kbd "M-X") 'smex-major-mode-commands)
(global-set-key (kbd "C-c C-c M-x") 'execute-extended-command)

我的办法呢,就是综合键位修改和使用smex两个方案。将 ctrlcaps lock 交换,然后绑定一些(少量)常用的命令到快捷键上,其他大部分的命令调用则使用smex。