
字詞轉換是中文維基的一項自動轉換,目的是通過電腦程式自動消除繁簡、地區詞等不同用字模式的差異,以達到閱讀方便。
字詞轉換包括全局轉換和手動轉換,本說明所使用的標題轉換和全文轉換技術,都屬於手動轉換。
|
| 編輯 |
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這種有著極強擴充性的程式語言,從而實現了包括程設、編譯乃至網路瀏覽等等功能的擴充套件。
在Unix文化裡,Emacs是駭客們關於編輯器優劣之爭的兩大主角之一,它的對手是vi。
Richard Stallman 於 2008 年初宣佈不再維護 GNU Emacs. 他在 mail list 上發出以下內容:
| 「 | From: Richard Stallman Subject: Re: Looking for a new Emacs maintainer or team |
」 |
目錄 |
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的編輯器,包括由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)。
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編輯器。
到1999年為止,GNU Emacs的開發工作基本是在封閉的情況下進行。這種開發方式在《大教堂和市集》一書中被稱為「大教堂模式」。從那以後,GNU Emacs項目建立了公共開發郵件列表和匿名CVS原始碼訪問。現在的開發在一個CVS原始碼倉庫中進行,最新的版本是23.0.60。
Richard Stallman一直以來是GNU Emacs的維護者。他于2008年將原始碼的維護工作交給了Stefan Monnier和Chong Yidong。[1]
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還可以:
此外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)、滾動條以及環境菜單(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通過在程式內部採用一種特殊的內部編碼系統MULE(MULti-language Environment)實現了對不同編碼系統的支持。在Emacs程式內部,每個字元都用1至4個位元組表示,首位元組用於表示這一字元所屬的編碼系統。例如,首位元組為0X91的字元就表示這個字元採用的編碼系統是Chinese-GB2312。有的編碼系統包含的字元過多,就被分為多個字符集,用不同的首位元組表示。Emacs處理文本的過程如下:打開文件時,首先判斷這一文件採用的編碼系統,然後在文件中的所有字元前面加上對應這一編碼系統的首位元組,將這種採用內部編碼的文本存入內存後供程式處理。這一過程被稱作「解碼」。保存文件時,則根據每個字元的首位元組,將採用內部編碼的文本轉換為相應的編碼系統,寫入文件。這一過程被稱作「編碼」。
由於首位元組和編碼長度的限制,Emacs內部編碼的字符集不能包括所有編碼系統的字元。一種變通的解決方法,是挪用其他編碼的空間。例如,MULE不支持GBK字符集,為了在Emacs上使用GBK編寫的擴充套件mule-gbk就佔用了chinese-cns-5、chinese-cns-6和chinese-cns-7的編碼空間。另一種更加徹底的解決方案,是採用Unicode作為內部編碼,在最新的Emacs 23中得到了實現。
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)。
下表給出了一些基本命令。[Ctrl]鍵以大寫C表示,[Meta]鍵[Alt]鍵以大寫M表示'。
| 命令 | 快捷鍵 | 功能 |
|---|---|---|
forward-word |
M-f |
向前移動一個單詞。 |
search-word |
C-s |
在buffer中搜索一個單詞。 |
undo |
C-/ |
取消最後一次操作,如果多次執行則取消以前的操作。 |
keyboard-quit |
C-g |
取消當前的命令。 |
fill-paragraph |
M-q |
Wrap text in ("fill") a paragraph. |
find-file |
C-x C-f |
在一個新buffer里訪問某個文件(用戶給定文件名)。 |
save-buffer |
C-x C-s |
保存buffer的內容到文件。 |
save-with-newname |
C-x C-w |
將buffer內容另存為一個新的文件。 |
save-buffers-kill-emacs |
C-x C-c |
提示是否保存文件,然後退出emacs。 |
set-marker |
C-[空格] |
設定標記,用於剪切或複製。 |
cut |
C-w |
剪切標記到當前游標所在處的文本。 |
copy |
M-w |
複製標記到當前游標所在處的文本。 |
paste |
C-y |
從emacs剪貼板中粘貼文本。 |
kill buffer |
C-x k |
關閉當前buffer。 |
|
檢 • 論 • 編 • 歷
|
||
|---|---|---|
| 歷史 | GNU宣言 · GNU計劃 · 自由軟體基金會 · 自由軟體歷史 | |
| GNU許可證 | GNU通用公共許可證 · GNU寬通用公共許可證 · GNU自由文檔許可證 · GPL linking exception | |
| 軟體 | GNU (Variants) · GNOME · Gnuzilla · Gnash · Bash · GCC · GNU Emacs · GNU C 函式庫 · Coreutils · GNU build system · Other GNU packages and programs | |
| 發言人 | Robert J. Chassell · Loïc Dachary · Ricardo Galli · Georg C. F. Greve · Federico Heinz · Benjamin Mako Hill · Bradley M. Kuhn · 伊本·莫格林 · Brett Smith · 理察·斯托曼 · John Sullivan | |
注:本文第一部分,部分引用自遵守GFDL的Emacs用戶指南中譯版
Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History