Emacs是一種強(qiáng)大的文本編輯器,在程序員和其他以技術(shù)工作為主的計(jì)算機(jī)用戶中廣受歡迎。EMACS,即Editor MACroS(編輯器宏)的縮寫,最初由Richard Stallman(理查德·馬修·斯托曼)于1975年在MIT協(xié)同Guy Steele共同完成。這一創(chuàng)意的靈感來源于TECMAC和TMACS,它們是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人編寫的宏文本編輯器。
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)室流行開來,并且很快積累起了大量自定義的宏,這些宏的名字通常就以“MAC”或者“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í)上的分支以及針對(duì)特殊用途的限制,威脅著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的功能特點(diǎn)
Emacs不僅僅是一個(gè)編輯器,他是一個(gè)整合環(huán)境,或可稱它為集成開發(fā)環(huán)境,這些功能如讓使用者置身于全 emacs功能的操作系統(tǒng)中,在基于編輯器的功能基礎(chǔ)上,Emacs自行開發(fā)了一個(gè)“bourne-shell-like”的shell: EShell。Emacs還可以: 收發(fā)電子郵件 通過FTP/TRAMP編輯遠(yuǎn)程檔案 通過Telnet登錄主機(jī) 上新聞組 登陸IRC和朋友交流 查看日歷 撰寫文章大綱 對(duì)多種編程語言的編輯 調(diào)試程序,結(jié)合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等 玩游戲 計(jì)算器 記日記 煮咖啡 管理日程,Task,ToDo,約會(huì)等 個(gè)人信息管理 目錄管理 文件比較 閱讀info和man文檔 瀏覽網(wǎng)站 為各種程序(TeX等)提供統(tǒng)一的操作界面 ……
編輯本段此外Emacs還有如下特點(diǎn):
display editor 實(shí)時(shí)編輯器 高級(jí)編輯器 Self-documenting 可定制性 可擴(kuò)展性(集成Lisp語言) 支持X Window環(huán)境
編輯本段各平臺(tái)上的Emac
Emacs是目前世界上最具可移植性的重要軟件之一,能夠在當(dāng)前大多數(shù)操作系統(tǒng)上運(yùn)行,包括類Unix系統(tǒng)(GNU/Linux、各種BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等。 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采取的編輯方式是對(duì)不同類型的文本進(jìn)入相應(yīng)的編輯模式,即“主模式”(major mode)。Emacs針對(duì)多種文檔定義了不同的主模式,包括普通文本文件、各種編程語言的源文件、HTML文檔、TEX與LaTeX文檔,以及其他類型的文本文件等等。 每種主模式都有特殊的Emacs Lisp變量和函數(shù),使用戶在這種模式下能更方便的處理這一特定類型的文本。例如,各種編程的主模式會(huì)對(duì)源文件文本中的關(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的快捷鍵可以說是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-x C-f 打開文件,出現(xiàn)提示時(shí)輸入/username@host:filepath可編輯FTP文件 C-x C-v 打開一個(gè)文件,取代當(dāng)前緩沖區(qū) C-x C-s 保存文件 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 goto-line 跳到指定行 C-v 向下翻頁 M-v 向上翻頁 M-< 緩沖區(qū)頭部 M-> 緩沖區(qū)尾部 C-M-f 向前匹配括號(hào) C-M-b 向后匹配括號(hào) 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è)字符 M-d 刪除一個(gè)單詞 C-k 刪除一行 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 C-x u 撤消操作
編輯本段執(zhí)行SHELL命令
M-x shell 打開SHELL M-! 執(zhí)行SHELL命令 (shell-command) M-1 M-! 執(zhí)行SHELL命令,命令輸出插入光標(biāo)位置,不打開新輸出窗口 M-| 針對(duì)某一特定區(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ū) C-x ^ 縱向擴(kuò)大窗口 C-x } 橫向擴(kuò)大窗口
編輯本段緩沖區(qū)列表操作
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 壓縮文件 ! 對(duì)光標(biāo)所在的文件執(zhí)行SHELL命令 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 sdb SDB排錯(cuò)
編輯本段搜索模式
C-s key 向前搜索 C-s 查找下一個(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ā)郵件,閱讀新聞組。可以參考 [1] 或者閱讀 gnus 自帶的 manual 來獲得詳細(xì)信息。
編輯本段定制
Emacs用戶可以根據(jù)自身的需要和偏好對(duì)編輯器進(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è)人的使用。很多高級(jí)用戶的.emacs文件的個(gè)性化配置長(zhǎng)達(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)庫”的一部分。
編輯本段國(guó)際化
Emacs支持對(duì)多種文字的文本編輯,包括UTF-8在內(nèi)的諸多編碼系統(tǒng),加上對(duì)多種字符集、文稿、書寫系統(tǒng),以及不同文化的書寫習(xí)慣都提供了支持,使得世界上大多數(shù)語言的使用者都能通過Emacs進(jìn)行文本處理。Emacs還能通過調(diào)用諸如ispell這樣的外部程序,實(shí)現(xiàn)多種語言的拼寫檢查。
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||