Emacs Show — Motivation

“工欲善其事,必先利其器”。用Emacs三年,略知其中滋味,希望与更多的程序员分享,也算为开源社区做点贡献吧。

学了Emacs才知道,输入(以及修改)程序也是有很多学问的。记得当初关于“软件蓝领”的争论焦点就是写程序是体力活还是脑力活,是否仅仅等于敲敲键盘。虽然到头来双方仍是自说自话,但似乎都同意“敲键盘是体力活”。大家对编辑器的期望无非也就是语法高亮、自动缩进,如果能有自动补全那就谢天谢地了。我周围的同事用的编辑器各种各样,有SourceInsight、SlickEdit、UltraEdit……,但用得最多的还是vi,甚至连新来的实习生都用vi,这让我很吃惊,我上学那会儿可都是用IDE的啊。即使这样,还是有很多同事对UltraEdit的列插入功能津津乐道,由此可见,很多编辑器对于编辑这个老本行做得还不够。大家使用SourceInsight和SlickEdit,也是用其代码浏览和定位功能,而其编辑功能并无出彩之处。

编辑是程序开发领域唯一的体力活吗?体力活意味着机械、单调、令人厌烦。我们选择干程序员这行,不就是想多动脑少动手吗?如果你把编辑当成体力活,那么肯定你的手指经常游走在方向键、Home、End、PageUp、PageDown、Delete和Backspace之间,偶尔(也许是很多时候)不得不借助鼠标,即使你也知道用鼠标对手腕的伤害要远远大于键盘。也许你觉得这没什么不好,难道不是每个程序员都这样吗?答案是:不是。Emacs用户将这种行为比喻为Cache Miss,可见其对效率的伤害程度。几乎每个人都会同意,输入速度取决于盲打的熟练程度,看键盘是非常忌讳的。然而,有多少人可以不看键盘就能找对上面提到的几个键呢?即使找对,恐怕手已移开半尺(鼠标就更远了),让食指回到”J”键上也不那么容易吧。当我们尚不清楚接下来该写什么的时候,这并不成问题,尽可以将每个动作做得轻松、优雅。但是当我们早已胸有成竹,只等下手时,还是这样编辑,不仅减缓速度,还会滋生急躁、甚至烦躁的情绪。试想以下操作我们通常是如何完成的:

  • 删除一个长达三屏(甚至更长)的函数;
  • 重新格式化一段没有做好缩进的代码;
  • 只在一个函数(或一块文本)里做字符串替换;
  • 选好一块很长(数屏)的文本后发现结尾处选对了,可是开头处要做一些调整。

我曾经为这些问题郁闷得不行,尤其是最后一个,简直暴跳如雷,因为除了重来,还能怎样呢?直到用了Emacs才发现,原来生活可以如此简单,写程序可以如此快乐。所以,尽管过了三年,我仍然为每一次击键兴奋不已,我所在的组共6人(包括我),经过我的鼓吹,有3名同事开始使用Emacs。

使用Emacs的好处有很多,我会在后续的blog里面重点介绍,但我认为最重要的是,它彻底改变了我对编辑的认识,从此以更严肃的态度对待它。正如高级语言取代汇编语言一样,那些只能区分单个字符的编辑器也该被丢弃,只有提供更高的抽象,以及基于这些抽象的操作,才能使开发过程更加高效。

我个人认为Emacs的强大之处可以在下面几个方面得到体现:

  • 对编辑操作的支持极其丰富,使得输入过程非常流畅,比如支持正反双向以一个字符、单词、句子、甚至段落为粒度移动光标,将光标快速定位到函数头尾、该行第一个非空格字符,双向调节选中区域,注释掉选中区域或去掉选中区域的注释(对于只支持行注释的语言,如Perl等,非常方便),等等,数不胜数;
  • 可定制性。每个人都有自己的偏好,有人喜欢语法高亮,有人不喜欢;有人喜欢4格缩进,有人喜欢GNU风格,还有人不希望缩进有tab键,只能用空格,等等。Emacs为此提供了极其灵活的定制功能,使其满足不同口味的人群。
  • 可扩展性。Emacs由两种语言实现——C和Emacs Lisp,除了少数基本操作和一部分对性能要求较高的函数外,绝大多数功能都是由Emacs Lisp实现,而Emacs本身就可以看作是一个Emacs Lisp程序运行环境,因此,任何人都可以使用Emacs Lisp实现自己所需的功能。同样是编辑,写程序和写文章的需求是不一样的,正是由于Emacs的这种开放性,使其可以满足绝大多数编辑需求,即使是那些非常古怪的要求,因为你总是可以写一段程序来完成它。不要因为看到Lisp就畏缩不前,它有很多美妙的语法特性是你在其它语言中看不到的,它让你惊呼,原来程序也可以这么写。
  • 在线帮助。没有比找不到帮助更让你泄气的了,而Emacs永远不会让这种事情发生。所以,你很难在市面上见到讲Emacs或Emacs Lisp的书,而网站只需http://www.emacswiki.org/一个足矣。
  • 与环境完美集成。这个环境当然是指GNU/Linux环境,在Windows上可以选择Cygwin。与版本控制系统的无缝连接,编译、调试、搜索,收发电子邮件,订阅新闻组,查看其它GNU/Linux系统命令帮助,等等。一种夸张的说法是有人就生活在Emacs里。:-)

学习Emacs的唯一难处是开始很难。原来一个美国同事说他从vi转到Emacs时有6个月啥也不能干。我想可能是夸张了点,一些基本操作还是很快就能上手,毕竟,你还是可以像使用notepad一样使用它。难的是改掉陋习,和记住多如牛毛的快捷键。需要彻底地洗脑,这是一个漫长的过程,要吾日三省吾身,多学习多温习多看帮助多练习。

我知道,仅凭一篇文章很难带来足够的动力,我会继续写几篇,展示Emacs的迷人之处,也希望它能成为每个中国程序员手中的利器。

11 thoughts on “Emacs Show — Motivation

  1. sssslang says:

    写得很精彩,如果可以,我想转个链接。

    我从 vi 转到 emacs 尝试了两次,从 mutt 转到 Gnus 也是两次。 🙂

  2. 匿名 says:

    我现在已经能比较熟练的使用emacs,感觉编辑功能确实不错,但编程时感觉自动补全这些功能似乎并不太好用,可能是我的配置不好。请问关于编程方面楼主是否有好的建议?谢谢

  3. 匿名 says:

    我现在已经能比较熟练的使用emacs,感觉编辑功能确实不错,但编程时感觉自动补全这些功能似乎并不太好用,可能是我的配置不好。请问关于编程方面楼主是否有好的建议?谢谢

  4. 匿名 says:

    一直用vim,开始用emacs一段时间.

    其实基本的编辑操作vim要比emacs灵活得多。比如[count][command][count][motion].

    而emacs定制性扩展行要比vim好得多.可以做得很优雅.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据