學(xué)無止境!!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            0 隨筆 :: 1 文章 :: 0 評(píng)論 :: 0 Trackbacks
          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)多種語言的拼寫檢查。
          posted on 2012-04-04 14:08 蔥頭 閱讀(310) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 兴山县| 始兴县| 鄂托克前旗| 古蔺县| 稷山县| 名山县| 乐清市| 利川市| 体育| 讷河市| 方城县| 华宁县| 山东| 四子王旗| 厦门市| 万安县| 方山县| 瑞金市| 阜新市| 五常市| 东乌珠穆沁旗| 西安市| 荥经县| 蛟河市| 台南市| 蕉岭县| 榆社县| 福贡县| 凤城市| 长沙县| 育儿| 广宁县| 永宁县| 英德市| 类乌齐县| 和平区| 赣州市| 富阳市| 高安市| 舞阳县| 象州县|