Emacs

title: 历史.
content: Emacs在1970年代诞生于MIT人工智能实验室(MIT AI Lab)。在此之前,人工智能实验室的PDP-6和PDP-10电脑上运行的ITS操作系统的默认编辑器是一个叫TECO(Text Editor and Corrector)的行编辑器。与现代的文本编辑器不同,TECO将击键、编辑和文本显示按照不同的模式进行处理,稍晚出现的vi与它有些类似。在TECO上击键并不会直接将这些字符插入到文档里去,必须先输入一系列相应的TECO指令,而被编辑的文本在输入命令的时候是不会显示在屏幕上的。在如今还在使用的UNIX编辑器ed上,我们还能看到类似的工作方式。  1970年代初,理查·史托曼拜访斯坦福大学人工智能实验室(Stanford AI Lab)时见到了那里的"E" editor。这种编辑器有着所见即所得的直观特点,深深打动了史托曼,后来成为了大部分现代文本编辑器都具有的特性。后来斯托曼回到MIT,那时候MIT AI lab的黑客Carl Mikkelsen已经给TECO加上了称作“Control-R”的编辑显示模式,使得屏幕能跟随用户的每次击键刷新显示。斯托曼重写了这一模式,使它运行得更有效率,后来又加入了宏,允许用户重新定义运行TECO程序的键位。  这一新版的TECO立刻在AI实验室流行开来,并且很快积累起了大量自定义的宏,这些宏的名字通常就以“MAC”或者“MACS”结尾,意为“宏”(macro)。两年后,盖伊·史提尔二世承担起统一当时存在的各种键盘命令集的工作。史提尔和斯托曼经过一夜奋战,最终由斯托曼完成了这一任务,包括一套扩展和注释新的宏包的工具。这个完成的系统被称作EMACS,代表“Editing MACroS”,也代表“E with MACroS”。  根据斯托曼的说法,他采用这个名字是“因为当时<nowiki><E></nowiki>在ITS里还没有被当作缩写用过”。也有说法指出,当时波士顿在MIT附近有家名为“Emack & Bolio's”的商店出售的冰淇淋很受欢迎,Dave Moon是那里的老主顾,他就将ITS上一个给文本排版的程序命名为BOLIO,然而斯托曼并不喜欢甚或根本不知道那种冰淇淋,此事后来成了黑客界的一桩公案。  斯托曼意识到过多的定制、在开发过程中事实上的分支以及针对特殊用途的限制,威胁着Emacs的发展。后来他写道: 最初的Emacs同TECO一样只能运行在PDP系列的电脑上。Emacs虽然是在TECO的基础上发展起来的,不过它已经足以被认为是一个新的文本编辑器了。很快,Emacs就成为ITS上的标准编辑程序,接着由Michael McMahon从ITS移植到Tenex和TOPS-20操作系统上。其他Emacs早期的贡献者还包括Kent Pitman、Earl Killian和Eugene Ciccarelli。到了1979年,Emacs已经是MIT人工智能实验室和它的计算机科学实验室的主流编辑器了。
title: 其他早期实现.
content: 后来几年,程序员们写了很多类Emacs的编辑器。其中包括Michael McMahon和Daniel Weinreb为Lisp机器写的EINE(“EINE Is Not EMACS”)和ZWEI(“ZWEI Was EINE Initially”),还有Owen Theodore Anderson写的Sine。Weinreb的EINE是第一个以Lisp实现的Emacs。1978年,Bernard Greenberg写了Multics Emacs,大部分由Multics Lisp实现。Multics Emacs后来由Richard Soley维护。很多Emacs的变种,包括GNU Emacs,后来都将Lisp作为自己的扩展语言。  詹姆斯·高斯林,在1981年写了Gosling Emacs,他后来还发明了NeWS和Java。作为第一个在Unix上运行的类Emacs编辑器,Gosling Emacs由C语言实现,并且以Mocklisp作为扩展语言。1984年,Gosling Emacs成为专有软件。
title: GNU Emacs.
content: 1984年,斯托曼开始致力于开发GNU Emacs,这将是一个自由软件,以代替专有的Gosling Emacs。最初GNU Emacs是在Gosling Emacs的基础上开发的,不过斯托曼后来用一个真正的Lisp解释器代替了原来的Mocklisp解释器,由于Lisp解释器在此软件中的核心地位,这意味着实际上重写了几乎全部代码。GNU Emacs是GNU计划的第一个项目,以C语言编写,将Emacs Lisp(其解释器由C实现)作为扩展语言。GNU Emacs最早广泛发布的版本是15.34,出现于1985年。实际上版本2到12并不存在,GNU Emacs的早期版本都是以“1.x.x”的形式编号,直到1.12版时开发人员放弃了这一记法,因为他们认为主版本号是不应该改动的,所以版本号从“1”跳跃到了“13”。因此,Version 13是第一个public release,它发布于1985年3月20日。  GNU Emacs后来被移植到了Unix系统上。它比Gosling Emacs拥有更多的的功能,尤其是它有一个真正的Lisp作为扩展语言。结果,GNU Emacs很快就取代了Gosling Emacs,成为Unix系统上默认的Emacs编辑器。  到1999年为止,GNU Emacs的开发工作基本是在封闭的情况下进行。这种开发方式在《大教堂和市集》中被称为“大教堂模式”。从那以后,GNU Emacs项目建立了公共开发邮件列表和匿名CVS代码访问,开发工作在一个CVS代码仓库中进行。2008年,Emacs开始使用Bazaar进行版本控制。  斯托曼是GNU Emacs的主要维护者,但他曾经有几次把维护工作交给别人。他于2008年将代码的维护工作交给了Stefan Monnier和Chong Yidong。他在mail list上发出以下内容:
title: XEmacs.
content: 1991年,Lucid公司的Jamie Zawinski等人以GNU Emacs 19的一个早期alpha版为基础,添加了一些新的特性,开发出Lucid Emacs。很快,Lucid Emacs的开发与GNU Emacs渐行渐远,最终双方的团队放弃了将两者合并的努力。Lucid Emacs被重新命名为XEmacs;至今为止,XEmacs仍然是最流行的Emacs变种之一。
title: 其他GNU Emacs的衍生版本.
content: 其他的衍生版本,包括:
title: 其他Emacs变种.
content: 除上述编辑器以外,还有很多不基于GNU Emacs的编辑器,有些项目的目标是创建一个精简版的Emacs。在1980年代,GNU Emacs只能在很高端的电脑上运行,这就为精简版的Emacs实现的出现奠定了基础。还有一些Emacs变种是为了克隆一个完整的Emacs,但是使用不同的Lisp方言或者其他的编程语言。比如:
title: 版权.
content: Emacs的版权遵从GNU通用公共许可证,赋予他人自由地对包括C和Lisp在内的Emacs源文件进行修改和再发行的权利。较早版本的GNU Emacs文档是在一种点对点(ad-hoc)的许可下发布的,要求所有修改过的副本都要包含某些特定的文字。例如,GNU Emacs的用户手册中必须包含如何获得GNU Emacs的说明,以及理查·史托曼的文章——《GNU宣言》。作为较早版本的GNU Emacs的分支,XEmacs的手册也采用相同的使用许可。较新版本的GNU Emacs文档则采用《GNU自由文档许可证》,以使用“不变段落”("invariant sections")的形式包含有同样的文本,并且要求这些文档自我声明为“GNU手册”("GNU Manuals")。
title: 功能特点.
content: Emacs不仅仅是一个编辑器,它是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。Emacs可以:  此外Emacs还有如下特点:
title: 可定制性.
content: GNU Emacs几乎所有的功能都可以定制,有的可以通过C语言实现,有的可以通过一个Lisp的方言——Emacs Lisp来实现。在Lisp环境中,变量和子程序可以在不重新编译/启动Emacs的前提下被修改。Emacs用户可以根据自身的需要和偏好对编辑器进行定制。强大而自由的个人定制功能是Emacs受到广泛欢迎的重要原因之一。定制Emacs主要有三种方法:  如果一段Emacs Lisp代码确实有用,它通常会被打包并发布给其他用户。在因特网上能找到很多这样来自第三方的Emacs Lisp库,例如能用于编辑维基百科条目的。Usenet上的新闻组gnu.emacs.sources专门发布新的Emacs Lisp库。有些第三方代码最终还成为了Emacs的一部分。  手工配置安装各种Emacs Lisp代码毕竟有些麻烦。为了解决这个问题,Emacs 24自带包管理器ELPA(package.el)。用户可以方便的浏览可用的包(M-x package-list-packages)和自动下载安装包(M-x package-install)。详细信息可以参考Emacs Wiki上的ELPA词条。
title: 性能.
content: 在GNU Emacs刚诞生时,它比相同系统上的其他编辑器运行速度要慢很多,但是现代的电脑可以很快地运行GNU Emacs。早期的GNU Emacs可以处理256 MB以下的文件,GNU Emacs 23.2将这一限制提升到512 MB,而在64位系统的GNU Emacs 24中,这个限制是大约2 EiB。
title: 平台.
content: Emacs是目前世界上最具可移植性的重要软件之一,能够在当前绝大多数操作系统上运行,包括各种类Unix系统(GNU/Linux、FreeBSD、NetBSD、OpenBSD、Solaris、AIX、OS X等)、MS-DOS、Microsoft Windows等。甚至在Android和诺基亚的Maemo上,Emacs也能运行。  GNU Emacs既可以在文本终端也可以在图形用户界面环境下运行。在类Unix系统上,GNU Emacs使用X-Window产生GUI,或者直接使用“框架”(widget toolkit),例如Motif、LessTif或GTK+等等。Emacs也能够利用OS X和Microsoft Windows的本地图形系统产生GUI。用GUI环境下的Emacs能提供菜单栏(Menubar)、工具栏(toolbar)、滚动条以及环境菜单(context menu)等交互方式。
title: 编辑模式.
title: 主模式.
content: Emacs采取的编辑方式是对不同类型的文本进入相应的编辑模式,即“主模式”(major mode)。Emacs针对多种文档定义了不同的主模式,包括普通文本文件、各种编程语言的源文件、HTML文档、TEX与LaTeX文档,以及其他类型的文本文件等等。  每种主模式都有特殊的Emacs Lisp变量和函数,使用户在这种模式下能更方便的处理这一特定类型的文本。例如,各种编程语言的主模式通常会提供:
title: 次模式.
content: Emacs还能进一步定义“次模式”(minor mode),用以深度定制Emacs。一个GNU Emacs的缓冲区(buffer)只能关联于一种主模式,却能同时关联多个次模式。比如,编写C语言的主模式可以同时定义多个次模式,每个次模式有着不同的缩进风格(indent style)。
title: 国际化.
content: Emacs支持对多种文字的文本编辑,加上对多种字符集、字母系统、书写系统,以及不同文化的书写习惯都提供了支持,使得世界上大多数语言的使用者都能通过Emacs进行文本处理。Emacs还能通过调用诸如Aspell这样的外部程序,实现多种语言的拼写检查。GNU Emacs 24添加了对双向文字的支持。  Emacs支持包括UTF-8在内的诸多编码系统。GNU Emacs从23开始以UTF-8作为自身的编码系统,而在之前的版本,Emacs拥有一种特殊的内部编码系统MULE(MULti-language Environment),在读写文件时进行编码和解码。XEmacs编码系统和GNU Emacs相似,但具体的实现方法不完全一样。  一个叫做Emacspeak的子系统可以通过音频反馈,让拥有视觉障碍的用户和盲人用户使用Emacs。
title: 使用Emacs.
title: 命令.
content: 在普通的编辑模式下,GNU Emacs和其他文本编辑器一样,允许用户通过按下键盘上的键插入其相对应的字符,也可以使用键盘上的方向键来移动光标。使用各种修饰键(如[Ctrl]、[Alt]、[Shift]等)和其它的普通键配合可以调用Emacs Lisp函数和宏。  某些GNU Emacs命令会调用外部程序,比如使用Aspell进行拼写检查或者使用GCC进行程序编译,解析被调用的外部程序的输出,并将结果显示出来。习惯IBM Common User Access的用户可以使用“cua-mode”,“cua-mode”曾经是一个第三方插件,从GNU Emacs 22开始被包含在Emacs中。  下表给出了一些基本命令。[Ctrl]键以大写"C"表示,[Meta]键[Alt]键以大写"M"表示。  注:中文系统C-[空格]一般为系统输入法,可使用C-@代替。
title: 小缓冲.
content: Emacs使用“小缓冲”(通常在最下面一行)显示信息提示以及输入命令和命令参数。在合适的情况下,小缓冲支持使用制表键或空格键补全。每个frame只有一个小缓冲。
title: 文件管理与显示.
content: Emacs将文本存放在缓冲区中。用户可以创建新的缓冲区,也可以关闭不需要的缓冲区,Emacs可以同时存在很多缓冲区。大部分的缓冲区的文本来自文本文件,用户可以编辑缓冲区的内容,并且保存到磁盘上。缓冲区也可以保存临时文本,比如“help”库显示的文档字符串。
title: Emacs小拇指.
content: 很多Emacs用户都有过重复性劳损的经历,原因是Emacs强烈依赖Ctrl键和Meta键,也由于Ctrl键在现代键盘中的位置。  解决方法有软件方法,也有硬件方法。软件方法包括:  硬件方法包括使用特殊的键盘,如Kinesis键盘的修饰键放在大拇指很容易按到的位置,或者微软自然键盘,它的修饰键对称的放置在键盘的两边,并且可以使用手掌按下。脚控踏板也是一种方法。  如果使用普通键盘,可以在按Ctrl组合键时手掌下移,用无名指击Ctrl,或者直接以小指掌骨压下Ctrl,以规避小指过度利用。  “Emacs小拇指”是近些年才出现的。在Emacs诞生时,键盘的Ctrl键非常大,并且在空格键的旁边,使用大拇指很容易按。  Vim 的拥护者经常以Emacs小拇指作为切换编辑器的原因,虽然有些 Vim 用户(因为相似的原因)也会交换模式转换键和大小写转换键的功能。

Summary: Emacs(,源自Editor MACroS,宏编辑器),是一个文本编辑器家族,具有强大的可扩展性,在程序员和其他以技术工作为主的计算机用户中广受欢迎。最初由Richard Stallman于1975年在MIT协同盖伊·史提尔二世共同完成。这一创意的灵感来源于TECO宏编辑器TECMAC和TMACS,它们是由盖伊·史提尔二世、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。

Emacs: Emacs [] ist eine Familie von Texteditoren. Die erste Emacs-Implementierung wurde von Richard Stallman (zusammen mit Guy L. Steele, Jr. und anderen) entwickelt. Besonders populär ist heute der GNU Emacs, der durch seine Programmierschnittstelle in der Programmiersprache Emacs Lisp mit beliebigen Erweiterungen ausgestattet werden kann. Es gibt aber auch noch eine Vielzahl von anderen Editoren, die zur Emacs-Familie zählen.