|
|
我喜爱 Emacs 的强大和灵活,但却不喜欢它复杂的按键。曾经在 Emacs 中试过 Viper Mode,可是它在某些情况下表现得并不好。最重要的一点在于,由于这样结合出来的是一个既不像 Emacs 又不像 Vi (或者说既像 Emacs 又像 Vi)的怪物,经常使人感觉到按键的混乱。我经常使用 C 家族中的语言(如 C、C++、Java),但发觉自己无法使用 Emacs 的按键来达到在 Vim 中的编辑速度。经常出现的情况是,头脑中有了一个修改代码的想法,却无法很快地用键盘定位到要修改的地方,就是手的速度跟不上大脑的速度。这样,在 Emacs 中的效率比在 Vim 中的效率大大下降。
好在 Emacs 的键绑定非常灵活,我总结了一些常用的命令,并在 CC Mode 中重新划分了快捷键。自己尝试了一下觉得还可以,于是写在这里了。
把下面的代码加到 ~/.emacs 中。
- (defun my-c-mode-common-hook ()
- (c-toggle-auto-hungry-state)
- (local-set-key (kbd "M-<DEL>") 'backward-kill-sexp)
- (local-set-key (kbd "M-d") 'kill-sexp)
- (local-set-key (kbd "M-b") 'backward-sexp)
- (local-set-key (kbd "M-f") 'forward-sexp)
- (local-set-key (kbd "M-n") 'c-end-of-statement)
- (local-set-key (kbd "M-p") 'c-beginning-of-statement)
- (local-set-key (kbd "M-a") 'beginning-of-defun)
- (local-set-key (kbd "M-e") 'end-of-defun))
- (add-hook 'c-mode-common-hook
- '(lambda ()
- (my-c-mode-common-hook)))
复制代码
主要解释一下 my-c-mode-common-hook 中的内容。c-toggle-auto-hungry-state 在 Emacs 的手册中有介绍,这里就不说了。后面的 8 对快捷键是我认为的在 C 家族程序中最常用的移动命令,通过重新定义它们到更简单的按键组合,手的速度便可以跟上大脑的速度了。不过这样做有一个缺点,就是它破坏了 Emacs 里在所有格式的文件中都可以用一种方式移动光标的优点,不过如果一个人因为习惯了它们而使效率上升,这也没什么了。不要忘记,通常人们在有灵感时都希望快些看到结果,并且人们在编写程序时比编写文档时对高效有更高的期望。
前四个快捷键都和相对单词的操作有关。在默认的情况下它们的配置是(按照与上面相同的顺序):
- backward-kill-word
- kill-word
- backward-word
- forward-word
复制代码
不过这经常不是我们希望的,比如 size_t 按照默认的方式就被解释成两个词 size 和 t,这样就需要按两下键组合才可以完成操作。默认提供了 C-M-b 和 C-M-f 来移动到前一个和下一个完整的表达式,不过这个按键太麻烦了。这四个快捷键都是为了减少对应情况里的按键。
后两对快捷键用于快速移动。
对我来说,上面这些移动的组合比 Emacs 中默认的好,因为它们提高了我的效率。显然,它们覆盖了我在像 C 这样的语言的程序中最高概率的按键。每个人都有自己的喜好,由于 Emacs 强大的特性,每个人都可以调整出自己最喜欢的设置。但正如 Vim 的作者 Bram Moolenaar 所说的,如果提高效率是最终的目标,一个人必须“练习使用这些操作对应的快捷命令,直到他可以不假思索地使用它们”。于是高效编辑需要磨合编辑器,这正是 Emacs 提供自定义设置的目标。 |
|