致Emacs初学者
需要专门花时间去学的软件为数不多, Emacs正是其中之一. 我周围的好多人在我的”鼓吹”下, 也对Emacs感兴趣起来, 可是不过好久, 就放弃了, 究其原因, 我想是他们对Emacs的认识不够, 或者是学习方法不正确. 在这里, 我想说一下Emacs初学者应该注意的一些问题.
Emacs是什么
首先, 我想你应该要知道Emacs是什么, 不知道的同志请看这里.
为啥要学Emacs
- 赶时髦
那我劝你还是别学了, 学Emacs可赶不起时髦, 用Emacs的人可少了. 我呆过的三个公司, 都是在linux下做开发的, 但每个公司都只有2,3个人用. 我一个同事告诉我, 他认识的人中只有我一个人用Emacs. 而且你不但赶不起时髦, 还很有可能被人”鄙视”. 我曾经向一位朋友推荐Emacs, 说Emacs是一款非常强大的工具. 他使用了后, 告诉我, Emacs太土了, 删之. 看来从古到今, 相貌永远起着不小的作用. 我还有一个同事, 问我用什么工具开发, 我说用Emacs, 他说, 太土了, 远古时期的工具, 用Eclipse吧. 我当时只有一种感觉, 我比窦娥还冤. 本曾想他夸我一句, “You are cool!”, 没曾想, …, 伤心往事. - 装酷
嗯, 首先得承认在这个大环境中, 用Emacs确实很酷. 在这个菜单很少, 鼠标动作很少, 没有漂亮的界面, 只有一个黑乎乎的文本框的软件里, 完全用键盘操作, 多酷多拉风啊. 可是, 酷虽酷, 可不是一时半会能学会的, 得花时间去学, 得有毅力, 如果你没有这个毅力的话, 就此打住. - 想在特定语言的功能方面超过特定IDE
比如, 你想在java语言方面, 针对java的特有的功能这一方面, 你想使用Emacs超过Eclipse, 那Emacs不太适合你. Emacs的年龄很大, 比我们这些年轻人的年龄都要大, 好多高级功能, 比如Eclipse的代码重构, 它就没有. 一般IDE都有的代码补全, 代码浏览, Emacs在这方面也做的不是很好, 当然这些方面, 都会有的, 因为Emacs的扩展性实在是太强大了, 任何人都可以扩展它, 那些功能只要用户需求大, 最终会有人写的. 既然这样, 那么Emacs的强项到底在哪里呢?
Emacs的强项
- 无限的定制性
萝卜青菜, 各有所爱. 人与人之间的习惯差别太大了. 一款工具怎么能适用所有人? 那可定制性是必不可少了. Emacs在这方面做的非常出色. 你可以对任何选项进行定制, 你可以定制任何按键, 你可以。。。. - 无限的扩展性
如果你使用了一款扩展性不强的软件, 如果没有别的软件中某个特别好用的功能, 那么你只有期望软件作者能为你开发这一功能了. 如果用户都希望有这个功能的话, 也许你不用等多久作者就为用户开发了那个功能了. 但是如果只是一个你觉得好用的功能呢? 那怎么办? 恐怕作者不大可能为某个特定用户开发特定的功能. 这时候, 扩展性显得多么重要. Emacs在这方面也做的非常出色. 它以强大的Elisp语言作为扩展语言, 扩展性远远超过几乎任何一款软件(包括vim).
Emacs适合哪些人
- 有区别于别人的使用习惯, 有一些自己的, 软件作者不会帮你实现的需求的人
- 喜欢追求高效率操作的人. 如果你喜欢用鼠标点来点去, 如果你喜欢按那些难用的功能键, 那就不用再看了, Emacs不太适合你.
- 喜欢折腾的人. 用Emacs是需要折腾精神的, 如果你是一个懒人, 不太想折腾, 恐怕Emacs不适合你, 想用Emacs不折腾, 不大可能.
在什么操作系统下使用Emacs
Emacs支持众多的操作系统, Windows也在其中, 但是如果想发挥Emacs的巨大威力的话, 建议你还是不要在Windows下使用Emacs, 说的不好听点, 在Windows下使用Emacs一是折磨你自己, 二是糟蹋Emacs, 因为Emacs用到好多第三方的工具, 比如w3m, 在*nix下安装都非常方便, 在Windows下都比较麻烦, 而且有的工具干脆就没有Windows版本. 我见到好多Emacs的初学者, 由于不熟练*nix, 选择在Windows下折腾Emacs, 什么HOME问题, 什么字体问题啊, 简直就是折腾不完的问题. 要是真的想学好Emacs的话, 必须要学好*nix, 而且这么好的操作系统, 熟练使用它也是一件幸事.
从哪开始
如果你能通过上面几条, 恭喜你, 你可以开始你的Emacs之旅了.
那么到底怎么学习Emacs呢? 我觉得刚开始学习Emacs的时候, 应该先了解一下Emacs的一些基本概念和基本知识(毕竟Emacs和其他的IDE的一些概念和理念是不同的), 比如, Emacs的buffer, window, frame, mode, Isearch. 知道这些最基础的概念之后, 应该再学习一下最基本的定制知识, 比如绑定快捷键啊, 定制选项啊, 还有看文档的方法, Emacs中的文档有函数自己的文档, 还有强大的info系统. 关于这些基础知识, 我推荐你去看《学习GNU Emacs》(中文版, 英文版)这本书, 非常适合初学者. 不过如果你想要快速入门的话, 可以看Emacs快速指南, 打开Emacs后, 按C-h t即可, 这是Emacs内置的文档, 有中文版. 笔者还写过一篇介绍这方面基础知识的文章, Emacs初学者必知必会, 感兴趣的读者也可去看看.
Emacs的考验
你现在是不是有点不想学Emacs了? 为啥?
- 按键难按
太冤枉Emacs了, Emacs的按键是最好按的, 你最好先把你的Control键和Caps lock键交换一下。
最常用的是两个键的按键, 分别为Control和Alt键开头的, 其次是四个按键中的有两个按键为Control键的, 为啥四个按键比三个按键还好按? 比如C-x C-c, 这个是Emacs的退出键, 当你按C-x C-c的时候, 不需要先按C-x, 然后手拿起来, 再按C-c, 这样按当然难按, 你应该在按完C-x后, 按Control键的那个手指不需要厉离开 只需要用另外一个手指去按c就行了, 是不是只相当于按了三个按键? 你现在试试, 是不是更好按了些? 你再多试几次, 是不是非常方便? 是不是比两个键的按键差不到哪去?
Emacs的按键设置的非常合理,默认的按键离键盘中心都很近,手指基本不需要离开键盘区,比windows下的按键不知道要好按多少倍,windows下的快捷键基本都是Control,Shift,功能键组合,须不知功能键离键盘中心那么远,多难按阿。
个人觉得Emacs的按键也比vim的按键设置的合理,虽然vim的按键非常短,但是都是特别难按。比如回到行尾的$,回到第一个非空白字符的^,还有删除一个单词dw,试想阿,你如果想删除一系列单词怎么办?难道先要数数要删除多少个单词?然后用dNw?太慢了。要么就dw,dw,dw,。。。,按N次,这样就需要按2N次键,但是在Emacs下删除一个单词是M-d,你只需要按着Alt键一直不放,然后不停的按d就可以了,仅需要按N+1次键,方便之极。诸如此类的还有很多。所以如果你仅因为vim按键比较短,而转去学Emacs的话,趁早回头是岸吧,不要被短的按键迷惑了。我一个同事就这样被我从vim阵营拉过来了,:)
其实上面所说的vim按键的那个问题, 可以通过”.”来完美的解决. 但是其他的问题, 可能就稍微麻烦了点, 比如vim编辑的时候要不停的在编辑模式和命令模式来回切换, 当然可以通过映射来做到不切换, 但是映射的键太多, 而且映射完, 按键也基本和Emacs的差不多了,
- 平时工作太忙, 没时间学, 以后有空再学
别再有这种想法了, 你会永远没空. 明日复明日, 明日何其多啊. 你什么时候工作会闲下来? 公司辞退你的时候吗? 我认识中的人中, 好多人一开始都对Emacs挺感兴趣的, 最后都是因为没时间, 与Emacs无缘. 现在的人, 有哪个不忙? 时间就像***(此处已被宇宙第一帝国FFF工程抹去数字,详情请致电FFF工程总部热线444-54545444), 挤挤总会有的. 要是真想学Emacs的话, 要加班去学Emacs. 等了解完Emacs的基本概念和基础知识后, 要在工作中去用Emacs, 不用Emacs你永远也学不会Emacs. 在用的过程中, 碰到问题, 晚上再继续学. 长此以往, 岂有不熟之理. 我都是靠晚上加班来学Emacs的.
如果你真的想学Emacs的话, 不要再找借口了. 一失足成千古恨, 再回首已百年身啊. 趁年轻喜欢折腾, 多折腾折腾, 不要等到老来少年之狂已成往事之时, 追悔莫及啊. 我以前的一个同事,他以前的公司同事都用vim,所以也用vim,自从我向他介绍了Emacs后,开始学Emacs,一开始也没觉得好用,但是他坚持下来了,越用越好用,最终觉得Emacs太好用了。他是第一个我传道Emacs成功的对象,:)。
其实学习Emacs是有捷径的,那就是天天用。一定要坚持用,不要说你工作中用不到Emacs,不可能,Emacs啥都能干,开发,文本编辑,日程安排,收发邮件等等,你说你会用不到?你这些都还没熟悉?没关系,边学边用就是了,坚持下去,你就会发现用的越来越顺手,越来越喜欢用,这时候你就成功了。
Emacs进阶
当你掌握了上述的基本概念和基础知识后, 恭喜你, 你将开始初学者的第二个阶段.
接下来, 你可以去网上找一些牛人的配置来看看, 比如王垠(清华的退学博士, 很佩服), 叶文斌(他的主页不在了, 我备份了一份), 王纯业(他的主页也不在了), pluskid(浙大的牛人, yasnippet的作者). 我刚开始学Emacs的时候, 基本上也是看他们的配置. 看到别人的配置中比较有意思的地方, 你再拷贝到你的配置中, 这样看多了, 你就慢慢熟悉Emacs了. 但是我建议不要直接拿别人的配置文件来使用, 毕竟别人的配置是别人的, 它包括了别人的使用习惯, 不一定适合你. 我的配置中就改了一些Emacs基本的快捷键, 比如`C-k’我改成了删除一行, 而不是删除光标到行尾, 这也许不适合你. 当然我对于那些尽量能提供给别人的配置我是单独拿出来做成一个包的, 比如我的颜色主题color-theme-ahei, 还有dired-lis(这是一个使得你在dired中直接输入字母跳到对应文件的包, 就像Total Commander中那样, 非常的好用). 你可以去直接使用这些包, 再经过你自己的配置, 就为你所用了.
初学者在配置Emacs的过程中, 我相信经常会遇到加了某个配置后, 以前某个能用的功能现在不能用了, 不用着急, 我有三条妙计为你排忧解难:
- 当你的配置出现问题时, 在Emacs启动命令后增加参数”–debug-init”, 这样启动后, 如果配置出错, Emacs会报出具体出错的位置, 这样你就可以很容易定位问题了.
- 上述加参数的方法, 只适用于你的配置使得Emacs启动出现错误, 但是如果Emacs启动没有出现错误, 但是你需要的某个功能就是不能正常使用该怎么办呢? 很简单, 把你的配置用版本控制工具管理起来, 我的配置DEA就用svn管理起来, 记住, 用版本控制工具的时候, 一定要记得写日志, 方便以后出问题的时候, 容易找出问题, 我接触的人中, 好多人都没有写日志的习惯. 当你现在的版本出现问题时, 你可以看看以前的版本有没有问题, 找到一个没有问题的版本, 然后再用现在的版本和以前的版本比较一下, 看是修改了哪些配置, 然后再在这些配置上集中找问题.
- 如果你嫌版本控制麻烦, 或者出问题的版本和不出问题的版本之间的差别很大的话, 还有一种方法. 排除法! 即不管你有多少条配置语句, 我一个一个的排除, 我先去掉第一条语句, 看有没有问题了, 没有啦? 恭喜你啦, 你试一次就试出来了. 还有? 也不用担心, 继续试. 你是不是觉得我这个方法似乎太傻了, 对于几行的配置文件, 这样是管用, 那么对于几百行, 甚至上千行的配置文件怎么办? 一个一个的排除? 太慢了吧? 别急, 我有二分调试法为你降妖附魔.
二分调试法
什么是二分调试法? 名字很酷吧? 我自己取的,
二分调试法首先本质上也是排除法, 其次, 二分嘛, 肯定与二分搜索有关系嘛, 对头, 它就是利用了二分搜索法的算法思想. 假如对于64行的配置文件, 现在出现某个问题了, 我首先把后面32行注释掉(用(when nil)注释, 方便快捷), 看看有没有问题:- 没问题? 太好了, 那问题肯定是出在33行到64行之间, 继续二分, 把刚才的注释取消掉, 把48行到64行之间的代码注释掉, 继续判断.
- 有问题? 同样太好了, 那问题肯定是出在1到32行之间, 继续二分, 把刚才的注释取消掉, 把16行到32行之间的代码注释掉, 继续判断.
经过以上递归判断, 最终肯定能找到问题所在. 好多问题我都是靠这种方法解决的.
二分调试法效率如何
二分二分嘛, 当然也和二分搜索法效率一样的了, 复杂度lgN, 所以甭管多大的配置文件, 二分调试法一会就能帮你找到问题所在. 100万行?哇,好大,20次搞定!算法的威力强大吧?!
适用于其他语言吗?
当然适用
注意事项
你不会傻的真的完全二分吧? 二分的时候对于代码块, 比如for, while等要放在一起, 不能分开.
成为Emacs高手
经过上述的锻炼, 我相信你现在应该可以熟练的使用Emacs了. 但是还不够, 为什么还不够?
- 遇到问题怎么办
除了Google, 或者向别人请教之外, 能不能自己来解决? - 想要实现一些Emacs没有的功能
这就需要你懂Elisp语言了.
学Elisp主要是看文档(废话), 一个是Emacs函数的自文档(M-x describe-function, 默认按键绑定是C-h f), 还有更强大的就是Elisp的info. 英文不好的同志(其实Emacs函数的自文档和info的英文都很简单)可以看看叶文斌的elisp教程,《GNU Emacs Lisp编程入门中文版》. 刚开始学Elisp的时候, 可以先看看上面的2个中文教程, 系统了解一下Elisp, 看了差不多后, 可以开始看看Emacs函数的自文档, 自文档非常的方便, 可以在看代码的时候, 随时遇到不懂的函数随时查看文档. 我写了两个查看Elisp自文档和代码非常方便的包, find-symbol, describe-symbol, 看Emacs的代码和别的插件的代码也是一个非常好的学习Elisp的方法,有兴趣的同志可以试试. 等到自文档看的比较熟练后, 可以看info了, info写的非常详细. 当然, 以上过程, 并不一定要循序渐进, 你也可以在看自文档的同时, 看看info.
高手之后
哈, 为Emacser们多写点方便实用的Elisp包吧!
Emacs学习方法总结
- 天天用 太重要了
- 多看文档,包括Emacs的自文档和info,info有Emacs的info和Elisp的info,info非常非常之详细,想要学好Emacs必须要看的,不要怕英文,我的英文也不好,经常看就明白了,而且还锻炼了自己的英文,还有自文档和info的英文真的是很简单。

loading...
记得刚开始用emacs时,总感觉emacs的按键太难按了,后来看到了这篇文章,将capslock 与ctrl 互换后才发现emacs的按键还挺好按的。
[回复]
ahei 回复:
五月 31st, 2010 at 10:20 上午
@xilbert, 恩,换了会好很多的,免得有些键比如C-r C-e, C-w C-q都不是很好按
[回复]
兄台对emacs的热爱,在下深敬重之,也不是想跳起什么争论,毕竟emacs是神用的编辑器,vim是编辑器之神,这就差了一个档次,但是阁下对vim的贬斥我以为有些过了,
所谓dw的问题,如果把对不同键位使用计入击键的话,那么n+1肯定漏掉了alt,而vim下大名鼎鼎的’.’ repeat键也不是什么晦涩的技巧,应该算作真正的n+1,而况,如果真的这么干,在vim world里也是会被鄙视的,vi中强大的范围选择,不仅是用来选择的,如果你想删除n个词的话有很多种方案可以选的,比如
数学很好:删掉93个单词 93dw/d93w (这也可算作灵活性吧)
结尾:d$
快到结尾了:d$, 剩下的你自己再补回来就是
某个特定的字符:比如大写的O,数字9什么的, dfO, df9, 如果第三个A,第4个9, d3fA, d4f9,如果是反向删呢,dFO,dF9, d3FA,d4F9,当然了,)],空格都没问题,我用得最多的还是空格,因为词的计数很麻烦,尤其各种字符混杂的时候,不太现实。
删除特定的范围,比如()什么的,这个时候,只要你站在排头( ‘(‘那里), d%就好了,可是这样也并不方便,有时候你正好不在那个位置,回去还很麻烦,比如一堆表达式嵌套,这个时候a和i就派上用场了,da(/da)整个()内都没有了,di(/di)呢,internal啊
所以外壳还在,只是里面的内容没了,清理函参的时候特别方便,不只是(, [{>’”都没问题,
还有不少呢,比如从当前位置一直删到某某行,或者直接删去若干行,
除了d,还有c呢,如果你删完了想直接进入插入模式的话
…
不赘述了,毕竟vim只是编辑器之神,虽然不用,对emacs也还是要膜拜的,毕竟,用的是Moolenaar的工具,承的是RMS的道
[回复]
ahei 回复:
六月 24th, 2010 at 1:33 上午
呵呵,你没看完全文吧?
[回复]
mono 回复:
六月 25th, 2010 at 2:37 上午
@ahei,
全文是指整个系列么?
不过应该猜到早就有人不满了^_^
你提出的ab ab ab … ab,除了编程语言,谁也没有这么智能确定地删除第几个,不过fish说得不错,才曹
操作时有语义的, 移动、查找、操作,这三者你尽可以随意组合,比你按着alt移动好多了吧,
实际使用中,你提出的这个例子很极端,很罕见,但是操作到确定的几个词,第几个,/;的位置,
第几个空格或空行,某些符号配对才是更加有用的做法,这些在vim里操作键盘次数和单个词的
操作并无显著差异,可以说,击键次数是O(1)的,所以,我赞美emacs,却也不能容忍对vim在
操作性能上的批评
[回复]
emacsilove 回复:
六月 25th, 2010 at 7:10 下午
@mono, emacs是神用的编辑器,vim是编辑器之神,这就差了一个档次
呵呵,首先我们先假设一个前提是上面那句话是正确的,那么
从这句话看来应该是vim比emacs牛逼.
首先,emacs是神用的编辑器,说明神会用它,但是用编辑器的并不一定就是神.
其次,emacs是神用的编辑器,但并不能说明emacs是编辑器之神
再次,vim是编辑器之神,不能说明神就一定不会用它,也就是不能说明用vim的一定不是神
最后,vim是编辑器之神,没啥说的了,就是编辑器之神
总结了一下:emacs即不能保证使用者是神,也不能保证自己是编辑器之神
但是vim虽然也不能保证使用者是神,但是至少能保证自己是编辑器之神
结论是vim略胜一筹,哈哈
纯属搞笑,纯属搞笑
[回复]
xilbert 回复:
六月 25th, 2010 at 10:53 下午
@emacsilove,
貌似你已经默认了一个前提——神是存在的。
[回复]
emacsilove 回复:
六月 26th, 2010 at 8:02 上午
@xilbert, 呵呵,是啊,如果神不存在,我假设的那个前提就不成立了.哈哈
[回复]
争吵到此为止了,你似乎说过,学emacs的肯定研究过vim,反之则不然,这点我深以为然(我也很略微地看过,以当时的理解水平,不太满意emacs的击键),不过看阁下对vim的理解,似乎也和并不高过反例许多,两者都是高过世间凡品太多的东西,其优点是毋庸置疑的,比较争吵也是在所难免,究极的强大,emacs不遑多让,灵活快捷,vim不做第二想。
然而,争论中前行,识其所短,赏人之长,才是应有的气度,不然,不过是工具的傀儡,愿与兄台共勉
[回复]
用了几年vim,想转到emacs上了,理由只有一个–lisp
若说操作的简便性,打死我也不会转过来
[回复]
ahei 回复:
八月 7th, 2010 at 3:31 上午
@newsky, 我想正是由于有elisp, 才使得你可以在Emacs里面任意定制和扩展, 才使得Emacs非常方便的
[回复]
newsky 回复:
八月 10th, 2010 at 4:44 下午
@ahei,
确实是,原来用vim的时候总想学一下它的脚本,好扩展自己的功能,但总感觉vim脚本的语法太偏了,学了也只能用来搞vim
emacs这点就太强大了,可以用一个完整的语言来扩展,而且以前在哪本书上看到来着,一个真正的程序员需要掌握6中编程范式,函数式就是其中一种
[回复]
我喜欢这样的传教贴 原因是有lz这样热情无私的传教士
[回复]
ahei 回复:
八月 17th, 2010 at 7:18 上午
@, 呵呵,也希望你们能传播我这片热情
[回复]
vim中度用户…
不满意vim的调试等ide功能(不过最近整了个pyclewn感觉还不错),所以来学习emacs
稍微学了一下,按键不是个小问题,经常别到手指,如果编辑量比较繁重的话,用emacs可能会手酸,这点vim就有点优势了。
可能是elisp比较强大的原因吧,插件都挺nb的。
[回复]
ahei 回复:
八月 21st, 2010 at 1:08 下午
@ofan, 可惜我还没体会到vi编辑的强大啊,虽然确实一直听说它编辑功能很强大,自己也一直觉得Emacs的编辑功能挺好用的
[回复]
ofan 回复:
八月 21st, 2010 at 1:17 下午
@ahei, 额 回复的好快… 这个回帖时间是不是不大对啊…
[回复]
ahei 回复:
八月 21st, 2010 at 1:28 下午
@ofan, 这个这个….,绝对是对的,咱们网站的服务绝对周到,呵呵
[回复]
ofan 回复:
八月 21st, 2010 at 1:33 下午
@ahei, 现在是晚上9点半啊,我这显示是下午一点半,难道你在国外?
[回复]
ahei 回复:
八月 21st, 2010 at 1:39 下午
@ofan, 本站服务器在美国
[回复]
Vim是有一个visual模式的,你可以按v,然后就不停地w吧,最后按一下d就一起删掉了,emacs和这个相比也没方便多少。
[回复]