發展歷史
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的說法,他採用這個名字是“因為當時<E>在ITS里還沒有被當作縮寫用過。”("because <E> 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系統上。
功能
Emacs不僅僅是一個編輯器,他是一個整合環境,或可稱它為集成開發環境,這些功能如讓使用者置身於全功能的作業系統中,在基於編輯器的功能基礎上,Emacs自行開發了一個“bourne-shell-like”的shell: EShell。Emacs還可以:
收發電子郵件
通過FTP/TRAMP編輯遠程檔案
通過Telnet登錄主機
上新聞組
登入IRC和朋友交流
查看日曆
撰寫文章大綱
對多種程式語言的編輯
調試程式,結合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等
玩遊戲
計算器
記日記
管理日程,Task,ToDo,約會等
個人信息管理
目錄管理
檔案比較
閱讀info和man文檔
瀏覽網站
為各種程式(TeX等)提供統一的操作界面
……
特點
互動式編輯器
實時編輯器
高級編輯器
自文檔化
可定製性
可擴展性(集成Lisp語言)
支持X Window環境
各平台上的Emacs
Emacs是目前世界上最具可移植性的重要軟體之一,能夠在當前大多數作業系統上運行,包括類Unix系統(GNU/Linux、各種BSD、Solaris、AIX、IRIX 等等)、MS-DOS、Microsoft 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 查找匹配的命令。
C-h ? 顯示幫助的幫助,說明幫助的用法。
檔案操作
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
編輯操作
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 撤消操作
執行命令
M-x shell 打開SHELL
M-x ansi-term 運行term
M-! 執行SHELL命令 (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-x C-b 打開緩衝區列表
d or k 標記為刪除
~ 標記為未修改狀態
% 標記為唯讀
s 保存緩衝
u 取消標記
x 執行標記的操作
f 在當前視窗打開該緩衝區
o 在其他視窗打開該緩衝區
目錄操作
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 退出目錄模式
說明:在目錄模式中,如果輸入!,在命令行中包含*或者?,有特殊的含義。*匹配當前游標所在的檔案和所有標記的檔案,?分別在每一個標記的檔案上執行該命令。
程式編譯
M-x compile 執行編譯操作
M-x gdb GDB排錯
M-x dbx DBX排錯
M-x xdb XDB排錯
M-x sdb SDB排錯
搜尋模式
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-% 正則互動替換
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 來獲得詳細信息。
C-x 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用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年,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類編輯器中最受歡迎的選擇。