簡介
Emacs是一種強大的文本編輯器,在程序員和其他以技術工作為主的計算機用戶中廣受歡迎。
EMACS,即EdITor MACroS(宏編輯器)的縮寫,最初由Richard Stallman于1975年在MIT協同Guy SteeleGuy Steele共同完成
這一創意的靈感來源于TECMAC和TMACS,它們是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人編寫的宏文本編輯器。
自誕生以來,Emacs演化出了衆多分支,其中使用最廣泛的兩種分别是:1984年由Richard Stallman發起并由他維護至今的GNU Emacs,以及1991年發起的XEmacs。
XEmacs是GNU Emacs的分支,至今仍保持着相當的兼容性。它們都使用了Emacs Lisp這種有着極強擴展性的編程語言,從而實現了包括編程、編譯乃至網絡浏覽等等功能的擴展。
在Unix文化裡,Emacs是黑客們關于編輯器優劣之争的兩大主角之一,它的對手是vi文本編輯器。
曆史
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的說法,他采用這個名字是“因為當時
也有說法指出,當時波士頓在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系統上。
其他 emacs
随後的幾年裡,開發出了許多運行于其他操作系統的類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.12版時開發人員放棄了這一記法,因為他們認為主版本号是不應該改動的。因此,Version 13是第一個public release,它發布于1985年3月20日。
GNU Emacs和Gosling Emacs一樣運行在Unix系統上。
不過GNU Emacs的功能更多,特别是它有一個真正的lisp作為擴展。結果,GNU Emacs很快就取代了Gosling Emacs,成為Unix系統上事實的Emacs編輯器。
Until 1999, GNU Emacs development was relatively closed, to the point where it was used as an example of the "Cathedral" development style in The Cathedral and the Bazaar. The project has since adopted a public development mailing list and anonymous CVS access. Development takes place in a single CVS trunk, which is at version 22.0.93. The current maintainer is 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類編輯器中最受歡迎的選擇。
功能特點
Emacs不僅僅是一個編輯器,他是一個整合環境,或可稱它為集成開發環境,這些功能如讓使用者置身于全功能的操作系統中,在基于編輯器的功能基礎上,Emacs自行開發了一個“bourne-shell-like”的shell: EShell。Emacs還可以:
收發電子郵件 通過FTP/TRAMP編輯遠程檔案 通過Telnet登錄主機 上新聞組 登陸IRC和朋友交流 查看日曆 撰寫文章大綱 對多種編程語言的編輯 調試程序,結合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等 玩遊戲 計算器 記日記 煮咖啡 管理日程,Task,ToDo,約會等 個人信息管理 目錄管理 文件比較 閱讀info和man文檔 浏覽網站 為各種程序(TeX等)提供統一的操作界面 ……
此外Emacs還有如下特點:
display editor 實時編輯器 高級編輯器 Self-documenting 可定制性 可擴展性(集成Lisp語言) 支持X Window環境
各平台上的Emacs
Emacs是目前世界上最具可移植性的重要軟件之一,能夠在當前大多數操作系統上運行,包括類Unix系統(GNU/Linux、各種BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等。
Emacs既可以在文本終端也可以在圖形用戶界面(GUI)環境下運行。在類Unix系統上,Emacs使用X Windows産生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主要有三種方法。
第一種方法是使用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是一種強大的文本編輯器,在程序員和其他以技術工作為主的計算機用戶中廣受歡迎。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這種有着極強擴展性的編程語言,從而實現了包括編程、編譯乃至網絡浏覽等等功能的擴展。nn
版權
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)。
版本信息
Emacs和Vim二款神一樣的代碼編輯器
今天有一位從事程序猿N年的哥們在QQ上給本小編吐槽,“你個啥子網站,連個Emacs這樣神一樣的編輯器都沒有,你弄些啥嘛”,俺沉默了10秒外加5秒的發呆,Emacs?神一樣的編輯器?
這種說法讓UltraEdit和Editplus情以何堪,還有那個号稱程序員們最喜愛的編輯器Notepad++聽完一定會痛哭流淚。
趕快找度娘,問問是否如此,在看到一篇文章“Emacs和Vim,神的編輯器和編輯器之神”之後,讓我覺得有一種不發布Emacs和Vim簡直就是犯罪的沖動,于是急沖沖發布Emacs和Vim這二款編輯器神器,讓那些未睹這二款編輯器芳容的同學一睹神的風采。
要詳細介紹這二款編輯器真是難于找到合适的文字,“古老、經典、強大”等一切詞語相對于Jiqing Wu這位作者博客所寫都顯得那麼的蒼白無力,現引用些有關描述這二款編輯器的原話,你一定會為Emacs和Vim特立獨行的魅力所着迷。
●Windows下用UltraEdit和Editplus的人質問:它們到底比UltraEdit和Editplus好在哪裡?我說:不可同日而語。
連UltraEdit和EditPlus都沒用過的同學問:它們就相當于Linux上的 Notepad吧?我說:請你從我的眼前消失。
●Linux和開源軟件漸漸流行起來,人們才發現:可擴展性才能給軟件強大的生命。
在MS的VS橫行的今天,Eclipse為什麼被評為最好的IDE?就是因為它在IDE中最具可擴展性。
在IE幾乎一統天下的時候,為什麼Firefox能奪走越來越多的用戶,也是因為它的可擴展性。提供了良好的擴展接口,用戶自然會寫出各種各樣的插件,來滿足用戶自己形形色色的要求。
這樣,軟件在用戶的推動下自然變得強大了,Emacs和Vim沒有被時代淘汰,反而越發強大,也正是因為在數不清的編輯器中,他們具有無可匹敵的可擴展性。
●有這麼牛逼的擴展語言,注定Emacs向着無所不能的方向發展。漸漸地,人們用Emacs不再限于寫程序,寫文檔,而且在Emacs裡管理文件系統,運行終端,收郵件,上網,聽音樂……,真是一發不可收拾。甚至,有人用Emacs控制咖啡機煮咖啡。
●這種大而全的擴展,背離了“一個程序隻做一件事并做好它”的 Unix哲學,被Unix的忠誠用戶所诟病。可是真的背離了嗎? Emacs說過自己是一個編輯器嗎?
●正是因為Emacs的無敵的可擴展性,人們才分不清Emacs到底是不是一個編輯器了。但,就是有人喜歡這種All-in-One的哲學,喜歡在Emacs中完成每件事。所以才會有人寫《生活在Emacs中》,所以, Emacs才會成為一種信仰。
●Linux之父Linus多年來用的是一款 MicroEmacs,它比GNU Emacs或XEmacs少許多功能,但Linus就是用它在維護Linux。 微軟的大牛Don Box,Com之父,一直用Emacs,他說誰也不能奪走他的編輯器。他還在網上放了一段他用Emacs寫C#程序的視頻。
●編程大師們的選擇,也是Emacs和Vim被追捧為神器的原因之一。
●可擴展性讓你傾注了靈魂
●獨特的操作方式讓你中了毒
●黑客的編輯器,一劍在手,夫複何求
●Emacs和Vim神器引發的聖戰争鬥不斷
……