A.1 Emacs簡介 前面已經介紹過一種全屏幕文本編輯工具Vi,這裡將介紹另外一種功能強大、應用也非常廣泛的全屏幕文本編輯器Emacs。 Emacs全稱為Editor MACroS,由於其移植性極好,所以在當今世界的幾乎任何一個操作系統上都可以見到它的身影。現在的Emacs已經超出了原來的單一的文本編輯功能,可以用來管理文件、閱讀公告板,甚至可以進行WWW浏覽。另外Emacs源代碼可以使用C、C++、Lisp等語言定制,對一些編程愛好者來說,這無疑是一大福音,同時也使其靈活性大大增加。 Emacs編輯器的使用、操作與使用其他標准的文本編輯器一樣。鍵盤上普通的按鍵用來輸入字符,而編輯器的操作命令是通過鍵盤上的一些特殊的按鍵來實現的,例如Ctrl、Alt等控制鍵。與Vi不同,Emacs編輯器沒有特定的輸入模式與命令模式之分。在輸入文本時,也可以執行編輯命令,例如用Ctrl鍵來移動光標、保存文件等,而不必忍受切換模式的麻煩。 Emacs 編輯器是一個復雜且非常靈活的編輯器.它有好幾百個編輯命令。Emacs編輯器也有一些特殊的特性,例如多窗口特性,可以在編輯文件時同時顯示兩個窗口。也可以同時打開並對多個文件進行編輯與操作,並在屏幕上與之對應的編輯窗口內顯示各個文件。 Emacs編輯器通過巧妙地控制、操作工作緩沖區來實現其強大、靈活的功能。Emacs編輯器可以被認為是面向緩沖區的編輯器。在任何編輯器中編輯文件時,該文件將首先被拷貝到工作緩沖區中,而所有的編輯操作都在工作緩沖區中進行。許多編輯器在編輯文件時僅開辟一個工作緩沖區,因此僅能打開一個文件。而Emacs編輯器可以同時開辟並管理多個工作緩沖區,因此允許同時對多個文件進行編輯操作,還可以用編輯緩沖區來保存、刪除或拷貝文本,用戶甚至可以開辟目己的緩沖區,並在這些緩沖區中保存文本,必要時可以把這些緩沖區內的文本保存到文件中。
A.2 Emacs的啟動與退出 A.2.1 Emacs的啟動 通過鍵入: $ emacs [文件名] 進入Emacs文本編輯程序。如果不鍵入文件名,則將創建一個新文件而不是打開現存文件(如圖A-1所示)。 圖A-1 Emacs程序界面 無論建立新文件還是打開一個現有文件,在處理方法上都是將其放入緩沖區中。和Vi一樣,只要用戶不發出存儲到磁盤的命令,緩沖區的內容就不會寫到文件中。同時這也使用戶可以在多個緩沖區之間進行復制、粘貼等操作,非常方便。 A.2.2 Emacs的退出 當對文件做必要的修改後需要退出時,有幾種可行的途徑。如果對文件未做任何修改,則直接使用Ctrl+x、Ctrl+c即可退出Emacs;如果對文件做了修改,則同樣使用以上按鍵組合退出,只是這時系統將詢問是否保存文件,如果鍵入y,則系統保存文件;如果是個新文件,系統提示輸入文件名,保存後退出。如果鍵入n,則系統將再次詢問是否真的不保存緩沖區中的內容退出,這時回答yes則放棄所做修改退出;當然也可以先使用命令保存文件,然後再退出,這時可以使用Ctrl+x、Ctrl+s組合鍵,系統將保存文件並退出。如果要把編輯程序存到另一個和原來文件不同的文件中,可以使用Ctrl+x、Ctrl+w組合鍵,然後指定新文件名即可。 如果用戶正在進行Emacs的有關操作,需要Linux執行其他的操作,可以選擇下列任何一種方法。 1. 中止Emacs並返回Linux shell 通過按Ctrl+z就可以中止任何Linux應用程序。該組合鍵將當前的應用程序放入後台並向用戶提供另一個shell提示符。若要重新激活Emacs,可鍵入命令fg,將後台任務帶回前台。若正在使用的shell不懂此命令,鍵入exit,重新激活Emacs。 2. 從Emacs中發出一個shell命令 如果不需要完整的shell環境,可以考慮在Emacs中使用shell命令。要在Emacs中使用shell命令,按Ctrl+u、Esc、!,之後將提示輸入一個shell命令。輸入命令並回車,Emacs將命令傳遞給Linux shell,然後shell執行這個命令。如果不在前面加上Ctrl+u命令,Emacs將把輸出結果放到一個叫shell執行結果緩沖區中。如果需要關閉該窗口可以使用Ctrl+x命令。
A.3 用Emacs編輯器創建文件 利用Emacs建立新文件的步驟如下: 1. 啟動emacs(鍵入emacs並回車),可以看到圖A-1所示的屏幕。 2. 向緩沖區添加文件內容。 3. 將緩沖區中的內容保存到某一文件中(假設文件名為mydata)。按Ctrl+x、Ctrl+s,然後鍵入文件名(mydata),再回車,就將緩沖區中的內容存入文件(mydata)中了。狀態行上會顯示如下信息: Wrote /root/mydata 表示已建立了新文件(mydata),並把它保存到磁盤上。 4. 按Ctrl+x、Ctrl+c退出Emacs。 若退出Emacs時存在未保存的內容,Emacs會提示用戶保存文件。在Emacs命令後輸入想編輯的文件名,如果該文件名不存在,該文件將被創建。在下面的例子中,用戶准備用Emacs編輯器來編輯名為mydata的文件。 $ emacs mydata 與Vi編輯器一樣,Emacs編輯器是一個全屏幕編輯器。當編輯的文件是新創建的文件時,除屏幕的底部兩行外,屏幕是空白的,光標將位於屏幕的左上角。如圖A-2所示。 圖A-2 Emacs編輯器的編輯屏幕 A.3.1 META鍵、Emacs屏幕及編輯模式 Emacs編輯器的編輯操作與許多普通的文字處理器類似。Emacs編輯器僅有一種編輯模式輸入模式。如果鍵入任何字符鍵,鍵入的字符將被輸入到編輯的文件中,所有的字符鍵都被用來輸入字符,而不是用來輸入命令。 在一些計算機上有META鍵,即可以使用META-x組合鍵。在沒有META鍵的計算機上,META-x等於先按Esc鍵,再按x鍵。有些系統的META鍵就是Alt(或者某一邊的Alt鍵)。Emacs編輯命令基本上是一串Ctrl-x及META-x按鍵命令的組合(簡記為C-x和M-x)。Alt鍵命令系列與Ctrl鍵命令系列的操作基本相同,即首先一直按住Alt鍵,再鍵入相應的按鍵,最後同時放開這兩個鍵。但Esc鍵命令系列稍微有點不同:首先鍵入Esc鍵,然後放開該鍵,再鍵入相應的按鍵。Esc鍵的使用頻率要比Alt鍵的使用頻率高,因為很多早期的鍵盤根本沒有Alt鍵。因此,本章主要介紹這些META鍵,同時必須記住,這些META鍵也可以用終端上的Alt鍵來代替。 從圖A-1、A-2所示的Emacs編輯器屏幕可以看出以下幾個特點:首先有一組菜單選項(即Buffers、Files、Tools、Edit、Search、Mule、Help)。所有的Emacs命令都可從這個下拉菜單執行;屏幕的最下面一行是小緩沖區,主要用於顯示使用過的命令;倒數第二行被稱為狀態行,主要顯示如下信息:文件名、當前模式、光標位置和當前位置在文件中的相對位置;狀態行以上的所有屏幕都被稱為緩沖區。 在狀態行上顯示的是正在編輯的文本的狀態信息。狀態行由幾個部分組成,其形式如下: --1-:ST-F1 BulfferName (模式)--Lx―Place---------- 第一個域是ST(Status),它表示若最近對文件進行了修改,該修改的文件是否已經被保存過。如果該域是兩個星號(“**”),表示該文本已經被修改過,但沒有保存;如果該域是兩個連字符(“--”),表示該文件從最後一次保存到現在還沒有被修改過。 BufferName域表示該工作緩沖區的名字,這個工作緩沖區名將是目前編輯的文件名。而Lx表示光標當前的位置,Place域表示光標當前處於被編輯的文件的何處。例如,如果Place域是40%,那麼,表示光標當前大約位於文件的40%處。在下面的例子中,狀態行表示該文件自最近一次修改以來,還沒有被保存過,工作緩沖區的名字是mydata,光標處於文件的第4行。 --1-:**-F1 mydata (Fundamental)--L4--All----------- Emacs 在小緩沖區下有“自動補全”功能。該功能可以為用戶節省許多時間。當在小緩沖區輸入文本串、一行長命令或輸入文件名時,就可以用到自動補全功能。如果有兩個以上的選擇,它也會顯示選項列表。這個功能對Ctrl+x、Ctrl+f等文件編輯功能也是有效的。
A.4 編輯操作及命令 Emacs編輯器的編輯命令能執行許多操作,其他編輯器基本上也有類似的編輯操作。Emacs編輯器中所有的編輯命令基本上都通過Ctrl鍵、Alt鍵或Esc鍵組成的命令序列來完成與實現。所有這些編輯命令也都有對應的命令名,用戶可以在小緩沖區中輸入這些命令。如果從xterm上進入Emacs,則可從編輯器屏幕上方的下拉菜單中選擇菜單選項來執行相應的命令。本節將介紹一些常見命令。 A.4.1移動命令 Emacs編輯器有一組基本的光標移動命令。Ctrl+f命令用來將光標前移(右移)一個字符,而Ctrl+b命令用來後移(左移)一個字符。Emacs編輯器把一個文件看作一種流式字符串,而不是一系列的文本行。向後移動光標命令將使光標沿流式文本左移一個字符(例如在當前行的行首將光標左移一個字符時,光標將回到上一行的行尾)。向前移動光標命令也是如此。 也有一組編輯命令能使用戶在文件中以行為單位移動光標或整屏移動光標。Ctrl+n命令將把光標移動到下一行上,如果此時光標位於屏幕最後一行,屏幕將下滾,使當前行的下一行顯示在屏幕上。Ctrl+p命令將把光標移動到上一行,如果此時光標位於屏幕最頂行,屏幕將上滾,使當前行的前一行顯示在屏幕上。Ctrl+v命令及Esc v命令將整屏滾動文本。Ctrl+v命令將使文本向前滾屏並顯示下一屏文本,而Esc 命令將使文本向後滾屏並顯示上一屏文本。 由於上面幾條命令是在鍵盤上沒有方向鍵時開發的,所以可能很多新用戶會不大習慣這種使用。事實上,現在的鍵盤都有方向鍵,可以使用上下左右四個方向鍵來替代這四個命令。甚至Emacs程序支持PageUp和PageDown鍵上下翻頁。 用戶也可以以單詞、段落等為“計量單位”來移動光標。META鍵命令Esc f及Esc b用來以單詞為單位前、後移動光標。 Esc a命令可以把光標移動至句首,而Esc e命令將把光標移動至句尾;Ctrl+a命令將把光標移動