作者: 陈斌(redguardtoo)
注意: 我会长期维护本文,请参考下面的更新时间
版本号: 20121115
更新时间:
原创时间:
很容易.一年多前我还在Vi阵营,偶尔使用Emacs还总是忘记`退出`(C-x C-c)的快捷键,但是一年后我跨入高手行列.
现在网上很多中文文章都是和你强调Emacs有多牛,以激发你的兴趣.最有名的大概是王垠的Emacs是一种信仰!世界最强编辑器介绍.
这些好文章让你激动,你因此定下来一个伟大崇高的目标(掌握神一样的编辑器Emacs),接下来的关键就是执行了(如何高效地学习Emacs).
国内关于"如何做"的文章不多,那些涉及到"如何做"的文章,涉及细节比较多,而谈一般方法论的较少,所以本文的重点就是谈谈一般方法,
Table of Contents
1 为什么要学习Emacs(可选)
简单谈谈,因为我本文的重点是"怎么做",而不是"为什么".
1.1 和单纯的IDE比较,Emacs可以做的更多更快
这里的更多并不是和IDE比支持某编程语言的特性更多,而是指Emacs内可完成的通用任务比较多更快捷.
例如,我做开发时碰到难题,需要实时上IRC请教国外高手(工作流包括粘贴我的代码到pastebin或者gist,在irc内提问,看网页,将解决方案粘贴回来),emacs集成了IRC工具和浏览器(w3m),操作就很方便.
我使用Visual Studio多年了,Firefox使用我也是高手,相信我,大多数情况下还是Emacs更快.
当然口说无凭,请看以下两段高手操作的youtube视频:
1.2 使用Emacs可以立刻开始工作.
软件是开源的,配置是纯文本,而且软件的资源消耗较小,安装包很小(命令行版本的安装包30M左右),所以在任何环境下我都可以用Emacs开始工作,overhead很小.
这在大项目中特别明显,例如,某项目我需要同时编辑perl,java,C,bash,SQL,需要远程编辑在美国服务器上的代码,网速也不是很快.Emacs的优势就体现出来了.
2 读官方教程
打开Emacs后,按Alt-x,输入help-with-tutorial,回车.
第一步,仅需要半小时.关于Emacs的多难学的谬论可以休矣,因为半小时的代价微不足道.想想你去年有多少小时白白虚度了吧.
4 站在巨人的肩膀上
这方面我是个负面榜样.开始阶段我还是抱着玩的心态,喜欢到处找有趣的配置粘贴到我的.emacs中去.
完全是浪费时间!
我应该一开始就照抄 世界级大师Steve Purcell的emacs配置(注意,Purcell的af5ca840版本支持Emacs23.1及更高版本,在Linux/OSX/Cygwin下测试过,更高版本只保证支持emacs24,因purcell只在mac下用emacs24版本,如果一定要使用emacs23,可考虑我的版本,网址见后文).
我请求你不要重复我的错误,不要质疑,不要创新,跟着Steve Purcell做.
顺便说一下,Steve Purcell的配置需要git才能更新,这意味着你需要安装git和cygwin(限于windows平台).这是买一送二,我又给你介绍了两个高手必备的世界级工具.
考虑到我的热情会被认为是传销,而我的严密逻辑和事实论证可能被忽视,我有必要简单明了地说明推崇Steve Purcell原因:
- 已有很多人推荐他的配置(请google)
- 能力出众,背景相当好(我已调查过他的Linkedin Profile)
- 人近中年,心智成熟(例如,他只在Mac下使用Emacs24,但是能够根据我在Linux/Cygwin下使用Emacs23的需求做调整).
- 工程经验丰富(看他的代码一目了然)
- 勇于求新,不断尝试新插件,在他这个年龄极为突出
以上事实在我给出的网址中稍作调查即可得知.
7 订阅Emacs牛人的博客
最好的是Planet Emacsen,是多个Emacs博客的集合.
8 在stackoverflow上搜索emacs相关的讨论
google "emacs-related-keywords site:stackoverflow.com"
我会定期搜索,同样的帖子反复精读.因为stackoverflow上的讨论质量很高.
9 github是我的新欢
github的版本控制服务很好.现在它的社区化倾向越来越强了,我喜欢.
例如,可以看一下https://github.com/languages/Emacs%20Lisp上最酷的Emacs插件.
11 将emacs配置管理起来
我将emacs配置纳入github的版本控制,见https://github.com/redguardtoo/emacs.d.
版本控制可以是认为一个集中式的知识管理,任何时刻任何地点对Emacs配置的修改都要及时上传和合并(merge).这点对于个人能力的长期积累很重要.
12 将emacs相关资料管理起来
我将我收集的所有Emacs相关资讯都放在dropbox的服务器上,然后用dropbox的软件同步资料到我的智能手机和我的IPad上,这样我可以充分利用空闲时间学习.
我目前在读<An Introduction to Programming in Emacs Lisp by Robert J. Chassell>和<Writing GNU Emacs Extensions by Bob Glickstein>.
请点击这里注册dropbox帐号.注意,dropbox客户端完全可以在国内使用,虽然访问其首页可能有点问题.
13 订阅EmacsWiki
EmacsWiki是一个社区维护的Emacs文档,可以认为是最酷插件和最佳实践的集合点.
14 到youtube上看emacs相关的视频
例如,我就是看了Google Tech Talks上这个Org-mode作者的介绍而爱上org-mode.
15 认识到Emacs是一种生活方式
如果你照着我以上的做法做,就可以认识到Emacs牛人其他也很牛.Emacs实际上体现了牛人的一种生活方式.
像那些牛人一样思考,像那些牛人一样做事,不要怀疑,不要犹豫,很快你就会发觉自己也开始有些牛人的气质了.
例如,Sacha Chua就是这样一个有牛人气质的女孩,这是她的Youtube录像. 她学习Emacs的方式是让Emacs自动将手册语音合成, 这样她在房间里走来走去的时候也可以听文档了.
想想看, 这些用Emacs的人都是什么样的Geek啊!所以,我认为Emacs不仅仅是一种工具,它是个社区,一种文化.
对我而言,加入Emacs社区让我学会了谦卑.当我明白了Emacs的其朴素的设计思想和其强大的可拓展性后,我的感觉是敬畏,因为我做不出这样的软件.
我既没有能力把一个编辑器设计成一个人工智能语言Lisp的平台,也不可能花30多年的时间对一个软件精益求精.
16 小结
看到这里你应该很清楚了,我的方法就是以兴趣作为切入点,以天才作为榜样,大量阅读,大量练习.
如果你想获得真才实学,想变得更强,变得更优秀,这就是唯一的方法,唯一的捷径.
这个方法不是我发明的,古往今来的杰出人士都是这么做的,如果你需要一点"更科学的"论证,请参考一万小时天才理论.
17 联系我
这是我的twitter和google plus以及微博,也可以通过我的email<chenbin DOT sh AT GMAIL DOT COM>联系我.我也在新浪weibo.com上开通账号emacsguru.
我的主力博客为http://blog.binchen.org.
我不会回答Emacs配置的具体问题,因为如果你通读本文,应该知道哪里找答案更好.
18 答疑
18.1 我已是Vi高手,为什么要转到Emacs来?
嘿嘿,我也是Vi精通后转到Emacs的.我转换阵营的原因就是因为Emacs的强大(例如和gdb的完美结合)以及其脚本语言是lisp.
当然Vi的多模式编辑和快捷键比Emacs要高效得多,所以最佳方案是Vi的快捷键加上Emacs的强大.
目前我在用evil-mode,在Emacs下模拟Vim操作,结合了两者的优点.简单地说,现在我的运行模式"神用编辑器之神".
18.2 使用牛人的Emacs的配置后,发觉界面有些奇怪的bug,怎么改?
不要改!参考上文[站在巨人的肩膀上]一章,你觉得奇怪可能是因为缺乏经验,把某些特性误认为是bug.请坚持至少一年.
例如,有人向我反映,在编辑任何文本的时候,会发觉右边约第80列处总有一竖线,希望能去掉.这实际上是一特性,提醒你每一行不要宽度不要超过第80列.这里是每行不要超过80列的原因.
我建议你学习Emacs的第一年的原则应是,理解而不判断.
18.4 使用牛人的配置后启动emacs报错,如何解决?
重新启动emacs,带上"–debug-init"参数,然后将显示的错误信息及环境报告牛人,给我也行.报告bug的方式最好是用github的bug跟踪系统.
18.5 为什么我用了牛人的配置后自己额外添加的插件无效
Emacs是个开放平台,其众多插件release之前并不一定有严格的测试.所以插件之间可能有冲突.
这也是我为什么建议初学者直接使用牛人配置的原因,因为牛人已经解决了众多兼容性的问题,你只要直接享受他的服务就行了.
即使你发觉了牛人尚未来得及处理的bug,最有效的方法是提交bug报告给牛人,而不是自己去钻研elisp.
18.6 我想用Windows版本的Emacs而不是Cygwin版本的Emacs,怎么做?
需要对基本的命令行操作有一定的熟悉.关键知识点有两个:
- 设置HOME环境变量,因为.emacs.d中的某些elisp脚本假定.emacd.d在HOME所指的路径中.
- Emacs的某些功能需要使用第三方的命令行工具,这些工具的路径应该添加至环境变量PATH中(可选,原因见后面).
- 替代步骤2的另一更好的方法是使用第三方插件将Windows版本的Emacs和Cygwin的工具和*文档*完美结合,参考我(redguardtoo)在stackoverflow上的回答.不过需要更多的配置.
如果你不知道如何在Windows下添加修改环境变量,不知道如何安装第三方工具,建议还是先用cygwin中的Emacs,因为cygwin已自带某些工具,没有的话,安装也和方便.且在cygwin下环境变量HOME默认已有.
第三方命令行工具清单请参考上文我的.emacs.d中的README(Steve Purcell没有列出这些工具,因他只用OS X).