热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Emacs文本编辑器

emacs编辑Emacs是一种强大的文本编辑器,在程序员和其他以技术工作为主的计算机用户中广受欢迎。EMACS,即EditorMACroS(编辑器宏)的缩写,最初由RichardStallman(

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

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 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类编辑器中最受欢迎的选择。
推荐阅读
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • PyQt5 QTextEdit:深入解析Python中多功能GUI库的应用与实现
    本文详细探讨了 PyQt5 中 QTextEdit 组件在 Python 多功能 GUI 库中的应用与实现。PyQt5 是 Qt 框架的 Python 绑定,提供了超过 620 个类和 6000 个函数及方法,广泛应用于跨平台应用程序开发。QTextEdit 作为其中的重要组件,支持丰富的文本编辑功能,如富文本格式、文本高亮和自定义样式等。PyQt5 的流行性不仅在于其强大的功能,还在于其易用性和灵活性,使其成为开发复杂用户界面的理想选择。 ... [详细]
  • 手机上编写和运行PHP代码的最佳软件推荐 ... [详细]
  • 在Linux/WSL环境中,本文对Shell任务的并行处理进行了详细的测试与分析。通过多种并行处理技术,如GNU Parallel和xargs,探讨了如何有效提升任务执行效率和系统资源利用率。实验结果表明,合理配置并行参数能够显著缩短任务完成时间,提高系统整体性能。此外,文章还介绍了Shell脚本编写的基本原则和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 综合实训 201521440015
    Chinesepeople’publicsecurityuniversity网络对抗技术实验报告实验五综合渗透学生姓名常泽远年级15区队4指导教师高见信息技术与网络安全学院2018 ... [详细]
  • 如何在Linux环境中高效地创建、编译与运行C语言代码
    本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入 ... [详细]
  • MixPHP V2.1:从多进程架构转向单线程协程的深层原因与技术解析 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析
    池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析 ... [详细]
  • Python数据分析入门指南:全面了解Python在数据科学中的应用 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 在操作系统中,阻塞状态与挂起状态有着显著的区别。阻塞状态通常是指进程因等待某一事件(如I/O操作完成)而暂时停止执行,而挂起状态则是指进程被系统暂时移出内存,以释放资源或降低系统负载。此外,本文还深入分析了`sleep()`函数的实现机制,探讨了其在不同操作系统中的具体实现方式及其对进程调度的影响。通过这些分析,读者可以更好地理解操作系统如何管理进程的不同状态以及`sleep()`函数在其中的作用。 ... [详细]
  • 如果你对 IntelliJ IDEA 的界面不太熟悉,可能会对如何在 Android Studio 中执行一些常见任务感到困惑。本文提供了多种开发技巧和实用窍门,帮助开发者更好地利用 Android Studio 的强大功能,包括界面导航、代码调试和项目管理等方面,使开发过程更加高效顺畅。 ... [详细]
  • https:www.hollischuang.comarchives74 对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE ... [详细]
author-avatar
hbwgz2009
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有