EMACS的强大之处

很多人不理解为什么 Emacs 的用户那么多,他们是如此的热爱Emacs,甚至有的人把它当成了“信仰”。虽然我没有这个信仰,但是它的确很好,我很喜欢用它编辑各种文件,现在来看看 Emacs 能做什么。

据我所知,Emacs 的能力包括

  1. 编辑文本

    Emacs 编辑文本的能力是非常强的。它的其它很多功能都是依赖于强大的编辑能力。Emacs 是人性化的设计,它非常可靠,不会莫名其妙弄坏你的文件,用它编辑重要的文本信心有保障。

    可能你开头觉得它的键绑定用起来非常不顺手。它有很多长长的“快捷键”,比如按下Ctrl-h再按Ctrl-i…… 比起 VIM 的一个键的快捷键的确慢很多。但是 Emacs 的优势不在于击键的频率,我们的目标是用一个键,甚至不按键盘,就完成复杂而智能的操作。面对Emacs,你感觉自己像是一个魔法师,轻轻一挥魔棒,任务就完成了。

    Emacs 的文本处理能力极强,不管你要处理自然语言还是机器语言。不管是中文还是英语,不管是小说,HTML, 还是 C 程序, Java 程序,我都可以按 M-e 向前移动一句话(C和Java语句),按 M-k 删除一句话,按 M-} 移动一段话,按 M-p (我自己设定的按键) 删除一段话。因为 Emacs 知道,什么样算是一句话 (sentence-end),什么算是一段话(paragraph-start)。而且它知道在不同的文档里,句子和段落有什么区别。

    我只要按 M-q 就可以把一段话排的规规矩矩。我只要按一个键就可以把一个数字列表重新排序。我只要在 HTML 文档里按 C-cbackspace 就可以把一组tag删掉,按C-c C-c i 就可以插入一个图片,按 C-c C-v 就可以马上把这个文档送到一个 Mozilla 窗口去预览……在 LaTeX 文档里按 C-c C-r RET 就可以把我的文档里选定的区域送给 LaTeX 处理,马上看到效果。

    现在你是不是感觉自己更像魔法师了?继续!

    Emacs 有非常友好而强大的人机界面。在搜索替换字符串时,你就能明显感觉到这个优点。它在输入regexp(正则表达式)搜索的时候还能进行 incremental search,而且对部分匹配的字串都有非常漂亮的加量。在替换的时候,它独有 recursive edit,可以打断替换过程,编辑附近的需要纠正的文字,然后继续替换。这个功能对很多人都是非常重要的,因为,在替换过程中,被替换的文字附近的文字很可能会因为它被替换而需要修改。看看这个抓图,就是
    isearch 输入一个正则表达式的情况。

    Emacs 的拼写检查能力非常强大。你可以使用 flyspell 随时检查你的拼写错误,看看这幅图是 flyspell-mode 的 LaTeX 文档, flyspell 知道段落里的某些单词是错的,而 \begin{myquotation} 里的 myquotation 被认为是一个用户自己定义的 LaTeX 环境名字而不认为是拼写错误。

    你还可以利用 ispell 的补全功能输入你容易打错的很长的英语单词,看看这幅图

    Emacs 的 hippie-expand 能够非常智能的补全你的文本,文件名,和其它很多东西,而这个功能都是用同一个按键完成!

    Emacs 能输入和显示多国语言文本,是一个真正的国际化程序。Emacs 能识别多种自然语言符号,它能知道哪些符号是括号,那些是标点。看看这个抓图里,Emacs 显示了中文书名号的匹配情况。《正确》,和《错误>

    Emacs 的键是可以任意绑定的。甚至可以使用 Windows 键盘上的 Win 和 Menu 键来控制。我的 Win + 鼠标中键可以弹出一个buffer里所有引用到的文件和URL的列表,当我点击它们就可以编辑那个文件或者在 Mozilla 中打开连接。看看这个抓图(ffap-at-mouse)。

    你能想到的和你不能想到的编辑功能,Emacs 都能完成。说到这里你可能又会说:“这个功能,vi也有”,“这个功能, UltraEdit 都有”……对,这些能力可能很多其它程序也有。对,但是让一个 Emacs 拥有这些功能比起其它程序的确要费少得多的力气。很多热心的爱好者看到其它编辑器有一个很酷的功能,他就可以想办法把它加入到 Emacs 里面。Emacs 可以被不断的扩充。其实,你平常用到的几乎所有功能都是扩展的功能。

    建立一个微小的基本功能的集合,然后把所有复杂功能作为这些基本功能的组合。这体现了一种程序设计的哲学。不同于 Windows,也不同于 UNIX,它更好的协调了程序的灵活性和同一性。

    Emacs 编辑文本方面的扩展简直没法计数。folding, narrow, outline, ... 这些给人带来了很大的方便,已经被许许多多的人采用。

  2. 编辑程序

    程序也是一种特殊的文本文件。因为 Emacs 特别适合编辑程序,所以特别在这里提出。Emacs 可以方便的编辑任何类型的计算机语言程序代码,而且为它们提供语法加亮,自动缩进。你可以对程序的语句进行操作。比如向下移动一个 list, 删除整个 C 函数,…… 你可以用一个键就把许多行注释重新排的整整齐齐。

    一些扩展可以让你方便的浏览代码,而且它们可以识别代码的语义。列出函数名,参数和类型,变量名,类,宏,方法,defun,include 的文件。当你编辑程序时,Emacs 可以帮你补全函数名,参数等等。你可以在代码中间自由的穿梭。看看这个用 Emacs 写程序的介绍

    你可以使用 Ediff 来比较两个或者三个文件,Emacs 可以把不同的地方高量,而且修改过的地方有特别明显的颜色不同。我经常用这个功能很快找到我修改过的代码里新出现的错误的位置。看看这个抓图

    你用一个指头就可以让 Emacs 调用编译器编译程序,列出错误列表,启动调试器,在另一个窗口显示当前执行源代码的位置。看看这个抓图就是 emacs 正在调用 gdb调试程序。

    Emacs 的 narrow 和 folding 功能使你能够编辑几万行代码在一个文件里而不会觉得摸不着方向。看看这幅图,你能想像这是 TeX 的源代码的 24000 多行里的一部分吗?你操作它的时候就像只有几十行。folding 可以使你的很长的文档折叠起来,看看这幅图就是我的一个很长的网页,我在需要的时候可以进入其中一个主题进行编辑,当我退出主题时,整个文档看起来就像只有一页那么长。我可以随意的移动我的主题,就像只移动了一行。

    加上一些 elisp,Emacs 就可以成为一个代码浏览器

  3. 作为其它程序的界面

    Emacs 可以作为很多程序的前端。比如w3m, lynx 浏览器,MAXIMA 计算机代数系统,Scheme48 等 Scheme 解释器,shell,……这些文本方式的程序一旦与
    Emacs 接合就拥有了巨大的编辑的能力。看看这幅图,Scheme48 加上Emacs,就有了语法加亮和方便的热键,可以非常方便的使用Scheme 解释器了。
  4. 作为操作系统

    Emacs 就像一个具有编辑功能的操作系统,你可以用它干很多事情。比如,阅读email和新闻组浏览网页,管理文件目录 (dired),作为网页服务器,远程编辑文件,记录日程,约会提醒,电子日历查字典,ICQ
    聊天,放 mp3,……
  5. 煮咖啡

    如果你工作的地方有自动咖啡机,Emacs 还可以帮你点咖啡 :)coffee.el :P
时间: 2024-08-23 04:52:34

EMACS的强大之处的相关文章

linux find命令强大之处

find命令 find pathname -options [-print -exec -ok ...] -print: find命令将匹配的文件输出到标准输出. -exec: find命令对匹配的文件执行该参数所给出的shell命令.相应命令的形式为'command' { } \;,注意{ }和\:之间的空格. -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行. 例子: $ find /et

枚举的独特强大之处

枚举 枚举类型声明为一组相关的符号常数定义了一个类型名称.枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定. 枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法.例如,假设您必须定义一个变量,该变量的值表示一周中的一天.该变量只能存储七个有意义的值.若要定义这些值,可以使用枚举类型.枚举类型是使用 enum 关键字声明的. enum Days { Sunday, Monday, Tuesday, Wednesday, Thursd

JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。

<script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var total=2.0; for(stock in portfolio){ //遍历portfolio中的每只股票 var shares=portfolio[stock]; //得到每只股票的份额 var proce=getQuery(stock); //查找股票价格 getQuery()查询部分 total+

7种面向对象设计的强大之处

凭什么要用面向对象来编程,不用是否可以?今天我们通过讲这么几个设计原则来说明为什么要用面向对象,它的好处在哪里. 一.单一职责原则: 全称:“Single-Responsibility Principle”面向对象设计 说明:就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因.所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多.也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了.因为职责是变化的一个轴线,当需求

Swift之map函数的强大之处

CollectionType Map 在CollectionType的extension中map方法的定义: extension CollectionType { /// Return an `Array` containing the results of mapping `transform` /// over `self`. /// /// - Complexity: O(N). @warn_unused_result @rethrows public func map<T>(@noes

简单工厂模式的强大之处

工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式 一. 简单工厂(Simple Factory)模式 Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple Factory模式

jq siblings()的强大之处

在事件处理的方法里 经常遇到自己做什么效果 其他节点就做反之效果 如果用判断 可处理 但代码太啰嗦不够简单 siblings()就可以解决这一切的麻烦 意思就是 除啦我之外的其他兄弟节点 这样可以做2个不同的效果用法:$(this).toggle().siblings().hide();this是显示或者隐藏的 除啦this之外 其他都隐藏 非常好用

python爬虫学习日历2【基于ubuntu系统】beautifulsoup的强大之处

前一篇小文中就提到了python的requests库可以获取网络编码中的所有内容,我们获取了自然就必须对它进行加工处理,就像我们学习一样,一本书,我们可以轻易的获取,但是它究竟是在讲哲学还是讲历史呢还是其他云云,需要我们认真分析,取其精华去其糟粕.而在python当然也有做这个工作的'人',就是我们需要安装库中的'beautifulsoup' 我本来是想继续用昨天的网址来说明的,不过效果不佳,我一会这这篇小文的最后会附上源代码,供各位朋友或者自己再次的学习 html_doc = ""&

java比c++强大之处jvm垃圾收集算法

java可以自动进行垃圾收集,c++需要手动释放内存,这个功能将程序员解放出来,能将更多的注意力放在需要实现的业务上,这也是java相对c++的一个巨大优势,jvm有哪些垃圾收集算法呢? 标记清除算法:算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象 从图中可以看出这种算法的缺点在于,垃圾被回收以后造成了大量不连续的内存碎片.碎片太多可能会导致以后需要分配较大对象时,无法找到连续的足够内存从而频繁触发垃圾收集,降低系统效率. 复制算法:为了解决"标记