2009年4月19日 星期日

[轉]Emacs

下文中Emacs均指GNU Emacs,XEmacs與GNU Emacs相似。
轉眼用Emacs已經有兩年,越來越心悅誠服於它的強大功能。常常是我腦子裏閃出個念頭「如果Emacs有這個功能就好了」,結果一查手冊,嘿,Emacs還真的就已經預備好了。
想到剛開始時自己的將信將疑;我相信很多朋友看著不起眼的Emacs界面肯定也想象不出Emacs究竟有什麼好,更別提改用Emacs了。本著「好東西要大家分享」的精神,我就結合自己這兩年來的心得簡單介紹一下我認為很強、很實用的Emacs的功能並就如何學習Emacs發表一下自己的想法。希望能對想了解的Emacs的朋友有所幫助。如果能因此拉幾個人入夥更好。由於篇幅的限制,Emacs的抓圖就不奉上了,也許有空的話我可以上傳幾張到 blog(http://jixunuli.cublog.cn)上。
Emacs的優點
1. 首先,Emacs是「跨平台」的。大部分操作系統(UNIX、windows)都有相應的Emacs。所以不用擔心換了開發平台後又要重新學習一種新的編輯器。而且許多操作系統默認就安裝了Emacs。
2. Emacs的文本編輯功能十分強大,特別是對編程的支持,感覺十分貼心。畢竟Emacs是程序員開發的,程序員最清楚哪些功能能幫助程序員編程。
3. Emacs高度可定制。這給我們充分的自由。當然如果不願(或暫時不會)定制,完全可以用默認的配置。
4. Emacs高度可擴展,而且各種擴展的風格統一。據說Emacs的設計使得它十分易於擴展。設計上的問題我不清楚,但是從用戶的角度來看,Emacs安裝插件確實很方便而且插件也確實很多。尤其是對與程序開發工具的集成(如gcc,cscope等)提供了極大的方便。經過配置,Emacs簡直就是一個 IDE。
5. Emacs提供圖形的交互界面,但同時又徹底支持命令行模式,用戶僅用鍵盤就可以實現所有的操作。鍵盤比鼠標方便?很多時候是這樣的,要不然為什麼快捷鍵叫「快捷」鍵。
Emacs的功能
本節,我將簡單介紹一下我在日常使用中感覺比較方便的、Emacs21.3安裝包自帶功能和插件:
· 強大的文本編輯功能:
o 對許多編程語言(如c/c++/java/sql/shell等等)的支持:語法高亮、代碼縮進、多種形式的代碼折疊、塊操作等等;還可以通過安裝插件支持新出現的語言。安裝插件color-theme後可以方便的改變語法高亮的顏色。
o 代碼補全(hippe expand)與IDE常見的代碼提示不太一樣。二者各有千秋,如果能兼具兩者最好了(eclipse就兩種功能都具備)。
o 自動代碼插入。主要三種形式:一是abbrev:輸入縮寫自動替換成完整形式;如輸入「cc」自動替換成「const_cast」。二是 skeleton:輸入命令後,自動在選中的代碼周圍加上預制的代碼;例如我選中一段代碼然後輸入命令「trycatch」,選中的代碼就會被包裹在 try/catch塊中。Skeleton還可以定義成abbrev。三是auto insert:創建文件時根據模板自動生成代碼,例如版權聲明。
· EDIFF
Ediff是Emacs集成的比較與合並(merge)文本文件內容的工具。有了它,你可以方便地比較兩個(或三個)不同文件、文件夾。較其它比較工具而言,它的特點是它與編輯器(即Emacs本身)集成在一起,所以在比較的過程可以方便的編輯被比較的文件。例如語法高亮仍然有效。
它還提供了對版本控制工具的支持,例如用ediff-revision命令可以方便的比較不同版本之間的區別。
· CVS與VSS
Ediff的一個重要用處就是為版本控制提供幫助。Emacs自帶了CVS等傳統版本控制工具的接口,使用這些接口可以非常方便地調用CVS等。比直接在命令行使用CVS方便多了。
如果使用微軟的VSS,安裝一個名叫「source-safe」的插件就行了。
· Dired
在命令行模式下,刪除、拷貝、重命名等文件操作有時是件挺麻煩的事情。常常需要鍵入了一長串的路徑和文件名;在命令執行後才發現命令寫錯了。如果還和我一樣總記不住路徑的話就更麻煩了。
在Dired模式你可以方便的進行單個或批量文件操作:新建、刪除、查看、複制、重命名、查找(包含某字符串、正則式的文件)等。
· Eshell
Eshell是用Emacs的專用語言elisp實現的shell。啟動後它內嵌在Emacs中。因為這個特點,它可以充分利用Emacs的資源,好處真是妙不可言呀,只能說「誰用誰知道」。
· Cscope
Emacs還有cscope的接口。利用該接口,你可以在編碼的過程中隨時使用cscope查找函數、變量等等。同樣,比直接在命令行使用cscope
· GCC、GDB、CC、DBX
Emacs內置以上四種編譯器、調試器的接口,呈獻給用戶一個可視化的編譯、調試環境。無論是編譯還是調試時都可以方便的定位到想看的源碼上。
· Speedbar
Emacs內置的工具,類似於IDE中常見的瀏覽窗口。也是ECB的基礎之一。
· Color-theme
前面已經提到過了。Emacs是高度可配置的,所以你可以定制語法高亮的顏色搭配。但是我這樣缺乏美術細胞的人是不可能配出好看的語法高亮來的。幸好有熱心人寫了插件color-theme。它提供了很多配色方案,肯定有一款合你的意。我選的是gnome2。
· Tabbar
有了tabbar,Emacs會將所有打開的文件以tab頁的形式顯示出來(就像ultra-edit那樣)。
· ECB
全稱是Emacs code browser,安裝之前要先安裝cedet。我認為它是speedbar的升級品,看上去很花。但老實說,我覺得熟悉Emacs後,它的用處不大。剛開始用Emacs時有它可能會覺得方便些。
· Ange-FTP、emacsclient、gnuclient
Ange-ftp讓你能夠方便的編輯遠程ftp服務器上的文件(和Ultra editor的功能一樣)。
Emacsclient和gnuclient使得Emacs成為一個文本編輯的server,可以方便快速地將編輯文本的工作轉到Emacs上。本人表達能力有限,沒用過Emacs的人可能不知這句話所雲,否則就知道這是一個很好的功能。
· WOMAN
Emacs集成的看man page的工具,比MAN(unix自帶的工具)要方便。WOMAN(對應於MAN)這個名字體現了大牛們的幽默,全稱是With Out Man。
· VisEmacs
用慣了Emacs後,也許就會和我一樣無法忍受VC的代碼編輯器了。不得不用VC開發windows的程序時,VisEmacs可以減輕我們的痛苦。給VC裝上這個插件後,編輯界面沒有任何不同,但是編輯代碼時就會自動轉到Emacs。
如何學習
以上說了這麼多,也許你會關心要花多大代價才能全部掌握。確實,要體驗Emacs的強大需要花些時間,但是絕對不需要花很多時間。當然啦,如果你願意,你可以持續的投入時間,從Emacs持續的得到回報。曾經,我一度把看Emacs手冊作為放松,因為每次看都能學到一些讓我happy的新技巧。

Emacs入門只需要也*必須*要學習Emacs的一些基本概念。這大約需要一個小時左右。Emacs自帶的手冊使用很方便,也寫得很好(再次向 Emacs及其手冊的作者們致敬)。啟動Emacs後可以用鼠標從菜單欄打開手冊。搞清楚buffer、mode、kill ring、undo ring、region、ctrl鍵、meta鍵等概念就算會用Emacs了。如果你是Viper(習慣使用vi的人),你也許會需要一些時間來適應。需要提醒的是:Emacs啟動相對較慢而且設計Emacs時設想的應用就是同時編輯多個文件。所以一般只需也應該只啟動一個Emacs進程才能充分利用 Emacs的好處。我現在的工作場景是:每天早上一上班就遠程登錄到Solaris服務器上,然後啟動Emacs;接下來所有的工作都通過Emacs完成,登錄shell的作用幾乎只是用來啟動Emacs;下班時,退出Emacs關機走人。

會用Emacs之後就可以開始用它進行工作了,遇到需要什麼功能的時候再現學什麼功能。前面提到的那些功能都很容易掌握,一般花幾分鍾看看手冊就行。別忘了,各種擴展的風格是統一的,所以有時不看手冊,想當然的去操作也沒錯。倒是各種各樣的小技巧多多益善,積累起來需要一些時間。但那只是錦上添花,不用急著學會。如果使用過程中遇到一些小問題,可以上網查。網友們的熱心程度是毫無疑問的。

一個合適的配置文件能讓Emacs更加貼心。找一個現成的配置文件,然後根據需要修改成自己的配置是不錯的辦法。我的配置文件可以在我的blog上找到(http://www.cublog.cn/u/13684/?u=http://www.cublog.cn/u/13684 /showart.php?id=72609)。

資源
www.gnu.org
GNU的老巢,也是Emacs的官方網站。
www.emacswiki.org
大量的Emacs資源。很多牛人也在上面,或許回答你問題的就是Emacs的開發者呢。
www.linuxfrum.net
中國linux論壇。裏面有個專門的Emacs版。Emacs使用中遇到問題可以到這來查、來問。

0 意見:

張貼留言