标题：emacs
简介
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这种有着极强扩展性的编程语言，从而实现了包括编程、编译乃至网络浏览等等功能的扩展。[1]
发展历史
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的说法，他采用这个名字是“因为当时<E>在ITS里还没有被当作缩写用过。”（"because <E> was not in use as an abbreviation on ITS at the time." ）也有说法指出，当时波士顿在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功能的操作系统中，在基于编辑器的功能基础上，Emacs自行开发了一个“bourne-shell-like”的shell: EShell。Emacs还可以：
收发电子邮件
通过FTP/TRAMP编辑远程档案
通过Telnet登录主机
上新闻组
登陆IRC和朋友交流
查看日历
撰写文章大纲
对多种编程语言的编辑
调试程序，结合GDB，EDebug等。支持C/C++，Perl，Python，Lisp等等
玩游戏
计算器
记日记
煮咖啡
管理日程，Task，ToDo，约会等
个人信息管理
目录管理
文件比较
阅读info和man文档
浏览网站
为各种程序（TeX等）提供统一的操作界面
……
特点
display editor
实时编辑器
高级编辑器
Self-documenting
可定制性
可扩展性（集成Lisp语言）
支持X Window环境
各平台上的Emacs
Emacs是目前世界上最具可移植性的重要软件之一，能够在当前大多数操作系统上运行，包括类Unix系统（GNU/Linux、各种BSD、Solaris、AIX、IRIX、Mac OS X等等）、MS-DOS、Microsoft Windows以及OpenVMS等，还有移动Android平台以及iOS。
Emacs既可以在文本终端也可以在图形用户界面（GUI）环境下运行。在类Unix系统上，Emacs使用X Window产生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的快捷键都是绑定于ctrl和alt(或称meta)上的，例如c-x就是ctrl+x，m-x就是alt+x。当然所有的按键都可以自定义。
当要退出编辑时C-x C-c 代表着,先按C-x 再按C-c才可以退出编辑环境．
文件操作
C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件
C-x C-v 打开一个文件，取代当前缓冲区
C-x C-s 保存文件
C-x C-w 存为新文件
C-x i 插入文件
C-x C-q 切换为只读或者读写模式
C-x C-c 退出Emacs
编辑操作
C-f 前进一个字符
C-b 后退一个字符
M-f 前进一个单词
M-b 后退一个单词
C-a 移到行首
C-e 移到行尾
M-a 移到句首
M-e 移到句尾
C-p 后退一行
C-n 前进一行
M-x goto-line 跳到指定行
C-v 向下翻页
M-v 向上翻页
M-< 缓冲区头部
M-> 缓冲区尾部
C-M-f 向前匹配括号
C-M-b 向后匹配括号
C-l 当前行居中
M-n or C-u n 重复操作随后的命令n次
C-u 重复操作随后的命令4次
C-u C-u 重复操作随后的命令8次
C-x ESC ESC 执行历史命令记录，M-p选择上一条命令，M-n选择下一条命令
C-d 删除一个字符
M-d 删除一个单词
C-k 删除一行
M-k 删除一句
C-w 删除标记区域
C-y 粘贴删除的内容
注意：C-y可以粘贴连续C-k删除的内容；先按C-y，然后按M-y可以选择粘贴被删除的内容
C-@ 标记开始区域
C-x h 标记所有文字
C-x C-x 交换光标位置和区域标记区开头
M-w 复制标记区域
C-_ or C-x u 撤消操作
执行SHELL命令
M-x shell 打开SHELL
M-! 执行SHELL命令 (shell-command)
M-1 M-! 执行SHELL命令,命令输出插入光标位置,不打开新输出窗口
M-| 针对某一特定区域执行命令(shell-command-on-region), 比如 C-x h M-|uuencode
窗口操作
C-x 0 关闭本窗口
C-x 1 只留下一个窗口
C-x 2 垂直均分窗口
C-x 3 水平均分窗口
C-x o 切换到别的窗口
C-x s 保存所有窗口的缓冲
C-x b 选择当前窗口的缓冲区
C-x ^ 纵向扩大窗口
C-x } 横向扩大窗口
缓冲区列表操作
C-x C-b 打开缓冲区列表
d or k 标记为删除
~ 标记为未修改状态
% 标记为只读
s 保存缓冲
u 取消标记
x 执行标记的操作
f 在当前窗口打开该缓冲区
o 在其他窗口打开该缓冲区
目录操作
C-x d 打开目录模式
s 按日期/文件名排序显示
v 阅读光标所在的文件
q 退出阅读的文件
d 标记为删除
x 执行标记
D 马上删除当前文件
C 拷贝当前文件
R 重命名当前文件
+ 新建文件夹
Z 压缩文件
! 对光标所在的文件执行SHELL命令
g 刷新显示
i 在当前缓冲区的末尾插入子目录的内容
[n]m 标记光标所在的文件，如果指定n，则从光标所在的文件起后n个文件被标记
[n]u 取消当前光标标记的文件，n的含义同上
t 反向标记文件
%-m 正则标记
q 退出目录模式
说明：在目录模式中，如果输入!，在命令行中包含*或者?，有特殊的含义。*匹配当前光标所在的文件和所有标记的文件，?分别在每一个标记的文件上执行该命令。
程序编译
M-x compile 执行编译操作
M-x gdb GDB排错
M-x dbx DBX排错
M-x xdb XDB排错
M-x sdb SDB排错
搜索模式
C-s key 向前搜索
C-s 查找下一个
ENTER 停止搜索
C-r key 反向搜索
C-s C-w 以光标所在位置的字为关键字搜索
C-s C-s 重复上次搜索
C-r C-r 重复上次反向搜索
C-s ENTER C-w 进入单词搜索模式
C-r ENTER C-w 进入反向单词搜索模式
M-x replace-string ENTER search-string ENTER 替换
M-% search-string ENTER replace-string ENTER 交互替换
C-r 在进入查找/替换模式后，该命令进入迭代编辑模式
C-M-x 退出迭代编辑模式，返回到查找/替换模式
C-M-s 向前正则搜索
C-M-r 向后正则搜索
C-M-% 正则交互替换
SHELL模式
C-c C-c 相当于Bash下的C-c
C-c C-z 相当于Bash下的C-z
C-c C-d 相当于Bash下的C-d
M-p 执行前一条命令
M-n 执行下一条命令
C-c C-o 删除最后一条命令产生的输出
C-c C-r 屏幕滚动到最后一条命令输出的开头
C-c C-e 屏幕滚动到最后一套命令输出的结尾
C-c C-p 查看前一条命令的输出
C-c C-n 查看后一条命令的输出
打印资料
M-x print-buffer 先使用pr,然后使用lpr
M-x lpr-buffer 直接使用lpr
M-x print-region
M-x lpr-region
收发邮件
M-x mail 发送邮件, C-c C-s 发送,C-c C-c 发送并退出
M-x rmail 接受邮件
用 gnus 收发邮件，阅读新闻组
M-x gnus 可以通过强大的 gnus 来收发邮件，阅读新闻组。可以参考 [2]
或者阅读 gnus 自带的 manual 来获得详细信息。
定制
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的版权遵从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）。
附加组件
在Ubuntu 11.04版本上，安装 Emacs 的同时还会安装以下组件：
保持X剪贴板和缓冲区之间的同步 （autocutsel）
邮件美化 （muttprint）
详细信息
总大小：下载23.8MB，安装所需空间73.6MB
版本：23.2+1-7ubuntu2 （emacs23）
许可协议：开放源代码
更新：Cononical提供GNU Emacs23的关键更新至2012年十月。
版本发布
随后的几年里，开发出了许多运行于其他操作系统的类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给丢掉了，因为原来的记法给人一种主版本号永远不变的感觉。因此，Version 13是第一个public release，它发布于1985年3月20日。
GNU Emacs和Gosling Emacs一样运行在Unix系统上。不过GNU Emacs的功能更多，特别是它有一个真正的lisp作为扩展。结果，GNU Emacs很快就取代了Gosling Emacs，成为Unix系统上事实的Emacs编辑器。
1999年之前，GNU Emacs的开发相对封闭，以至于到了在《大教堂与市集》这本书里被用作“教堂式”开发的典范这样一个程度。在那以后这个项目就采用了公开的开发邮件列表和匿名CVS访问。开发工作在一个单独的CVS trunk中进行，目前的版本号是22.0.93（这篇文章比较老，现在已经有23.0的版本了）(2012年6月10日发布24.1)。现在它的维护者是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类编辑器中最受欢迎的选择。