简介
Emacs是一种强大的文本编辑器,在程序员和其他以技术工作为主的计算机用户中广受欢迎。
EMACS,即EdITor MACroS(宏编辑器)的缩写,最初由Richard Stallman于1975年在MIT协同Guy SteeleGuy Steele共同完成
这一创意的灵感来源于TECMAC和TMACS,它们是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。
自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种分别是:1984年由Richard Stallman发起并由他维护至今的GNU Emacs,以及1991年发起的XEmacs。
XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。它们都使用了Emacs Lisp这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。
在Unix文化里,Emacs是黑客们关于编辑器优劣之争的两大主角之一,它的对手是vi文本编辑器。
历史
Emacs在1970年代诞生于MIT人工智能实验室(MIT AI Lab)。
在此之前,人工智能实验室的ITS上运行的操作系统PDP-6和PDP-10的默认编辑器是一个叫TECO(Text Editor and Corrector)的行编辑器。
与现代的文本编辑器不同,TECO将击键、编辑和文本显示按照不同的模式进行处理,稍晚出现的vi与它有些类似。在TECO上击键并不会直接将这些字符插入到文档里去,必须先输入一系列相应的TECO指令,而被编辑的文本在输入命令的时候是不会显示在屏幕上的。
在如今还在使用的UNIX编辑器ed(ed)上,我们还能看到类似的工作方式。
1970年代初,Richard Stallman访问Stanford AI Lab时见到了那里的"E" editor。这种编辑器有着所见即所得的直观特点,深深打动了Stallman。
后来Stallman回到MIT,那时候MIT AI lab的黑客Carl Mikkelsen 已经给TECO加上了称作“Control-R”的编辑显示模式,使得屏幕能跟随用户的每次击键刷新显示。
Stallman重写了这一模式,使它运行得更有效率,后来又加入了宏,允许用户重新定义运行TECO程序的键位。
这一新版的TECO立刻在AI实验室流行开来,并且很快积累起了大量自定义的宏,这些宏的名字通常就以“MAC”或者“MACS”结尾,意为“宏”(macro)。两年后,Guy Steele承担起统一当时存在的各种键盘命令集的工作。
Steele和Stallman经过一夜奋战,最终由Stallman完成了这一任务,包括一套扩展和注释新的宏包的工具。这个完成的系统被称作EMACS,代表“Editing MACroS”。根据Stallman的说法,他采用这个名字是“因为当时
也有说法指出,当时波士顿在MIT附近有家名为“Emack & Bolio's”的商店出售的冰激凌很受欢迎,Dave Moon是那里的老主顾,他就将ITS上一个给文本排版的程序命名为BOLIO,然而Stallman并不喜欢甚或根本不知道那种冰激凌,此事后来成了黑客界的一桩公案。
Stallman意识到过多的定制、在开发过程中事实上的分支以及针对特殊用途的限制,威胁着Emacs的发展。后来他写道:
“ Emacs的发布基于社群共享,这意味着所有的发展都要反馈给我,由我进行整合和发布。("EMACS was distributed on a basis of communal sharing, which means all improvements must be given back to me to be incorporated and distributed.") ”
最初的Emacs同TECO一样只能运行在PDP-10系统。
Emacs虽然是在TECO的基础上发展起来的,不过它已经足以被认为是一个新的文本编辑器了。很快,Emacs就成为ITS上的标准编辑程序,接着由Michael McMahon移植到TENEX和TOPS-20系统上。
其他 emacs
随后的几年里,开发出了许多运行于其他操作系统的类Emacs的编辑器,包括由Michael McMahon和Daniel Weinreb编写的SINE(Sine is not EMACS)、EINE("EINE Is Not EMACS)以及ZWEI(“ZWEI Was EINE Initially”,工作于Lisp机器),它们的名字在德语中分别是“一”和“二”的意思。1978年,Honeywell的Cambridge Information Systems Lab的Bernard Greenberg用Maclisp(Lisp语言的一种)编写出Multics Emacs,第一次完全采用Lisp作为扩展语言。
Lisp语言提供了前所未有的灵活性,因此被后来的Emacs开发者沿用。
最早在Unix上运行的Emacs类编辑器是1981年James Gosling编写的Gosling Emacs(Gosling后来发明了Java编程语言)。Gosling Emacs以C语言编写,使用Mocklisp作为扩展语言,Mocklisp有着类似Lisp语言的语法。
1984年,Gosling Emacs成为专有软件(Proprietary software)。
GNU Emacs
1984年,Stallman开始致力于开发GNU Emacs,这将是一个自由软件,以代替Gosling Emacs。
最初GNU Emacs是在Gosling Emacs的基础上开发的,不过Stallman后来用一个真正的Lisp解释器代替了原来的Mocklisp解释器,由于Lisp解释器在此软件中的核心地位,这意味着实际上重写了几乎全部代码。GNU Emacs是GNU计划的第一个项目,以C语言编写,将Emacs Lisp(其解释器由C实现)作为扩展语言。
GNU Emacs最早广泛发布的版本是15.34,出现于1985年。实际上版本2到12并不存在,GNU Emacs的早期版本都是以“1.x.x”的形式编号,直到1.12版时开发人员放弃了这一记法,因为他们认为主版本号是不应该改动的。因此,Version 13是第一个public release,它发布于1985年3月20日。
GNU Emacs和Gosling Emacs一样运行在Unix系统上。
不过GNU Emacs的功能更多,特别是它有一个真正的lisp作为扩展。结果,GNU Emacs很快就取代了Gosling Emacs,成为Unix系统上事实的Emacs编辑器。
Until 1999, GNU Emacs development was relatively closed, to the point where it was used as an example of the "Cathedral" development style in The Cathedral and the Bazaar. The project has since adopted a public development mailing list and anonymous CVS access. Development takes place in a single CVS trunk, which is at version 22.0.93. The current maintainer is Richard Stallman.
XEmacs
1991年,Lucid公司的Jamie Zawinski等人以GNU Emacs 19的一个早期alpha版为基础,添加了一些新的特性,开发出Lucid Emacs。很快,Lucid Emacs的开发与GNU Emacs渐行渐远,最终双方的团队放弃了将两者合并的努力。
Lucid Emacs被重新命名为XEmacs,它不像GNU Emacs那样要求严格的代码授权,因此能够吸纳大量的优秀扩展,在很多方面比GNU Emacs更为优秀。
到目前为止,两者都是众多Emacs类编辑器中最受欢迎的选择。
功能特点
Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中,在基于编辑器的功能基础上,Emacs自行开发了一个“bourne-shell-like”的shell: EShell。Emacs还可以:
收发电子邮件 通过FTP/TRAMP编辑远程档案 通过Telnet登录主机 上新闻组 登陆IRC和朋友交流 查看日历 撰写文章大纲 对多种编程语言的编辑 调试程序,结合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等 玩游戏 计算器 记日记 煮咖啡 管理日程,Task,ToDo,约会等 个人信息管理 目录管理 文件比较 阅读info和man文档 浏览网站 为各种程序(TeX等)提供统一的操作界面 ……
此外Emacs还有如下特点:
display editor 实时编辑器 高级编辑器 Self-documenting 可定制性 可扩展性(集成Lisp语言) 支持X Window环境
各平台上的Emacs
Emacs是目前世界上最具可移植性的重要软件之一,能够在当前大多数操作系统上运行,包括类Unix系统(GNU/Linux、各种BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等。
Emacs既可以在文本终端也可以在图形用户界面(GUI)环境下运行。在类Unix系统上,Emacs使用X Windows产生GUI,或者直接使用“框架”(widget toolkit),例如Motif、LessTif或GTK+等等。Emacs也能够利用Mac OS X和Microsoft Windows的本地图形系统产生GUI。用GUI环境下的Emacs能提供菜单(Menubar)、工具栏(toolbar)、scrollbar以及context menu等交互方式。
编辑模式
Emacs采取的编辑方式是对不同类型的文本进入相应的编辑模式,即“主模式”(major mode)。Emacs针对多种文档定义了不同的主模式,包括普通文本文件、各种编程语言的源文件、HTML文档、TEX与LaTeX文档,以及其他类型的文本文件等等。
每种主模式都有特殊的Emacs Lisp变量和函数,使用户在这种模式下能更方便的处理这一特定类型的文本。例如,各种编程的主模式会对源文件文本中的关键字、注释以不同的字体和颜色加以语法高亮。主模式还提供诸如跳转到函数的开头或者结尾这样特地定义的命令。
Emacs还能进一步定义“次模式”(minor mode)。每一个缓冲区(buffer)只能关联于一种主模式,却能同时关联多个次模式。比如,编写C语言的主模式可以同时定义多个次模式,每个次模式有着不同的缩进风格(indent style)。
定制
Emacs用户可以根据自身的需要和偏好对编辑器进行定制。强大而自由的个人定制功能是Emacs受到广泛欢迎的重要原因之一。定制Emacs主要有三种方法。
第一种方法是使用Emacs的交互式定制功能。Emacs提供了图形化的交互界面,使用户能够对可定制的公共变量进行设置。这种方法使Emacs的初学者不需要接触Emacs Lisp代码即可完成定制。
第二种方法是将一系列按键记录为宏,调用这一宏可以重复进行已经记录的一系列复杂操作。宏可以保存并命名,以便按名调用,不过同一时刻只能存在一个匿名的宏。
第三种方法是通过使用Emasc Lisp完成Emacs的定制。这种方法最为复杂,但是也提供了更多的灵活性和更强大的功能。
用户通常将个人定制的Emacs Lisp代码保存在一个名为.emacs的配置文件中,Emacs程序运行之初便读取这一文件,完成用户要求的配置。
用户可以通过.emacs文件重设变量、重新定义按键的绑定(key bindings)、以及定义新的命令,以方便用户个人的使用。很多高级用户的.emacs文件的个性化配置长达数百行甚至更多,这些个人的定制使他们的Emacs不仅与默认配置的功能不同,每个人的Emacs之间也千差万别。这种差异能很好的满足不同个性的偏好和不同工作的需求。
如果一段Emacs Lisp代码确实有用,它通常会被打包并发布给其他用户。
在因特网上能找到很多这样来自第三方的elisp库,例如能用于编辑维基百科条目的wikipedia-mode。Usenet上的新闻组gnu.emacs.sources专门发布新的elisp库。有些第三方代码最终还成为了Emacs“标准库”的一部分。
国际化
Emacs支持对多种文字的文本编辑,包括UTF-8在内的诸多编码系统,加上对多种字符集、文稿、书写系统,以及不同文化的书写习惯都提供了支持,使得世界上大多数语言的使用者都能通过Emacs进行文本处理。Emacs还能通过调用诸如ispell这样的外部程序,实现多种语言的拼写检查。
Emacs是一种强大的文本编辑器,在程序员和其他以技术工作为主的计算机用户中广受欢迎。EMACS,即Editor MACroS(宏编辑器)的缩写,最初由Richard Stallman于1975年在MIT协同Guy Steele共同完成。这一创意的灵感来源于TECMAC和TMACS,它们是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种分别是:1984年由Richard Stallman发起并由他维护至今的GNU Emacs,以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。它们都使用了Emacs Lisp这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。nn
版权
Emacs的版权遵从GNU通用公共许可证(GPL),赋予他人自由地对包括C和Lisp在内的Emacs源文件进行修改和再发行的权利
较早版本的GNU Emacs文档是在一种点对点(ad-hoc)的许可下发布的,要求所有修改过的副本都要包含某些特定的文字。例如,GNU Emacs的用户手册中必须包含如何获得GNU Emacs的说明,以及Richard Stallman的政论——《GNU宣言》(The GNU Manifesto)。
作为较早版本的GNU Emacs的分支,XEmacs的手册也采用相同的使用许可。较新版本的GNU Emacs文档则采用《GNU自由文档许可证》(GNU Free Documentation License),以使用“不变段落”("invariant sections" )的形式包含有同样的文本,并且要求这些文档自我声明为“GNU手册”(GNU Manuals)。
版本信息
Emacs和Vim二款神一样的代码编辑器
今天有一位从事程序猿N年的哥们在QQ上给本小编吐槽,“你个啥子网站,连个Emacs这样神一样的编辑器都没有,你弄些啥嘛”,俺沉默了10秒外加5秒的发呆,Emacs?神一样的编辑器?
这种说法让UltraEdit和Editplus情以何堪,还有那个号称程序员们最喜爱的编辑器Notepad++听完一定会痛哭流泪。
赶快找度娘,问问是否如此,在看到一篇文章“Emacs和Vim,神的编辑器和编辑器之神”之后,让我觉得有一种不发布Emacs和Vim简直就是犯罪的冲动,于是急冲冲发布Emacs和Vim这二款编辑器神器,让那些未睹这二款编辑器芳容的同学一睹神的风采。
要详细介绍这二款编辑器真是难于找到合适的文字,“古老、经典、强大”等一切词语相对于Jiqing Wu这位作者博客所写都显得那么的苍白无力,现引用些有关描述这二款编辑器的原话,你一定会为Emacs和Vim特立独行的魅力所着迷。
●Windows下用UltraEdit和Editplus的人质问:它们到底比UltraEdit和Editplus好在哪里?我说:不可同日而语。
连UltraEdit和EditPlus都没用过的同学问:它们就相当于Linux上的 Notepad吧?我说:请你从我的眼前消失。
●Linux和开源软件渐渐流行起来,人们才发现:可扩展性才能给软件强大的生命。
在MS的VS横行的今天,Eclipse为什么被评为最好的IDE?就是因为它在IDE中最具可扩展性。
在IE几乎一统天下的时候,为什么Firefox能夺走越来越多的用户,也是因为它的可扩展性。提供了良好的扩展接口,用户自然会写出各种各样的插件,来满足用户自己形形色色的要求。
这样,软件在用户的推动下自然变得强大了,Emacs和Vim没有被时代淘汰,反而越发强大,也正是因为在数不清的编辑器中,他们具有无可匹敌的可扩展性。
●有这么牛逼的扩展语言,注定Emacs向着无所不能的方向发展。渐渐地,人们用Emacs不再限于写程序,写文档,而且在Emacs里管理文件系统,运行终端,收邮件,上网,听音乐……,真是一发不可收拾。甚至,有人用Emacs控制咖啡机煮咖啡。
●这种大而全的扩展,背离了“一个程序只做一件事并做好它”的 Unix哲学,被Unix的忠诚用户所诟病。可是真的背离了吗? Emacs说过自己是一个编辑器吗?
●正是因为Emacs的无敌的可扩展性,人们才分不清Emacs到底是不是一个编辑器了。但,就是有人喜欢这种All-in-One的哲学,喜欢在Emacs中完成每件事。所以才会有人写《生活在Emacs中》,所以, Emacs才会成为一种信仰。
●Linux之父Linus多年来用的是一款 MicroEmacs,它比GNU Emacs或XEmacs少许多功能,但Linus就是用它在维护Linux。 微软的大牛Don Box,Com之父,一直用Emacs,他说谁也不能夺走他的编辑器。他还在网上放了一段他用Emacs写C#程序的视频。
●编程大师们的选择,也是Emacs和Vim被追捧为神器的原因之一。
●可扩展性让你倾注了灵魂
●独特的操作方式让你中了毒
●黑客的编辑器,一剑在手,夫复何求
●Emacs和Vim神器引发的圣战争斗不断
……