必威电竞|足球世界杯竞猜平台

emacs
來源:互聯(lián)網(wǎng)

Emacs,著名的集成開發(fā)環(huán)境和文本編輯器。Emacs被公認(rèn)為是最受專業(yè)程序員喜愛的代碼編輯器之一,另外一個(gè)VIM

EMACS,即Editor MACroS(編輯器宏)的縮寫,最初由Richard Stallman(理查德·斯托曼)于1975年在MIT協(xié)同Guy Steele共同完成。這一創(chuàng)意的靈感來源于TECMAC和TMACS,它們是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人編寫的宏文本編輯器。

自誕生以來,Emacs演化出了眾多分支,其中使用最廣泛的兩種是:1984年由Richard Stallman發(fā)起并由他維護(hù)至今的GNU Emacs,以及1991年發(fā)起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持著相當(dāng)?shù)募嫒菪浴?/p>

Emacs使用Emacs Lisp,這種有著極強(qiáng)擴(kuò)展性的編程語言,從而實(shí)現(xiàn)了包括編程、編譯乃至網(wǎng)絡(luò)瀏覽等等功能的擴(kuò)展。

發(fā)展歷史

Emacs在1970年代誕生于MIT人工智能實(shí)驗(yàn)室(MIT AI Lab)。在此之前,人工智能實(shí)驗(yàn)室的ITS上運(yùn)行的操作系統(tǒng)PDP-6和PDP-10的默認(rèn)編輯器是一個(gè)叫TECO(Text Editor and Corrector)的行編輯器。與現(xiàn)代的文本編輯器不同,TECO將擊鍵、編輯和文本顯示按照不同的模式進(jìn)行處理,稍晚出現(xiàn)的vi與它有些類似。在TECO上擊鍵并不會(huì)直接將這些字符插入到文檔里去,必須先輸入一系列相應(yīng)的TECO指令,而被編輯的文本在輸入命令的時(shí)候是不會(huì)顯示在屏幕上的。在如今還在使用的UNIX編輯器ed(ed)上,我們還能看到類似的工作方式。

1970年代初,Richard Stallman訪問Stanford AI Lab時(shí)見到了那里的"E" editor。這種編輯器有著所見即所得的直觀特點(diǎn),深深打動(dòng)了Stallman。后來Stallman回到MIT,那時(shí)候MIT AI lab的黑客Carl Mikkelsen 已經(jīng)給TECO加上了稱作“Control-R”的編輯顯示模式,使得屏幕能跟隨用戶的每次擊鍵刷新顯示。Stallman重寫了這一模式,使它運(yùn)行得更有效率,后來又加入了宏,允許用戶重新定義運(yùn)行TECO程序的鍵位。

這一新版的TECO立刻在AI實(shí)驗(yàn)室流行開來,并且很快積累起了大量自定義的宏,這些宏的名字通常就以“麥金塔”或者“MACS”結(jié)尾,意為“宏”(macro)。兩年后,Guy Steele承擔(dān)起統(tǒng)一當(dāng)時(shí)存在的各種鍵盤命令集的工作。Steele和Stallman經(jīng)過一夜奮戰(zhàn),最終由Stallman完成了這一任務(wù),包括一套擴(kuò)展和注釋新的宏包的工具。這個(gè)完成的系統(tǒng)被稱作EMACS,代表“Editing MACroS”。根據(jù)Stallman的說法,他采用這個(gè)名字是“因?yàn)楫?dāng)時(shí)在ITS里還沒有被當(dāng)作縮寫用過。”("because was not in use as an abbreviation on ITS at the time." )也有說法指出,當(dāng)時(shí)波士頓在MIT附近有家名為“Emack & Bolio's”的商店出售的冰激凌很受歡迎,Dave Moon是那里的老主顧,他就將ITS上一個(gè)給文本排版的程序命名為BOLIO,然而Stallman并不喜歡甚或根本不知道那種冰激凌,此事后來成了黑客界的一樁公案。

Stallman意識(shí)到過多的定制、在開發(fā)過程中事實(shí)上的分支以及針對特殊用途的限制,威脅著Emacs的發(fā)展。后來他寫道:

“ Emacs的發(fā)布基于社群共享,這意味著所有的發(fā)展都要反饋給我,由我進(jìn)行整合和發(fā)布。("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一樣只能運(yùn)行在PDP-10系統(tǒng)。Emacs雖然是在TECO的基礎(chǔ)上發(fā)展起來的,不過它已經(jīng)足以被認(rèn)為是一個(gè)新的文本編輯器了。很快,Emacs就成為ITS上的標(biāo)準(zhǔn)編輯程序,接著由Michael McMahon移植到Tenex和TOPS-20系統(tǒng)上。

功能

Emacs不僅僅是一個(gè)編輯器,他是一個(gè)整合環(huán)境,或可稱它為集成開發(fā)環(huán)境,這些功能如讓使用者置身于全功能的操作系統(tǒng)中,在基于編輯器的功能基礎(chǔ)上,Emacs自行開發(fā)了一個(gè)“bourne-shell-like”的shell: EShell。Emacs還可以:

收發(fā)電子郵件

通過斷點(diǎn)續(xù)傳/TRAMP編輯遠(yuǎn)程檔案

通過Telnet登錄主機(jī)

上新聞組

登陸IRC和朋友交流

查看日歷

撰寫文章大綱

對多種編程語言的編輯

調(diào)試程序,結(jié)合GNU偵錯(cuò)器,EDebug等。支持C/C++PerlPythonLISP等等

玩游戲

計(jì)算器

記日記

管理日程,Task,ToDo,約會(huì)等

個(gè)人信息管理

目錄管理

文件比較

閱讀info和man文檔

瀏覽網(wǎng)站

為各種程序(TeX等)提供統(tǒng)一的操作界面

……

特點(diǎn)

交互式編輯器

實(shí)時(shí)編輯器

高級編輯器

自文檔化

可定制性

可擴(kuò)展性(集成LISP

支持X Window環(huán)境

各平臺(tái)上的Emacs

Emacs是目前世界上最具可移植性的重要軟件之一,能夠在當(dāng)前大多數(shù)操作系統(tǒng)上運(yùn)行,包括類Unix系統(tǒng)(GNU/Linux、各種BSD、Solaris、AIX、IRIX 等等)、MS-DOS、微軟 Window 以及OpenVMS等,還有移動(dòng)Android平臺(tái)以及iOS。

Emacs既可以在文本終端也可以在圖形用戶界面(GUI)環(huán)境下運(yùn)行。在類unix系統(tǒng)上,Emacs使用X Window產(chǎn)生GUI,或者直接使用“框架”(widget toolkit),例如Motif、LessTif或GTK+等等。Emacs也能夠利用Mac OS X和Microsoft Windows的本地圖形系統(tǒng)產(chǎn)生GUI。用GUI環(huán)境下的Emacs能提供菜單(Menubar)、工具欄(toolbar)、scrollbar以及context menu等交互方式。

編輯模式

Emacs采取的編輯方式是對不同類型的文本進(jìn)入相應(yīng)的編輯模式,即“主模式”(major mode)。Emacs針對多種文檔定義了不同的主模式,包括普通文本文件、各種編程語言的源文件、HTML文檔、TEX與LaTeX文檔,以及其他類型的文本文件等等。

每種主模式都有特殊的Emacs Lisp變量和函數(shù),使用戶在這種模式下能更方便的處理這一特定類型的文本。例如,各種編程的主模式會(huì)對源文件文本中的關(guān)鍵字、注釋以不同的字體和顏色加以語法高亮。主模式還提供諸如跳轉(zhuǎn)到函數(shù)的開頭或者結(jié)尾這樣特地定義的命令。

Emacs還能進(jìn)一步定義“次模式”(minor mode)。每一個(gè)緩沖區(qū)(buffer)只能關(guān)聯(lián)于一種主模式,卻能同時(shí)關(guān)聯(lián)多個(gè)次模式。比如,編寫c語言的主模式可以同時(shí)定義多個(gè)次模式,每個(gè)次模式有著不同的縮進(jìn)風(fēng)格(indent style)。

快捷鍵

掌握Emacs的快捷鍵可以說是Emacs愛好者的基本功,也是提高編輯速度和質(zhì)量所必備的,但是初學(xué)者可能記不住那么多的快捷鍵必要時(shí)可以翻一下,最常用的快捷鍵數(shù)量也就數(shù)十個(gè)。Emacs的快捷鍵都是綁定于ctrl和alt(或稱meta)上的,例如c-x就是ctrl+x,m-x就是alt+x。當(dāng)然所有的按鍵都可以自定義。

當(dāng)要退出編輯時(shí)C-x C-c 代表著,先按C-x 再按C-c才可以退出編輯環(huán)境.

幫助

C-h r 打開emacs 手冊。

C-h f 查找一個(gè)函數(shù)的用法。

C-h k 查找快捷鍵的用途。

C-h a 查找匹配的命令。

CH ? 顯示幫助的幫助,說明幫助的用法。

文件操作

C-x C-f 打開文件,出現(xiàn)提示時(shí)輸入/username@host:filepath可編輯FTP文件

C-x C-v 打開一個(gè)文件,取代當(dāng)前緩沖區(qū)

C-x 計(jì)算機(jī)科學(xué) 保存文件

C-x C-w 存為新文件

C-x i 插入文件

C-x C-q 切換為只讀或者讀寫模式

C-x C.C. 退出Emacs

編輯操作

C-f 前進(jìn)一個(gè)字符

C-b 后退一個(gè)字符

M-f 前進(jìn)一個(gè)單詞

M-b 后退一個(gè)單詞

C-a 移到行首

C-e 移到行尾

M-a 移到句首

M-e 移到句尾

C-p 后退一行

C-n 前進(jìn)一行

M-x gotoline 跳到指定行

C-v 向下翻頁

摩托船 向上翻頁

M-< 緩沖區(qū)頭部

M-> 緩沖區(qū)尾部

C-M-f 向前匹配括號

CMB 向后匹配括號

C-l 當(dāng)前行居中

M-n or C-u n 重復(fù)操作隨后的命令n次

C-u 重復(fù)操作隨后的命令4次

C-u C-u 重復(fù)操作隨后的命令8次

C-x ESC ESC 執(zhí)行歷史命令記錄,M-p選擇上一條命令,M-n選擇下一條命令

C-d 刪除一個(gè)字符

馬里蘭州 刪除一個(gè)單詞

NHK名古屋放送局 刪除一行

M-k 刪除一句

C-w 刪除標(biāo)記區(qū)域

C-y 粘貼刪除的內(nèi)容

注意:C-y可以粘貼連續(xù)C-k刪除的內(nèi)容;先按C-y,然后按M-y可以選擇粘貼被刪除的內(nèi)容

C-@ 標(biāo)記開始區(qū)域

C-x h 標(biāo)記所有文字

C-x C-x 交換光標(biāo)位置和區(qū)域標(biāo)記區(qū)開頭

M-w 復(fù)制標(biāo)記區(qū)域

C-_ or 富士電視臺(tái) u 撤消操作

執(zhí)行命令

M-x shell 打開殼層

M-x ansi-term 運(yùn)行term

M-! 執(zhí)行殼層命令 (shell-command)

M-1 M-! 執(zhí)行SHELL命令,命令輸出插入光標(biāo)位置,不打開新輸出窗口

M-| 針對某一特定區(qū)域執(zhí)行命令(shell-command-on-region), 比如 C-x h M-|uuencode

窗口操作

C-x 0 關(guān)閉本窗口

C-x 1 只留下一個(gè)窗口

C-x 2 垂直均分窗口

C-x 3 水平均分窗口

C-x o 切換到別的窗口

C-x s 保存所有窗口的緩沖

C-x b 選擇當(dāng)前窗口的緩沖區(qū)

富士電視臺(tái) ^ 縱向擴(kuò)大窗口

C-x } 橫向擴(kuò)大窗口

C-x { 橫向縮小窗口

緩沖操作

C-x C-b 打開緩沖區(qū)列表

d or k 標(biāo)記為刪除

~ 標(biāo)記為未修改狀態(tài)

% 標(biāo)記為只讀

s 保存緩沖

u 取消標(biāo)記

x 執(zhí)行標(biāo)記的操作

f 在當(dāng)前窗口打開該緩沖區(qū)

o 在其他窗口打開該緩沖區(qū)

目錄操作

C-x d 打開目錄模式

s 按日期/文件名排序顯示

v 閱讀光標(biāo)所在的文件

q 退出閱讀的文件

d 標(biāo)記為刪除

x 執(zhí)行標(biāo)記

D 馬上刪除當(dāng)前文件

C 拷貝當(dāng)前文件

R重命名當(dāng)前文件

+新建文件夾

Z壓縮文件

! 對光標(biāo)所在的文件執(zhí)行殼層命令

g 刷新顯示

i 在當(dāng)前緩沖區(qū)的末尾插入子目錄的內(nèi)容

[n]m 標(biāo)記光標(biāo)所在的文件,如果指定n,則從光標(biāo)所在的文件起后n個(gè)文件被標(biāo)記

[n]u 取消當(dāng)前光標(biāo)標(biāo)記的文件,n的含義同上

t 反向標(biāo)記文件

%-m 正則標(biāo)記

q 退出目錄模式

說明:在目錄模式中,如果輸入!,在命令行中包含*或者?,有特殊的含義。*匹配當(dāng)前光標(biāo)所在的文件和所有標(biāo)記的文件,?分別在每一個(gè)標(biāo)記的文件上執(zhí)行該命令。

程序編譯

M-x compile 執(zhí)行編譯操作

M-x gdb GDB排錯(cuò)

M-x dbx DBX排錯(cuò)

M-x xdb XDB排錯(cuò)

M-x 小直徑炸彈 小直徑炸彈排錯(cuò)

搜索模式

計(jì)算機(jī)科學(xué) key 向前搜索

計(jì)算機(jī)科學(xué) 查找下一個(gè)

ENTER 停止搜索

C-r key 反向搜索

C-s C-w 以光標(biāo)所在位置的字為關(guān)鍵字搜索

C-s C-s 重復(fù)上次搜索

C-r C-r 重復(fù)上次反向搜索

C-s ENTER C-w 進(jìn)入單詞搜索模式

C-r ENTER C-w 進(jìn)入反向單詞搜索模式

M-x replace-string ENTER search-string ENTER 替換

M-% search-string ENTER replace-string ENTER 交互替換

C-r 在進(jìn)入查找/替換模式后,該命令進(jìn)入迭代編輯模式

C-M-x 退出迭代編輯模式,返回到查找/替換模式

C-M-s 向前正則搜索

C-M-r 向后正則搜索

C-M-% 正則交互替換

SHELL模式

C-c C-c 相當(dāng)于Bash下的C-c

C-c C-z 相當(dāng)于Bash下的C-z

C-c C-d 相當(dāng)于Bash下的C-d

M-p 執(zhí)行前一條命令

M-n 執(zhí)行下一條命令

C-c C-o 刪除最后一條命令產(chǎn)生的輸出

C-c C-r 屏幕滾動(dòng)到最后一條命令輸出的開頭

C-c C-e 屏幕滾動(dòng)到最后一套命令輸出的結(jié)尾

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

收發(fā)郵件

M-x mail 發(fā)送郵件, C-c C-s 發(fā)送,C-c C-c 發(fā)送并退出

M-x rmail 接受郵件

用 gnus 收發(fā)郵件,閱讀新聞組

M-x gnus 可以通過強(qiáng)大的 gnus 來收發(fā)郵件,閱讀新聞組。可以參考

或者閱讀 gnus 自帶的 manual 來獲得詳細(xì)信息。

富士電視臺(tái) m 撰寫新郵件

定制

Emacs用戶可以根據(jù)自身的需要和偏好對編輯器進(jìn)行定制。強(qiáng)大而自由的個(gè)人定制功能是Emacs受到廣泛歡迎的重要原因之一。定制Emacs主要有三種方法。

第一種方法是使用Emacs的交互式定制功能。Emacs提供了圖形化的交互界面,使用戶能夠?qū)啥ㄖ频墓沧兞窟M(jìn)行設(shè)置。這種方法使Emacs的初學(xué)者不需要接觸Emacs Lisp代碼即可完成定制。

第二種方法是將一系列按鍵記錄為宏,調(diào)用這一宏可以重復(fù)進(jìn)行已經(jīng)記錄的一系列復(fù)雜操作。宏可以保存并命名,以便按名調(diào)用,不過同一時(shí)刻只能存在一個(gè)匿名的宏。

第三種方法是通過使用Emasc Lisp完成Emacs的定制。這種方法最為復(fù)雜,但是也提供了更多的靈活性和更強(qiáng)大的功能。用戶通常將個(gè)人定制的Emacs Lisp代碼保存在一個(gè)名為.emacs的配置文件中,Emacs程序運(yùn)行之初便讀取這一文件,完成用戶要求的配置。用戶可以通過.emacs文件重設(shè)變量、重新定義按鍵的綁定(key bindings)、以及定義新的命令,以方便用戶個(gè)人的使用。很多高級用戶的.emacs文件的個(gè)性化配置長達(dá)數(shù)百行甚至更多,這些個(gè)人的定制使他們的Emacs不僅與默認(rèn)配置的功能不同,每個(gè)人的Emacs之間也千差萬別。這種差異能很好的滿足不同個(gè)性的偏好和不同工作的需求。

如果一段Emacs Lisp代碼確實(shí)有用,它通常會(huì)被打包并發(fā)布給其他用戶。在因特網(wǎng)上能找到很多這樣來自第三方的elisp庫,例如能用于編輯維基百科條目的wikipedia-mode。Usenet上的新聞組gnu.emacs.sources專門發(fā)布新的elisp庫。有些第三方代碼最終還成為了Emacs“標(biāo)準(zhǔn)庫”的一部分。

國際化

Emacs支持對多種文字的文本編輯,包括UTF-8在內(nèi)的諸多編碼系統(tǒng),加上對多種字符集、文稿、書寫系統(tǒng),以及不同文化的書寫習(xí)慣都提供了支持,使得世界上大多數(shù)語言的使用者都能通過Emacs進(jìn)行文本處理。Emacs還能通過調(diào)用諸如ispell這樣的外部程序,實(shí)現(xiàn)多種語言的拼寫檢查。

版權(quán)

Emacs的版權(quán)遵從GNU通用公共許可證(GPL),賦予他人自由地對包括C和LISP在內(nèi)的Emacs源文件進(jìn)行修改和再發(fā)行的權(quán)利。較早版本的GNU Emacs文檔是在一種點(diǎn)對點(diǎn)(ad-hoc)的許可下發(fā)布的,要求所有修改過的副本都要包含某些特定的文字。例如,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 的同時(shí)還會(huì)安裝以下組件:

保持X剪貼板和緩沖區(qū)之間的同步(autocutsel)

郵件美化(Muttprint)

詳細(xì)信息

總大小:下載23.8MB,安裝所需空間73.6MB

版本:23.2+1-7ubuntu2 (emacs23)

許可協(xié)議:開放源代碼

更新:Cononical提供GNU Emacs23的關(guān)鍵更新至2012年十月。

版本發(fā)布

隨后的幾年里,開發(fā)出了許多運(yùn)行于其他操作系統(tǒng)的類Emacs的編輯器,包括由Michael McMahon和Daniel Weinreb編寫的SINE(Sine is not EMACS)、EINE("EINE Is Not EMACS)以及ZWEI(“ZWEI Was EINE Initially”,工作于LISP機(jī)器),它們的名字在德語中分別是“一”和“二”的意思。1978年,Honeywell的Cambridge Information Systems Lab的Bernard Greenberg用MaclispLISP的一種)編寫出Multics Emacs,第一次完全采用Lisp作為擴(kuò)展語言。Lisp語言提供了前所未有的靈活性,因此被后來的Emacs開發(fā)者沿用。

最早在Unix上運(yùn)行的Emacs類編輯器是1981年James Gosling編寫的Gosling Emacs(Gosling后來發(fā)明了Java編程語言)。Gosling Emacs以c語言編寫,使用Mocklisp作為擴(kuò)展語言,MockLISP有著類似LISP的語法。1984年,Gosling Emacs成為專有軟件(Proprietary software)。

GNU Emacs

1984年,Richard Stallman開始致力于開發(fā)GNU Emacs,這是一個(gè)自由軟件,以代替成為專有軟件的Gosling Emacs。最初GNU Emacs是在Gosling Emacs的基礎(chǔ)上開發(fā)的,不過Stallman后來用一個(gè)真正的LISP解釋器代替了原來的Mocklisp解釋器,由于Lisp解釋器在此軟件中的核心地位,這意味著實(shí)際上重寫了幾乎全部代碼。GNU Emacs是GNU計(jì)劃的第一個(gè)項(xiàng)目,以c語言編寫,將Emacs Lisp(其解釋器由C實(shí)現(xiàn))作為擴(kuò)展語言。GNU Emacs最早廣泛發(fā)布的版本是15.34,出現(xiàn)于1985年。實(shí)際上版本2到12并不存在,GNU Emacs的早期版本都是以“1.x.x”的形式編號,后來他們把版本號最前面的1給丟掉了,因?yàn)樵瓉淼挠浄ńo人一種主版本號永遠(yuǎn)不變的感覺。因此,Version 13是第一個(gè)public release,它發(fā)布于1985年3月20日。

GNU Emacs和Gosling Emacs一樣運(yùn)行在Unix系統(tǒng)上。不過GNU Emacs的功能更多,特別是它有一個(gè)真正的lisp作為擴(kuò)展。結(jié)果,GNU Emacs很快就取代了Gosling Emacs,成為Unix系統(tǒng)上事實(shí)的Emacs編輯器。

1999年之前,GNU Emacs的開發(fā)相對封閉,以至于到了在《大教堂和市集》這本書里被用作“教堂式”開發(fā)的典范這樣一個(gè)程度。在那以后這個(gè)項(xiàng)目就采用了公開的開發(fā)郵件列表和匿名CVS訪問。開發(fā)工作在一個(gè)單獨(dú)的CVS trunk中進(jìn)行,目前的版本號是24.1、它的維護(hù)者是Richard Stallman。

XEmacs

1991年,Lucid公司的Jamie Zawinski等人以GNU Emacs 19的一個(gè)早期alpha版為基礎(chǔ),添加了一些新的特性,開發(fā)出Lucid Emacs。很快,Lucid Emacs的開發(fā)與GNU Emacs漸行漸遠(yuǎn),最終雙方的團(tuán)隊(duì)放棄了將兩者合并的努力。Lucid Emacs被重新命名為XEmacs,它不像GNU Emacs那樣要求嚴(yán)格的代碼授權(quán),因此能夠吸納大量的優(yōu)秀擴(kuò)展,在很多方面比GNU Emacs更為優(yōu)秀。到目前為止,兩者都是眾多Emacs類編輯器中最受歡迎的選擇。

參考資料 >

生活家百科家居網(wǎng)