Emacs 文本编辑器

emacs
编辑
Emacs是一种强大的文本 编辑器,在 程序员和其他以技术工作为主的计算机用户中广受欢迎。EMACS,即Editor MACroS( 编辑器宏)的缩写,最初由Richard Stallman( 理查德·马修·斯托曼)于1975年在MIT协同Guy Steele共同完成。这一创意的灵感来源于TECMAC和TMACS,它们是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏 文本编辑器。

目录

1简介

2发展历史

3功能

4特点

5编辑模式

6快捷键

7文件操作

8编辑操作

9执行命令

10窗口操作

11缓冲操作

12目录操作

13程序编译

14搜索模式

15SHELL模式

16打印资料

17收发邮件

18定制

19国际化

20版权

21附加组件

22详细信息

23版本发布

1简介编辑

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]

2发展历史编辑

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的说法,他采用这个名字是“因为当时在ITS里还没有被当作缩写用过。”("because 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系统上。

3功能编辑

Emacs不仅仅是一个 编辑器,他是一个整合环境,或可称它为 集成开发环境,这些功能如让使用者置身于全
Emacs 文本编辑器_第1张图片

emacs

功能的 操作系统中,在基于编辑器的功能基础上,Emacs自行开发了一个“bourne-shell-like”的shell: EShell。Emacs还可以:
收发电子邮件
通过FTP/TRAMP编辑远程档案
通过Telnet登录主机
上新闻组
登陆IRC和朋友交流
查看日历
撰写文章大纲
对多种编程语言的编辑
调试程序,结合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等
玩游戏
计算器
记日记
煮咖啡
管理日程,Task,ToDo,约会等
个人信息管理
目录管理
文件比较
阅读info和man文档
浏览网站
为各种程序(TeX等)提供统一的操作界面
……

4特点编辑

交互式编辑器
实时 编辑器
高级 编辑器
自文档化
可定制性
可扩展性(集成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等交互方式。

5编辑模式编辑

Emacs采取的编辑方式是对不同类型的文本进入相应的编辑模式,即“主模式”(major mode)。Emacs针对多种文档定义了不同的主模式,包括普通文本文件、各种编程语言的 源文件、HTML文档、TEX与LaTeX文档,以及其他类型的文本文件等等。
每种主模式都有特殊的Emacs Lisp 变量和函数,使用户在这种模式下能更方便的处理这一特定类型的文本。例如,各种编程的主模式会对源文件文本中的关键字、注释以不同的 字体和颜色加以 语法高亮。主模式还提供诸如跳转到函数的开头或者结尾这样特地定义的命令。
Emacs还能进一步定义“次模式”(minor mode)。每一个 缓冲区(buffer)只能关联于一种主模式,却能同时关联多个次模式。比如,编写C语言的主模式可以同时定义多个次模式,每个次模式有着不同的缩进风格(indent style)。

6快捷键编辑

掌握Emacs的 快捷键可以说是Emacs爱好者的基本功,也是提高编辑速度和质量所必备的,但是初学者可能记不住那么多的快捷键必要时可以翻一下,最常用的快捷键数量也就数十个。Emacs的 快捷键都是绑定于ctrl和alt(或称meta)上的,例如c-x就是ctrl+x,m-x就是alt+x。当然所有的按键都可以自定义。
当要退出编辑时C-x C-c 代表着,先按C-x 再按C-c才可以退出编辑环境.

7文件操作编辑

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

8编辑操作编辑

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 撤消操作

9执行命令编辑

M-x shell 打开SHELL
M-! 执行SHELL命令 (shell-command)
M-1 M-! 执行SHELL命令,命令输出插入 光标位置,不打开新输出窗口
M-| 针对某一特定区域执行命令(shell-command-on-region), 比如 C-x h M-|uuencode

10窗口操作编辑

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 } 横向扩大窗口

11缓冲操作编辑

C-x C-b 打开 缓冲区列表
d or k 标记为删除
~ 标记为未修改状态
% 标记为只读
s 保存缓冲
u 取消标记
x 执行标记的操作
f 在当前窗口打开该 缓冲区
o 在其他窗口打开该 缓冲区

12目录操作编辑

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 退出目录模式
说明:在目录模式中,如果输入!,在命令行中包含*或者?,有特殊的含义。*匹配当前 光标所在的文件和所有标记的文件,?分别在每一个标记的文件上执行该命令。

13程序编译编辑

M-x compile 执行编译操作
M-x gdb GDB排错
M-x dbx DBX排错
M-x xdb XDB排错
M-x sdb SDB排错

14搜索模式编辑

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-% 正则交互替换

15SHELL模式编辑

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 查看后一条命令的输出

16打印资料编辑

M-x print-buffer 先使用pr,然后使用lpr
M-x lpr-buffer 直接使用lpr
M-x print-region
M-x lpr-region

17收发邮件编辑

M-x mail 发送邮件, C-c C-s 发送,C-c C-c 发送并退出
M-x rmail 接受邮件
用 gnus 收发邮件,阅读新闻组
M-x gnus 可以通过强大的 gnus 来收发邮件,阅读新闻组。可以参考 [2]
或者阅读 gnus 自带的 manual 来获得详细信息。

18定制编辑

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“标准库”的一部分。

19国际化编辑

Emacs支持对多种文字的文本编辑,包括UTF-8在内的诸多编码系统,加上对多种 字符集、文稿、书写系统,以及不同文化的书写习惯都提供了支持,使得世界上大多数语言的使用者都能通过Emacs进行文本处理。Emacs还能通过调用诸如 ispell这样的外部程序,实现多种语言的 拼写检查。

20版权编辑

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

21附加组件编辑

在Ubuntu 11.04版本上,安装 Emacs 的同时还会安装以下组件:
保持X剪贴板和 缓冲区之间的同步 (autocutsel)
邮件美化 (muttprint)

22详细信息编辑

总大小:下载23.8MB,安装所需空间73.6MB
版本:23.2+1-7ubuntu2 (emacs23)
许可协议: 开放源代码
更新:Cononical提供GNU Emacs23的关键更新至2012年十月。

23版本发布编辑

随后的几年里,开发出了许多运行于其他 操作系统的类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
Emacs 文本编辑器_第2张图片
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中进行,目前的版本号是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类 编辑器中最受欢迎的选择。

你可能感兴趣的:(编辑器)