一年成为Emacs高手

一年成为Emacs高手(像神一样使用编辑器)

作者: 陈斌(redguardtoo)

版本号: 20140127

更新时间: 2014-01-27 Mon

原创时间: 2012-01-31 Tue

版权:本文采用以下协议进行授权, 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0,转载请注明作者及出处.

1 注意

1.1 如何给我报告bug

本文已放在github上,网址为https://github.com/redguardtoo/mastering-emacs-in-one-year-guide.

如果有任何疑问,请直接在以上网址给我报bug.这比发Email要快得多.因为你报的任何bug我都会自动收到github的Email,github的Email永远会归类至我的最优先文件夹下.

如果直接给我发Email,就会淹没于垃圾邮件中.

1.2 我会长期维护本文

因为Emacs本质上是一个社区和平台,不断有新的有趣的人和技术出现.我会根据社区的最新情况更新本文.

1.3 如果你对本文的某些观点并不赞同

欢迎讨论,讨论的方法就是在github上给我报告bug.

不过在报告bug之前,请考虑到我文中的每个观点都是经过长期实践得出的,绝非简单的拷贝粘帖他人的观点.

例如有人认为我推荐的Purcell的配置更新太快,对于初学者太难了.但是:

  • 我文章的标题是*一年成为高手*,不是一年入门
  • 我就是这么做的,你可以看看一年内我给他报了多少bug

1.4 不要复制粘帖本文

如前所述,我会不断更新维护本文,如果你只是拷贝粘帖全文,会使你自己和其他人错过最新的更新.

如果您想和他人分享本文,最好是分享本文的链接,

  • 最新的中英文纯文字版本会发布在github上 (https://github.com/redguardtoo/mastering-emacs-in-one-year-guide)
  • 中文HTML版本会发布到我的官方博客 (http://blog.binchen.org/=268)
  • 考虑到中国大陆的网络情况,还有另一中文HTML版镜像 (http://blog.csdn.net/redguardtoo/article/details/7222501)

2 简介

成为Emacs高手很容易.一年前我还在Vi阵营,偶尔用Emacs还忘记”退出”的快捷键,但一年后我跨入高手行列.

很多文章都是强调Emacs有多牛,以激发你的兴趣.最有名的大概是王垠的Emacs是一种信仰!世界最强编辑器介绍.

这些好文章让你激动,你因此定下一个伟大目标(掌握神一样的编辑器Emacs),接下来就是执行了(如何高效地学习Emacs).

网上关于”如何做”的文章不多,那些涉及到”如何做”的文章,涉及细节多而谈方法论少,所以本文的重点就是谈谈一般方法.

3 为什么要学习Emacs(可选)

简单谈谈,因为我本文的重点是”怎么做”,而不是”为什么”.

3.1 Emacs的特点决定了其社区的平均技术水准都不低

Emacs用Lisp开发,Lisp的不同寻常的语法决定了其开发者都是资深开发者,掌握了多门语言.

Emacs本身并不能给你带来任何好处,这就决定了其社区成员都是纯粹的技术人员,投机取巧的功利主义者对其是没有兴趣(反例就是某些以Cloud和Big开头的技术).

3.2 和单纯的IDE比较,Emacs可以做的更多更快

这里的更多并不是和IDE比支持某编程语言的特性更多,而是指Emacs内可完成的通用任务比较多更快捷.

例如,我做开发时碰到难题,需要实时上IRC请教国外高手(工作流包括粘贴我的代码到pastebin或者gist,在irc内提问,看网页,将解决方案粘贴回来),emacs集成了IRC工具和浏览器(w3m),操作就很方便.

我使用Visual Studio多年了,Firefox使用我也是高手,相信我,大多数情况下还是Emacs更快.

当然口说无凭,请看以下两段高手操作的youtube视频:

  • Writing PPT with org-mode and beamer in Emacs
  • Emacs Power: Can your editor do THIS!

3.3 Emacs是自由软件基金会开发的招牌开源软件

个人会丧失开发软件的兴趣,公司会倒闭而停止维护软件.但是自由软件基金会会一直存在下去.Emacs作为其招牌软件也会一直被维护下去,我在该软件上投资的时间和精力也永远不会贬值.

3.4 使用Emacs可以立刻开始工作.

软件是开源的,配置是纯文本,而且软件的资源消耗较小,安装包很小(命令行版本的安装包30M左右),所以在任何环境下我都可以用Emacs开始工作,overhead很小.

这在大项目中特别明显,例如,某项目我需要同时编辑perl,java,C,bash,SQL,需要远程编辑在美国服务器上的代码,网速也不是很快.Emacs的优势就体现出来了.

3.5 一年指的是充分利用空闲时间,一年后自然水到渠成

我没说一年内必须什么事也不干专门学Emacs,悬梁刺股没有短期利益回报的学习方法是我最反对的.

我赞成的方法是,开始阶段花极少的时间得到巨大的回报(如下文谈到的Org-mode),以兴趣做导向.

每天花多少时间取决于个人需要和如何管理,以我为例,每天八小时上班时间中有很多零碎时间可以利用,上下班通勤时间有一个小时可以利用.

3.6 态度决定一切

长期来说你能取得的成就是由态度决定的.

优秀人士的特点:

  1. 勇于接受新事物
  2. 追求更强的过程本身就是目的
  3. 举一反三

例如,虽然Emacs默认的快捷键已很高效,但是我更新了我的快捷键操作.保存文件时我原来要按按”Ctrl+X Ctrl+S”,现在按”,ww”.少按了一个键,同时手指避免了额外移动一寸去按Ctrl键.

这似乎是个微小的改动,因为保存文件并不是一个很频繁的动作.而且放弃熟悉的快捷键操作,使用一个陌生的快捷键开始也有点不习惯(后文我提到,我也是一个熟练的Vim用户,但是Vim的保存快捷键默认是”:w”,并不是现在的键位).

但是这只是我改进效率的一个开端,我花了几个月时间把所有的操作都以类似的方法优化了一边.然后我又想到了进一步的优化应该有可靠的统计数据为基础,所以我安装了名为keyfreq的Emacs插件,对于我使用最频繁的操作重新分配了最方便的快捷键.

假设我一开始因为已习惯了Vim或者Emacs默认的快捷键,或因为改进保存文件动作的效率提升太小,所以拒绝改变,那么就不会有后来的大规模优化键位的工程.

或者有人说输入代码效率只是软件开发流程中很小一部分,重要的是”XXXX(编程思想,架构,框架…)”.此所谓顾左右而言它.如果你能举一反三,自然可以猜到同样的方法和原则也适用于软件开发的任何一部分,”但是…”只是不做的借口罢了.

4 读官方教程

打开Emacs后,同时按下Alt和X健,输入help-with-tutorial(后文中,类似快捷键以简写`M-x help-with-tutorial`代替),回车.

仅需半小时.关于Emacs的多难学的谬论可以休矣,因为半小时的代价微不足道.想想你去年有多少小时白白虚度了吧.

这步是必须的,不要跳过!

例如,我发觉很多读者的问题是不知道如何查看变量函数的文档,这在官方教程中都有说明.

5 以兴趣和急需解决的问题作为切入点

因为如果微小的努力能得到巨大的回报,你就会越学越有乐趣,进入一个感情上的正反馈.

长期来说,在任何领域要成为高手,兴趣是最重要的.

以我为例,我急需GTD的工具,而emacs的org-mode是世界上最好的GTD工具(没有之一).用org-mode大大节省了时间后,我对于emacs爱屋及乌,兴趣高涨了100倍.

6 站在巨人的肩膀上

这方面我是个负面榜样.开始阶段我还是抱着玩的心态,喜欢到处找有趣的配置粘贴到我的.emacs中去.

这是浪费时间!

我应该一开始就照抄世界级大师Steve Purcell的emacs配置 .

警告,Purcell总爱试用最新的Web开发的新技术,对他而言稳定性不是第一位的,如果你有足够的热情和能力,愿意和他一起折腾,那么你的Emacs水平会提高得很快.

这个如果是很重要的前提,当我上了Purcell的贼船时,我已有10年开发经验,精通多种开发语言.

如果你不愿意过于折腾,那么你至少不要重复我的错误,你不要质疑,你不要创新,你要跟着高手做.比如Eric Schulte的Emacs-starter-kit很适合初学者.Bozhidar Batsov的配置也不错(不一定适合初学者).也可以用我的配置.

直说了把,你是初学者,开始阶段应以学习模仿为主.这点怎么强调也不过分!

为了加深印象,让我再举一个例子.一些读者向我反映,Emacs快捷键太多,背起来压力很大.实际上这是初学者先入为主的偏见.对高手来说,有了恰当的工具后,快捷键很多情况下并不需要.盲目地去背快捷键只会延迟你成为高手那一刻的到来.如果你只是复制了高手的配置开始使用而不是纠结于完成被快捷键这个无聊的任务,你会发觉高手以安装了名为smex的插件,使得你直接输入命令比用快捷键还快.所以背快捷键也不需要了.

顺便说一下,很多高手的配置需要git才能更新,这意味着你需要安装git和cygwin(限于windows平台).这是买一送二,我又给你介绍了两个高手必备的世界级工具.

7 高手都在哪里

7.1 加入google plus的Emacs社区

Google Plus的Emacs社区在此时( 2012-12-25 二)Geek的气场非常强,讨论的贴子质量非常高.我上过很多大众和小众的Emacs社区,这是我的经验之谈.例如,我加入了Linkedin和Facebook的Emacs社区,目前都退出了.并不是这些社区不够专业,只是Google Plus讨论问题的技术层次比较高.

如果你只能加入一个网络社区的话,那么就是Google plus了.

另外,著名Emacs用户Xah Lee(个人网站为李杀网, 其账号名为ErgoEmacs)每周二会在Google Plus上组织一次Emacs问答.

7.2 reddit的Emacs社区质量也不错

reddit上一些讨论挺有新意,深度上不及Google+.

由于Prism事件,一些Emacs高手抗议Google泄漏隐私给美国政府的NSA,离开了google+社区,他们可能以后会把主要精力投入reddit,所以reddit会在geek的氛围上有所增强.

7.3 github是geek云集的地方

github的版本控制服务很好.现在它的社区化倾向越来越强了,我喜欢.

例如,可以看一下https://github.com/languages/Emacs%20Lisp上最酷的Emacs插件.

7.4 Emacs牛人的博客

最好的是Planet Emacsen,多个Emacs博客的集合.

8 搜索最新讯息

8.1 在twitter上以”emacs :en”定期搜索

twitter人多,更新结果快.

8.2 在stackoverflow上搜索emacs相关的讨论

google “emacs-related-keywords site:stackoverflow.com”

我会定期搜索,同样的帖子反复精读.因为stackoverflow上的讨论质量很高.

8.3 使用google快讯

每周一次给我邮箱发一次摘要,仅限最佳结果.这样的话信息质量可以得到保证.

8.4 到Youtube上看emacs相关的视频

例如,我就是看了Google Tech Talks上这个Org-mode作者的介绍而爱上org-mode.

注意,Youtube搜索的结果是最佳匹配的.问题是关于Emacs的视频并不太多,如果按照Youtube的算法,我每次搜索看到的总是那几个录像.所以如果关注重点是看看Emacs社区有些什么新东西的话,默认搜索结果应以时间排序.

9 将emacs配置管理起来

我将emacs配置纳入github的版本控制,见https://github.com/redguardtoo/emacs.d.

版本控制可以是认为一个集中式的知识管理,任何时刻任何地点对Emacs配置的修改都要及时上传和合并(merge).这点对于个人能力的长期积累很重要.

10 将emacs相关资料(如电子图书,博客文章)管理起来

我将我收集的所有Emacs相关资讯都放在dropbox的服务器上,然后用dropbox的软件同步资料到我的智能手机和我的IPad上,这样我可以充分利用空闲时间学习.

请点击这里注册dropbox帐号.注意,dropbox客户端完全可以在国内使用,虽然访问其首页可能有点问题.

11 EmacsWiki

EmacsWiki是一个社区维护的Emacs文档,可以认为是最酷插件和最佳实践的集合点

12 Emacs Lisp书籍推荐(可选)

关于Emacs Lisp (elisp)书籍,我已读完<An Introduction to Programming in Emacs Lisp by Robert J. Chassell>.我建议你不要读该书.因为写得不好.很枯燥,重点不突出,而且内容已有点过时了.

我正在读<Writing GNU Emacs Extensions by Bob Glickstein>.我强烈推荐这本书,重点突出,生动,例子丰富.作者明显是高手,并且用心安排了书的结构.例如,他很早就介绍了defadvice的用法.我很认同这点,dfadvice是elisp语言的精华.

Xah Lee提供付费Emacs Lisp教程也相当不错.

13 认识到Emacs是一种生活方式

如果你照着我以上的做法做,就可以认识到Emacs牛人其他也很牛.Emacs实际上体现了牛人的一种生活方式.

像那些牛人一样思考,像那些牛人一样做事,不要怀疑,不要犹豫,很快你就会发觉自己也开始有些牛人的气质了.

例如,Sacha Chua就是这样一个有牛人气质的女孩,这是她的Youtube录像. 她学习Emacs的方式是让Emacs自动将手册语音合成, 这样她在房间里走来走去的时候也可以听文档了.

想想看, 这些用Emacs的人都是什么样的Geek啊!所以,我认为Emacs不仅仅是一种工具,它是个社区,一种文化.

对我而言,加入Emacs社区让我学会了谦卑.当我明白了Emacs的其朴素的设计思想和其强大的可拓展性后,我的感觉是敬畏,因为我做不出这样的软件.

我既没有能力把一个编辑器设计成一个人工智能语言Lisp的平台,也不可能花30多年的时间对一个软件精益求精.

14 精品Emacs第三方插件推荐

我推荐插件标准如下:

  • 高品质
  • 经常更新
  • 功能强大

所有插件都可以通过Emacs的package manager下载.

以下是插件清单:

名称 说明 同类插件
evil 将Emacs变为vi viper
org org-mode,全能的note工具 不知道
org2blog 给wordpress写博客 不知道
company-mode 自动完成输入,支持各种语言和后端 cedet, auto-complete
expand-region 按快捷键选中当前文本,可以将选择区域扩展或者收缩 不知道
smex 让输入M-x command变得飞快 不知道
yasnippet 强大的文本模板输入工具 不知道
flymake-xxxx 以flymake开头的所有包,针对不同语言做语

来源:zgongnong

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年1月19日
下一篇 2014年1月20日

相关推荐