微博正文
User profile avatar
千凡_

emacs✍️

Emacs,著名的集成开发环境和文本编辑器。Emacs被公认为是最受专业程序员喜爱的代码编辑器之一,另外一个VIM

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使用Emacs Lisp,这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。

发展历史

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实验室流行开来,并且很快积累起了大量自定义的宏,这些宏的名字通常就以“麦金塔”或者“MACS”结尾,意为“宏”(macro)。两年后,Guy Steele承担起统一当时存在的各种键盘命令集的工作。Steele和Stallman经过一夜奋战,最终由Stallman完成了这一任务,包括一套扩展和注释新的宏包的工具。这个完成的系统被称作EMACS,代表“Editing MACroS”。根据Stallman的说法,他采用这个名字是“因为当时\u003cE\u003e在ITS里还没有被当作缩写用过。”("because \u003cE\u003e was not in use as an abbreviation on ITS at the time." )也有说法指出,当时波士顿在MIT附近有家名为“Emack \u0026 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自行开发了一个“bourne-shell-like”的shell: EShell。Emacs还可以:

收发电子邮件

通过断点续传/TRAMP编辑远程档案

通过Telnet登录主机

上新闻组

登陆IRC和朋友交流

查看日历

撰写文章大纲

对多种编程语言的编辑

调试程序,结合GNU侦错器,EDebug等。支持C/C++PerlPythonLISP等等

玩游戏

计算器

记日记

管理日程,Task,ToDo,约会等

个人信息管理

目录管理

文件比较

阅读info和man文档

浏览网站

为各种程序(TeX等)提供统一的操作界面

……

特点

交互式编辑器

实时编辑器

高级编辑器

自文档化

可定制性

可扩展性(集成LISP

支持X Window环境

各平台上的Emacs

Emacs是目前世界上最具可移植性的重要软件之一,能够在当前大多数操作系统上运行,包括类Unix系统(GNU/Linux、各种BSD、Solaris、AIX、IRIX 等等)、MS-DOS、微软 Window 以及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-h r 打开emacs 手册。

C-h f 查找一个函数的用法。

C-h k 查找快捷键的用途。

C-h a 查找匹配的命令。

CH ? 显示帮助的帮助,说明帮助的用法。

文件操作

C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件

C-x C-v 打开一个文件,取代当前缓冲区

C-x 计算机科学 保存文件

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 gotoline 跳到指定行

C-v 向下翻页

摩托船 向上翻页

M-\u003c 缓冲区头部

M-\u003e 缓冲区尾部

C-M-f 向前匹配括号

CMB 向后匹配括号

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 删除一个字符

马里兰州 删除一个单词

NHK名古屋放送局 删除一行

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 富士电视台 u 撤消操作

执行命令

M-x shell 打开壳层

M-x ansi-term 运行term

M-! 执行壳层命令 (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压缩文件

! 对光标所在的文件执行壳层命令

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 小直径炸弹 小直径炸弹排错

搜索模式

计算机科学 key 向前搜索

计算机科学 查找下一个

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 来收发邮件,阅读新闻组。可以参考

或者阅读 gnus 自带的 manual 来获得详细信息。

富士电视台 m 撰写新邮件

定制

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用MaclispLISP的一种)编写出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年,Richard 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类编辑器中最受欢迎的选择。

参考资料

Concert stage with colorful lighting and performance Concert stage with vibrant lighting effects
Concert video thumbnail
00:30
Concert video thumbnail
00:15
Official account avatar
郑州南站公司
转发47 评论23 赞322

Copyright © 1996-2025 DaHe Network Media. Group All Rights Reserved

京ICP备2023013984号

抖运营雅思百科