fbpx
维基百科

Emacs

Emacs/ˈmæks/,源自Editor MACroS编辑器),是一个文本编辑器家族,它具有可扩展性,使用者以程序员和其他以技术工作为主的计算机用户為主。最初由Richard Stallman於1975年在MIT协同蓋伊·史提爾二世共同完成。这一创意的灵感来源于TECO宏编辑器TECMAC和TMACS,它们是由蓋伊·史提爾二世、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。

GNU Emacs
GNU Emacs 23.1.1,首个在X Window系統上支持抗锯齿的版本。
原作者理查德·斯托曼蓋伊·史提爾二世
開發者GNU計劃
目前版本
  • 28.2 (2022年9月12日;穩定版本)[1]
操作系统GNU/LinuxFreeBSDAIX 4.3.3或更高、macOSMS-DOSWindowsNetBSDOpenBSDSolaris
类型文本编辑器
许可协议GNU通用公共许可证
网站www.gnu.org/software/emacs/ 

自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种分别是:1984年由理查·斯托曼发起并由他维护至2008年的GNU Emacs,以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。它们都使用了Emacs Lisp这种有着极强扩展性的编程语言,从而实现了包括编程编译乃至网络浏览等等功能的扩展。

Unix文化裡,Emacs是黑客们关于编辑器之战的两大主角之一,它的对手是viVim)。

历史

Emacs在1970年代诞生于MIT人工智能实验室(MIT AI Lab)。在此之前,人工智能实验室的PDP-6PDP-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”。

根据斯托曼的说法,他采用这个名字是“因为当时<E>在ITS裡还没有被当作缩写用过”[2]。也有说法指出,当时波士顿在MIT附近有家名为“Emack & Bolio's英语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人工智能实验室和它的计算机科学实验室的主流编辑器了。

其他早期实现

后来几年,程序员们写了很多类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成为专有软件

GNU Emacs

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[4]。他在mail list上發出以下內容:

XEmacs

1991年,Lucid公司的Jamie Zawinski等人以GNU Emacs 19的一个早期alpha版为基础,添加了一些新的特性,开发出Lucid Emacs。很快,Lucid Emacs的开发与GNU Emacs渐行渐远,最终双方的团队放弃了将两者合并的努力。Lucid Emacs被重新命名为XEmacs;至今为止,XEmacs仍然是最流行的Emacs变种之一。

其他GNU Emacs的衍生版本

其他的衍生版本,包括:

  • Meadow - 一个Windows下的日语版本
  • SXEmacs - Steve Youngs实现的衍生版本,基于XEmacs
  • Aquamacs - 一个致力于与苹果的OS X整合的Emacs版本

其他Emacs变种

除上述编辑器以外,还有很多不基于GNU Emacs的编辑器,有些项目的目标是创建一个精简版的Emacs。在1980年代,GNU Emacs只能在很高端的电脑上运行,这就为精简版的Emacs实现的出现奠定了基础。还有一些Emacs变种是为了克隆一个完整的Emacs,但是使用不同的Lisp方言或者其他的编程语言。比如:

  • MicroEMACS,原作者是Dave Conroy,后来由Daniel Lawrence进一步开发,有很多变种。
  • Mg,原名MicroGNUEmacs,是一个MicroEMACS的公共领域分支,比MicroGNUEmacs更加接近于GNU Emacs。现在默认安装在OpenBSD上。
  • NotGNU,一个小型、快速的Emacs实现,是免费软件,支持DOS、Win16、Win32和GNU/Linux,作者为Julie Melbin。
  • JOVE(Jonathan's Own Version of Emacs),Jonathan Payne为类Unix系统写的Emacs不可编程的Emacs实现。
  • Zile是Zile Is Lossy Emacs的递归缩写,以C语言编写。
  • Climacs,以Common Lisp编写的Emacs变种。
  • QEmacs,一个由Fabrice Bellard编写的小型编辑器,支持UTF-8,可以快速编辑上百兆大小的文件。
  • Epsilon,一个由Lugaru Software开发的Emacs变种。支持MS-DOS、MS-Windows、GNU/Linux、FreeBSD、O/S 2等操作系统。它使用了一个与C语言语法类似的非Lisp语言作为扩展语言。
  • EmACT,1986年由Christian Jullien从MicroEmacs衍生而来,源代码可以在SourceForge获取。
  • Hemlock,最初以Spice Lisp实现,后来改为Common Lisp。Hemlock是CMU Common Lisp的一部分,受到了Zmacs的影响。

可以模拟Emacs的编辑器

  • Yi,以Haskell语言编写,内置一个Emacs模拟器。
  • Joe's Own Editor内置一个Emacs模拟器。
  • JED内置一个Emacs模拟器。

版权

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)。

功能特点

Emacs不仅仅是一个编辑器,它是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。Emacs可以:

  • 收发电子邮件、上新闻组(Gnus)
  • 無縫直接编辑远程档案(Tramp)
  • 通过Telnet登录远程主机
  • 操作殼層(M-x EShell,Term)
  • 結合git, mercurial等版本控制系統並直接操作(Magit,VC)
  • 上Twitter(Twittering-mode)
  • 登陆IRC和朋友交流(M-x ERC,rcirc)
  • 电子数据表
  • 模拟其他编辑器,如vi(Evil-mode)、WordStar、EDT、TPU等
  • 编辑Wiki (Wikipedia-mode)
  • 对多种编程语言编辑,如C/C++、PerlPythonLisp等等
  • 调试程序,结合GDB,EDebug等。
  • 玩游戏
  • 计算器
  • 心理咨询(M-x doctor)
  • 煮咖啡
  • 记笔记、日记(Org-mode)
  • 管理日程,Task,待辦事項(ToDo),约会等GTD(Org-mode)
  • 寫作與出版(Org-mode,Muse-mode)
  • 目录管理(Dired)
  • 文件比较、合并(Ediff)
  • 阅读info和man文档(M-x info,woman)
  • 浏览网站(M-x eww)
  • 为各种程序(TeXLaTeX等)提供统一的操作界面
  • ……

此外Emacs还有如下特点:

  1. 实时编辑器
  2. Self-documenting
  3. 可定制性
  4. 可扩展性(集成Lisp语言)

可定制性

GNU Emacs几乎所有的功能都可以定制,有的可以通过C语言实现,有的可以通过一个Lisp的方言——Emacs Lisp来实现。在Lisp环境中,变量子程序可以在不重新编译/启动Emacs的前提下被修改。Emacs用户可以根据自身的需要和偏好对编辑器进行定制。强大而自由的个人定制功能是Emacs受到广泛欢迎的重要原因之一。定制Emacs主要有三种方法:

  1. 使用Emacs的交互式定制功能(即customize)。Emacs提供了图形化的交互界面,使用户能够对可定制的公共变量进行设置,也可以定制配色主题。这种方法使Emacs的初学者不需要接触Emacs Lisp代码即可完成定制。
  2. 将一系列按键记录为宏,调用这一宏可以自动重复进行已经记录的一系列复杂操作。宏可以保存并命名,以便按名调用,不过同一时刻只能存在一个匿名的宏。
  3. 通过使用Emacs Lisp完成Emacs的定制。这种方法最为复杂,但是也提供了更多的灵活性和更强大的功能。用户通常将个人定制的Emacs Lisp代码保存在一个名为.emacs(.el)(或init.el)的配置文件中,Emacs程序运行之初便读取这一文件,完成用户要求的配置。用户可以通过.emacs文件重设变量、重新定义按键的绑定(key bindings)、以及定义新的命令,以方便用户个人的使用。很多高级用户的.emacs文件的个性化配置长达数百行甚至更多,这些个人的定制使他们的Emacs不仅与默认配置的功能不同,每个人的Emacs之间也千差万别。这种差异能很好的满足不同个性的偏好和不同工作的需求。

如果一段Emacs Lisp代码确实有用,它通常会被打包并发布给其他用户。在因特网上能找到很多这样来自第三方的Emacs Lisp库,例如能用于编辑维基百科条目的wikipedia-modeUsenet上的新闻组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词条(页面存档备份,存于互联网档案馆)。

性能

在GNU Emacs刚诞生时,它比相同系统上的其他编辑器运行速度要慢很多,但是现代的电脑可以很快地运行GNU Emacs。早期的GNU Emacs可以处理256 MB以下的文件,GNU Emacs 23.2将这一限制提升到512 MB,而在64位系统的GNU Emacs 24中,这个限制是大约2 EiB。

平台

Emacs是目前世界上最具可移植性的重要软件之一,能够在当前绝大多数操作系统上运行,包括各种类Unix系统GNU/LinuxFreeBSDNetBSDOpenBSDSolarisAIXOS X等)、MS-DOSMicrosoft 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)等交互方式。

编辑模式

主模式

Emacs采取的编辑方式是对不同类型的文本进入相应的编辑模式,即“主模式”(major mode)。Emacs针对多种文档定义了不同的主模式,包括普通文本文件、各种编程语言的源文件、HTML文档、TEXLaTeX文档,以及其他类型的文本文件等等。

每种主模式都有特殊的Emacs Lisp变量和函数,使用户在这种模式下能更方便的处理这一特定类型的文本。例如,各种编程语言的主模式通常会提供:

  • 语法高亮(“font lock”):对源文件文本中的关键字、注释加以不同的字体和颜色(“faces”)。
  • 自动缩进,用来维护文件的格式一致。
  • 自动插入文件所需要的结构元素,如空格、换行以及括号。
  • 特殊的编辑命令,比如跳转到函数的开头或者结尾,或者(在类似于XML的标记语言中)验证文档还有插入关闭标签。

次模式

Emacs还能进一步定义“次模式”(minor mode),用以深度定制Emacs。一个GNU Emacs的缓冲区(buffer)只能关联于一种主模式,却能同时关联多个次模式。比如,编写C语言的主模式可以同时定义多个次模式,每个次模式有着不同的缩进风格(indent style)。

国际化

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。

使用Emacs

命令

在普通的编辑模式下,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表示。

命令 快捷键 功能
forward-word M-f 向前移动一个单词。
isearch-forword C-s 递增搜索
undo C-/ 撤销最后一次操作,如果多次执行则取消以前的操作。
keyboard-quit C-g 取消当前的命令。
find-file C-x C-f 在一个新的缓冲区里访问某个文件(用户给定文件名)。
save-buffer C-x C-s 将缓冲区的内容保存到文件。
save-some-buffers C-x s 保存所有的缓冲区
save-with-newname C-x C-w 将缓冲区的内容另存为一个新的文件。
save-buffers-kill-emacs C-x C-c 提示是否保存文件,然后退出Emacs。
set-mark-command C-[空格] 设定标记,用于剪切或复制。
kill-region C-w 剪切标记到当前光标所在处的文本。
kill-ring-save M-w 复制标记到当前光标所在处的文本。
yank C-y 从Emacs的剪贴板中粘贴文本。
kill-buffer C-x k 关闭当前buffer。

注:中文系统C-[空格]一般为系统输入法,可使用C-@代替。

小缓冲

Emacs使用“小缓冲”(通常在最下面一行)显示信息提示以及输入命令和命令参数。在合适的情况下,小缓冲支持使用制表键或空格键补全。每个frame只有一个小缓冲。

文件管理与显示

Emacs将文本存放在缓冲区中。用户可以创建新的缓冲区,也可以关闭不需要的缓冲区,Emacs可以同时存在很多缓冲区。大部分的缓冲区的文本来自文本文件,用户可以编辑缓冲区的内容,并且保存到磁盘上。缓冲区也可以保存临时文本,比如“help”库显示的文档字符串。

编程语言支持

Python

  • Emacs 内建的 python-mode
  • Elpy

Emacs小拇指

很多Emacs用户都有过重複性勞損的经历,原因是Emacs强烈依赖Ctrl键和Meta键,也由于Ctrl键在现代键盘中的位置。

解决方法有软件方法,也有硬件方法。软件方法包括:

  • 使用 ergoemacs-mode 定制键盘布局。[5]
  • 定制键盘布局,使Ctrl和大寫鎖定键交换位置。其他相似的方法包括将大写锁定键定义为Ctrl,或交换Ctrl和Meta键。
  • god-mode 可以让 Emacs 不用修饰键就触发命令。
  • 使用 evil-mode,一个高级的 Vim 模拟层。
  • Emacs有一个内置的“Viper-mode”,允许用户使用vi的键绑定来进行基本的文本编辑,而使用Emacs本身的键绑定来进行更高级的操作。
  • 让一个更容易按的键(如空格键)拥有多种功能,当那个键和其他键一起按下时,功能为Ctrl键的。
  • 使用语音输入控制Emacs。
  • 很多软件,如xwrits,可以提醒用户进行定期的休息。

硬件方法包括使用特殊的键盘,如Kinesis键盘的修饰键放在大拇指很容易按到的位置,或者微软自然键盘,它的修饰键对称的放置在键盘的两边,并且可以使用手掌按下。脚控踏板也是一种方法。

如果使用普通鍵盤,可以在按Ctrl組合鍵時手掌下移,用無名指擊Ctrl,或者直接以小指掌骨压下Ctrl,以規避小指過度利用。

“Emacs小拇指”是近些年才出现的。在Emacs诞生时,键盘的Ctrl键非常大,并且在空格键的旁边,使用大拇指很容易按。

Vim 的拥护者经常以Emacs小拇指作为切换编辑器的原因,虽然有些 Vim 用户(因为相似的原因)也会交换模式转换键和大小写转换键的功能。[6]

外部链接

  • GNU Emacs官方网站(页面存档备份,存于互联网档案馆),包括:
  • A paper on the design of the original Emacs(页面存档备份,存于互联网档案馆),by Stallman
  • "Multics Emacs: The History, Design and Implementation"(页面存档备份,存于互联网档案馆) by B. Greenberg
  • "Emacs Timeline"(页面存档备份,存于互联网档案馆) by J. Zawinski
  • by C. Finseth
  • Reviewed entry(页面存档备份,存于互联网档案馆) in the Free Software Directory
  • Emacs实现列表(页面存档备份,存于互联网档案馆
  • WikEmacs(页面存档备份,存于互联网档案馆
  • Emacs China中文论坛(页面存档备份,存于互联网档案馆
  • Emacs Wiki(页面存档备份,存于互联网档案馆):一个关于Emacswiki。网站上有英语汉语等多种语言。EmacsWiki主要是提供一些Emacs的使用教程、技巧和用户贡献的配置文件[7][8][9]。像其他wiki一样,所有人都可以编辑。不过EmacsWiki没有注册的制度,不需要账户就可以编辑整个wiki。[10]

参考文献

  1. ^ Emacs 28.2 released. 2022年9月12日 [2022年9月13日]. 
  2. ^ 原文:because <E> was not in use as an abbreviation on ITS at the time.
  3. ^ 原文:EMACS was distributed on a basis of communal sharing, which means all improvements must be given back to me to be incorporated and distributed.
  4. ^ Re: Looking for a new Emacs maintainer or team. gnu.org Mailing List. [2008-02-23]. (原始内容于2011-06-03). (英文),参见"Stallman on handing over GNU Emacs, its future and the importance of nomenclature" (页面存档备份,存于互联网档案馆(英文)
  5. ^ ergoemacs-mode. [2015-02-17]. (原始内容于2015-06-27). 
  6. ^ VimとEmacsのあいだで小指痛を叫んだけもの. 2007-10-14 [2015-02-17]. (原始内容于2015-02-17) (日语). 
  7. ^ . Emacs中文网. [2012-05-29]. (原始内容存档于2012-06-20). 
  8. ^ Emacs Wiki. [2012-05-29]. (原始内容于2012-05-23). 
  9. ^ redguardtoo. 一年成为Emacs高手(像神一样使用编辑器). csdn. [2012-05-29]. (原始内容于2013-04-30). 
  10. ^ EmacsWiki: Site Map. [2012-05-29]. (原始内容于2012-12-06). You can edit this website. There’s a link, Edit this page, at the bottom of this and other pages. Please check SiteMap Discussion before editing this SiteMap page, however. 
  • 注:本文第一部分,部分引用自遵守GFDL的《Emacs用户指南》汉译版

参见

emacs, 源自editor, macros, 宏编辑器, 是一个文本编辑器家族, 它具有可扩展性, 使用者以程序员和其他以技术工作为主的计算机用户為主, 最初由richard, stallman於1975年在mit协同蓋伊, 史提爾二世共同完成, 这一创意的灵感来源于teco宏编辑器tecmac和tmacs, 它们是由蓋伊, 史提爾二世, dave, moon, richard, greenblatt, charles, frankston等人编写的宏文本编辑器, 首个在x, window系統上支持抗锯齿的版本. Emacs ˈ iː m ae k s 源自Editor MACroS 宏编辑器 是一个文本编辑器家族 它具有可扩展性 使用者以程序员和其他以技术工作为主的计算机用户為主 最初由Richard Stallman於1975年在MIT协同蓋伊 史提爾二世共同完成 这一创意的灵感来源于TECO宏编辑器TECMAC和TMACS 它们是由蓋伊 史提爾二世 Dave Moon Richard Greenblatt Charles Frankston等人编写的宏文本编辑器 GNU EmacsGNU Emacs 23 1 1 首个在X Window系統上支持抗锯齿的版本 原作者理查德 斯托曼和蓋伊 史提爾二世開發者GNU計劃目前版本28 2 2022年9月12日 穩定版本 1 操作系统GNU Linux FreeBSD AIX 4 3 3或更高 macOS MS DOS Windows NetBSD OpenBSD Solaris等类型文本编辑器许可协议GNU通用公共许可证网站www wbr gnu wbr org software emacs 自诞生以来 Emacs演化出了众多分支 其中使用最广泛的两种分别是 1984年由理查 斯托曼发起并由他维护至2008年的GNU Emacs 以及1991年发起的XEmacs XEmacs是GNU Emacs的分支 至今仍保持着相当的兼容性 它们都使用了Emacs Lisp这种有着极强扩展性的编程语言 从而实现了包括编程 编译乃至网络浏览等等功能的扩展 在Unix文化裡 Emacs是黑客们关于编辑器之战的两大主角之一 它的对手是vi Vim 目录 1 历史 1 1 其他早期实现 1 2 GNU Emacs 1 3 XEmacs 1 4 其他GNU Emacs的衍生版本 1 5 其他Emacs变种 1 6 可以模拟Emacs的编辑器 2 版权 3 功能特点 3 1 可定制性 3 2 性能 3 3 平台 3 4 编辑模式 3 4 1 主模式 3 4 2 次模式 3 5 国际化 4 使用Emacs 4 1 命令 4 2 小缓冲 4 3 文件管理与显示 4 4 编程语言支持 4 4 1 Python 4 5 Emacs小拇指 5 外部链接 6 参考文献 7 参见历史 编辑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 根据斯托曼的说法 他采用这个名字是 因为当时 lt E gt 在ITS裡还没有被当作缩写用过 2 也有说法指出 当时波士顿在MIT附近有家名为 Emack amp Bolio s 英语 Emack amp Bolio s 的商店出售的冰淇淋很受欢迎 Dave Moon是那裡的老主顾 他就将ITS上一个给文本排版的程序命名为BOLIO 然而斯托曼并不喜欢甚或根本不知道那种冰淇淋 此事后来成了黑客界的一桩公案 斯托曼意识到过多的定制 在开发过程中事实上的分支以及针对特殊用途的限制 威胁着Emacs的发展 后来他写道 Emacs的发布基于社群共享 这意味着所有的发展都要反馈给我 由我进行整合和发布 3 最初的Emacs同TECO一样只能运行在PDP系列的电脑上 Emacs虽然是在TECO的基础上发展起来的 不过它已经足以被认为是一个新的文本编辑器了 很快 Emacs就成为ITS上的标准编辑程序 接着由Michael McMahon从ITS移植到Tenex和TOPS 20操作系统上 其他Emacs早期的贡献者还包括Kent Pitman Earl Killian和Eugene Ciccarelli 到了1979年 Emacs已经是MIT人工智能实验室和它的计算机科学实验室的主流编辑器了 其他早期实现 编辑 后来几年 程序员们写了很多类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成为专有软件 GNU Emacs 编辑 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 4 他在mail list上發出以下內容 From Richard StallmanSubject Re Looking for a new Emacs maintainer or team Date Fri 22 Feb 2008 17 57 22 0500 Stefan和Yidong願意接管 所以我也樂意將Emacs開發工作移交给他們 XEmacs 编辑 1991年 Lucid公司的Jamie Zawinski等人以GNU Emacs 19的一个早期alpha版为基础 添加了一些新的特性 开发出Lucid Emacs 很快 Lucid Emacs的开发与GNU Emacs渐行渐远 最终双方的团队放弃了将两者合并的努力 Lucid Emacs被重新命名为XEmacs 至今为止 XEmacs仍然是最流行的Emacs变种之一 其他GNU Emacs的衍生版本 编辑 其他的衍生版本 包括 Meadow 一个Windows下的日语版本 SXEmacs Steve Youngs实现的衍生版本 基于XEmacs Aquamacs 一个致力于与苹果的OS X整合的Emacs版本其他Emacs变种 编辑 除上述编辑器以外 还有很多不基于GNU Emacs的编辑器 有些项目的目标是创建一个精简版的Emacs 在1980年代 GNU Emacs只能在很高端的电脑上运行 这就为精简版的Emacs实现的出现奠定了基础 还有一些Emacs变种是为了克隆一个完整的Emacs 但是使用不同的Lisp方言或者其他的编程语言 比如 MicroEMACS 原作者是Dave Conroy 后来由Daniel Lawrence进一步开发 有很多变种 Mg 原名MicroGNUEmacs 是一个MicroEMACS的公共领域分支 比MicroGNUEmacs更加接近于GNU Emacs 现在默认安装在OpenBSD上 NotGNU 一个小型 快速的Emacs实现 是免费软件 支持DOS Win16 Win32和GNU Linux 作者为Julie Melbin JOVE Jonathan s Own Version of Emacs Jonathan Payne为类Unix系统写的Emacs不可编程的Emacs实现 Zile是Zile Is Lossy Emacs的递归缩写 以C语言编写 Climacs 以Common Lisp编写的Emacs变种 QEmacs 一个由Fabrice Bellard编写的小型编辑器 支持UTF 8 可以快速编辑上百兆大小的文件 Epsilon 一个由Lugaru Software开发的Emacs变种 支持MS DOS MS Windows GNU Linux FreeBSD O S 2等操作系统 它使用了一个与C语言语法类似的非Lisp语言作为扩展语言 EmACT 1986年由Christian Jullien从MicroEmacs衍生而来 源代码可以在SourceForge获取 Hemlock 最初以Spice Lisp实现 后来改为Common Lisp Hemlock是CMU Common Lisp的一部分 受到了Zmacs的影响 可以模拟Emacs的编辑器 编辑 Yi 以Haskell语言编写 内置一个Emacs模拟器 Joe s Own Editor内置一个Emacs模拟器 JED内置一个Emacs模拟器 版权 编辑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 功能特点 编辑Emacs不仅仅是一个编辑器 它是一个整合环境 或可称它为集成开发环境 这些功能如让使用者置身于全功能的操作系统中 Emacs可以 收发电子邮件 上新闻组 Gnus 無縫直接编辑远程档案 Tramp 通过Telnet登录远程主机 操作殼層 M x EShell Term 結合git mercurial等版本控制系統並直接操作 Magit VC 上Twitter Twittering mode 登陆IRC和朋友交流 M x ERC rcirc 电子数据表 模拟其他编辑器 如vi Evil mode WordStar EDT TPU等 编辑Wiki Wikipedia mode 对多种编程语言的编辑 如C C Perl Python Lisp等等 调试程序 结合GDB EDebug等 玩游戏 计算器 心理咨询 M x doctor 煮咖啡 记笔记 日记 Org mode 管理日程 Task 待辦事項 ToDo 约会等GTD Org mode 寫作與出版 Org mode Muse mode 目录管理 Dired 文件比较 合并 Ediff 阅读info和man文档 M x info woman 浏览网站 M x eww 为各种程序 TeX LaTeX等 提供统一的操作界面 此外Emacs还有如下特点 实时编辑器 Self documenting 可定制性 可扩展性 集成Lisp语言 可定制性 编辑 GNU Emacs几乎所有的功能都可以定制 有的可以通过C语言实现 有的可以通过一个Lisp的方言 Emacs Lisp来实现 在Lisp环境中 变量和子程序可以在不重新编译 启动Emacs的前提下被修改 Emacs用户可以根据自身的需要和偏好对编辑器进行定制 强大而自由的个人定制功能是Emacs受到广泛欢迎的重要原因之一 定制Emacs主要有三种方法 使用Emacs的交互式定制功能 即customize Emacs提供了图形化的交互界面 使用户能够对可定制的公共变量进行设置 也可以定制配色主题 这种方法使Emacs的初学者不需要接触Emacs Lisp代码即可完成定制 将一系列按键记录为宏 调用这一宏可以自动重复进行已经记录的一系列复杂操作 宏可以保存并命名 以便按名调用 不过同一时刻只能存在一个匿名的宏 通过使用Emacs Lisp完成Emacs的定制 这种方法最为复杂 但是也提供了更多的灵活性和更强大的功能 用户通常将个人定制的Emacs Lisp代码保存在一个名为 emacs el 或init el 的配置文件中 Emacs程序运行之初便读取这一文件 完成用户要求的配置 用户可以通过 emacs文件重设变量 重新定义按键的绑定 key bindings 以及定义新的命令 以方便用户个人的使用 很多高级用户的 emacs文件的个性化配置长达数百行甚至更多 这些个人的定制使他们的Emacs不仅与默认配置的功能不同 每个人的Emacs之间也千差万别 这种差异能很好的满足不同个性的偏好和不同工作的需求 如果一段Emacs Lisp代码确实有用 它通常会被打包并发布给其他用户 在因特网上能找到很多这样来自第三方的Emacs Lisp库 例如能用于编辑维基百科条目的wikipedia mode 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词条 页面存档备份 存于互联网档案馆 性能 编辑 在GNU Emacs刚诞生时 它比相同系统上的其他编辑器运行速度要慢很多 但是现代的电脑可以很快地运行GNU Emacs 早期的GNU Emacs可以处理256 MB以下的文件 GNU Emacs 23 2将这一限制提升到512 MB 而在64位系统的GNU Emacs 24中 这个限制是大约2 EiB 平台 编辑 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 等交互方式 编辑模式 编辑 主模式 编辑 Emacs采取的编辑方式是对不同类型的文本进入相应的编辑模式 即 主模式 major mode Emacs针对多种文档定义了不同的主模式 包括普通文本文件 各种编程语言的源文件 HTML文档 TEX与LaTeX文档 以及其他类型的文本文件等等 每种主模式都有特殊的Emacs Lisp变量和函数 使用户在这种模式下能更方便的处理这一特定类型的文本 例如 各种编程语言的主模式通常会提供 语法高亮 font lock 对源文件文本中的关键字 注释加以不同的字体和颜色 faces 自动缩进 用来维护文件的格式一致 自动插入文件所需要的结构元素 如空格 换行以及括号 特殊的编辑命令 比如跳转到函数的开头或者结尾 或者 在类似于XML的标记语言中 验证文档还有插入关闭标签 次模式 编辑 Emacs还能进一步定义 次模式 minor mode 用以深度定制Emacs 一个GNU Emacs的缓冲区 buffer 只能关联于一种主模式 却能同时关联多个次模式 比如 编写C语言的主模式可以同时定义多个次模式 每个次模式有着不同的缩进风格 indent style 国际化 编辑 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 使用Emacs 编辑命令 编辑 在普通的编辑模式下 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表示 命令 快捷键 功能forward word M f 向前移动一个单词 isearch forword C s 递增搜索undo C 撤销最后一次操作 如果多次执行则取消以前的操作 keyboard quit C g 取消当前的命令 find file C x C f 在一个新的缓冲区里访问某个文件 用户给定文件名 save buffer C x C s 将缓冲区的内容保存到文件 save some buffers C x s 保存所有的缓冲区save with newname C x C w 将缓冲区的内容另存为一个新的文件 save buffers kill emacs C x C c 提示是否保存文件 然后退出Emacs set mark command C 空格 sup 注 sup 设定标记 用于剪切或复制 kill region C w 剪切标记到当前光标所在处的文本 kill ring save M w 复制标记到当前光标所在处的文本 yank C y 从Emacs的剪贴板中粘贴文本 kill buffer C x k 关闭当前buffer 注 中文系统C 空格 一般为系统输入法 可使用C 代替 小缓冲 编辑 Emacs使用 小缓冲 通常在最下面一行 显示信息提示以及输入命令和命令参数 在合适的情况下 小缓冲支持使用制表键或空格键补全 每个frame只有一个小缓冲 文件管理与显示 编辑 Emacs将文本存放在缓冲区中 用户可以创建新的缓冲区 也可以关闭不需要的缓冲区 Emacs可以同时存在很多缓冲区 大部分的缓冲区的文本来自文本文件 用户可以编辑缓冲区的内容 并且保存到磁盘上 缓冲区也可以保存临时文本 比如 help 库显示的文档字符串 编程语言支持 编辑 Python 编辑 Emacs 内建的 python mode ElpyEmacs小拇指 编辑 很多Emacs用户都有过重複性勞損的经历 原因是Emacs强烈依赖Ctrl键和Meta键 也由于Ctrl键在现代键盘中的位置 解决方法有软件方法 也有硬件方法 软件方法包括 使用 ergoemacs mode 定制键盘布局 5 定制键盘布局 使Ctrl和大寫鎖定键交换位置 其他相似的方法包括将大写锁定键定义为Ctrl 或交换Ctrl和Meta键 god mode 可以让 Emacs 不用修饰键就触发命令 使用 evil mode 一个高级的 Vim 模拟层 Emacs有一个内置的 Viper mode 允许用户使用vi的键绑定来进行基本的文本编辑 而使用Emacs本身的键绑定来进行更高级的操作 让一个更容易按的键 如空格键 拥有多种功能 当那个键和其他键一起按下时 功能为Ctrl键的 使用语音输入控制Emacs 很多软件 如xwrits 可以提醒用户进行定期的休息 硬件方法包括使用特殊的键盘 如Kinesis键盘的修饰键放在大拇指很容易按到的位置 或者微软自然键盘 它的修饰键对称的放置在键盘的两边 并且可以使用手掌按下 脚控踏板也是一种方法 如果使用普通鍵盤 可以在按Ctrl組合鍵時手掌下移 用無名指擊Ctrl 或者直接以小指掌骨压下Ctrl 以規避小指過度利用 Emacs小拇指 是近些年才出现的 在Emacs诞生时 键盘的Ctrl键非常大 并且在空格键的旁边 使用大拇指很容易按 Vim 的拥护者经常以Emacs小拇指作为切换编辑器的原因 虽然有些 Vim 用户 因为相似的原因 也会交换模式转换键和大小写转换键的功能 6 外部链接 编辑GNU Emacs官方网站 页面存档备份 存于互联网档案馆 包括 GNU Emacs常见问题解答 页面存档备份 存于互联网档案馆 GNU Emacs for Windows常见问题解答 页面存档备份 存于互联网档案馆 A paper on the design of the original Emacs 页面存档备份 存于互联网档案馆 by Stallman Multics Emacs The History Design and Implementation 页面存档备份 存于互联网档案馆 by B Greenberg Emacs Timeline 页面存档备份 存于互联网档案馆 by J Zawinski List of Emacs implementations by C Finseth Reviewed entry 页面存档备份 存于互联网档案馆 in the Free Software Directory Emacs实现列表 页面存档备份 存于互联网档案馆 WikEmacs 页面存档备份 存于互联网档案馆 Emacs中文网 已失效 Emacs China中文论坛 页面存档备份 存于互联网档案馆 中文Emacs User s Guide IBM dw教程 生活在Emacs中 Emacs Wiki 页面存档备份 存于互联网档案馆 一个关于Emacs的wiki 网站上有英语 汉语等多种语言 EmacsWiki主要是提供一些Emacs的使用教程 技巧和用户贡献的配置文件 7 8 9 像其他wiki一样 所有人都可以编辑 不过EmacsWiki没有注册的制度 不需要账户就可以编辑整个wiki 10 参考文献 编辑 Emacs 28 2 released 2022年9月12日 2022年9月13日 原文 because lt E gt was not in use as an abbreviation on ITS at the time 原文 EMACS was distributed on a basis of communal sharing which means all improvements must be given back to me to be incorporated and distributed Re Looking for a new Emacs maintainer or team gnu org Mailing List 2008 02 23 原始内容存档于2011 06 03 英文 参见 Stallman on handing over GNU Emacs its future and the importance of nomenclature 页面存档备份 存于互联网档案馆 英文 ergoemacs mode 2015 02 17 原始内容存档于2015 06 27 VimとEmacsのあいだで小指痛を叫んだけもの 2007 10 14 2015 02 17 原始内容存档于2015 02 17 日语 GNU Emacs的终极扩展管理工具 el get Emacs中文网 2012 05 29 原始内容存档于2012 06 20 Emacs Wiki 2012 05 29 原始内容存档于2012 05 23 redguardtoo 一年成为Emacs高手 像神一样使用编辑器 csdn 2012 05 29 原始内容存档于2013 04 30 EmacsWiki Site Map 2012 05 29 原始内容存档于2012 12 06 You can edit this website There s a link Edit this page at the bottom of this and other pages Please check SiteMap Discussion before editing this SiteMap page however 注 本文第一部分 部分引用自遵守GFDL的 Emacs用户指南 汉译版参见 编辑文件编辑器比较 使用Emacs編輯維基百科 GNU TeXmacs 取自 https zh wikipedia org w index php title Emacs amp oldid 74271231, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。