David.Ko

          Follow my heart!
          posts - 100, comments - 11, trackbacks - 0, articles - 0
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Emacs 快速指南

          Posted on 2007-09-29 12:48 David.Ko 閱讀(1081) 評論(0)  編輯  收藏 所屬分類: Ubuntu

          【注意:位于【】之間的內容是譯注,比如本行,下同。】

          Emacs 鍵盤命令通常包含 CONTROL 鍵(有時候以 CTRL 或 CTL 來標示)和 META 鍵(有時候用 EDIT 或 ALT 來標示)。為了避免每次都要寫出全名,我們 約定使用下述縮寫:

           C-<chr>  表示當輸入字符 <chr> 時按住 CONTROL 鍵。
          因此 C-f 就表示:按住 CONTROL 鍵再輸入 f。

          M-<chr> 表示當輸入字符 <chr> 時按住 META(或 EDIT 或 ALT)鍵。
          如果你的鍵盤上沒有 META 、EDIT 或 ALT 鍵,用下述方法也等效:
          先按一下 ESC 鍵然后放開,再輸入 <chr>。我們用 <ESC> 來表示
          ESC 鍵。

          重要提示:要退出 Emacs,請用 C-x C-c(兩個連續的組合鍵)。下文中左邊頂 行的“>>”字樣用來提示你嘗試鍵盤命令。比如: <<Blank lines inserted around following line by help-with-tutorial>> [本頁當中特意留出一些空白是出于教學目的,請繼續往后看] >> 現在輸入 C-v (查看下一屏文字)移動到下一屏。

             (別緊張,在輸入字符 v 的同時注意要按住 CONTROL 鍵)
          從現在開始,每讀完當前一屏你都需要這樣做一次。

          值得注意的是,當你從上一屏滾到下一屏時,中間會有兩行的重復;這樣做是為 了維持滾屏的連續性,方便你順暢、連續地閱讀。

          用編輯器,開門第一件事就是學會在文字中移動。你已經知道了 C-v 可以向下移 動一屏,要往上移,請用 M-v (也就是按住 META 鍵,然后輸入v,如果你沒有 META、EDIT 或 ALT 鍵那么就先按 <ESC> 再按 v)。

          >> 試試 M-v,然后再試試 C-v,來回遛幾次。

          • 小結(SUMMARY)

          以下命令在翻頁瀏覽時相當有用:

                  C-v     向前移動一屏
          M-v 向后移動一屏
          C-l 重繪屏幕,并將光標所在行置于屏幕的中央
          (注意是 CONTROL-L,不是 CONTROL-1)

          >> 找到光標,留意其附近的文字,然后輸入 C-l。

             找找光標在哪里,你會發現其附近的文字并沒有變化。

          如果你的鍵盤上有 PageUpPageDn,也可以用這兩個鍵來滾屏。不過使用 C-v 和 M-v 的效率要更高一些。

          • 基本的光標控制(BASIC CURSOR CONTROL)

          整屏的移動很有用,但是如何在文字中精確定位呢?

          有幾種方式可以選擇。用方向鍵當然可以,不過更有效率的方法是保持雙手位于 主鍵盤區,然后使用 C-p 、 C-b 、 C-f 和 C-n 這四個命令。它們的功能和方 向鍵是一樣的,如下圖所示:

                                       上一行 C-p
          :
          :
          向左移 C-b .... 目前光標位置 .... 向右移 C-f
          :
          :
          下一行 C-n

          >> 用 C-n 或 C-p 將光標移到上圖的中央。

             按 C-l,整幅圖會被顯示在屏幕的中央。

          “P N B F”四個字母分別代表了四個詞,用這四個詞記憶這些組合鍵會更容易: P 代表 previous(上一行),N 代表 next(下一行),B 代表 backward(回 退),而 F 則代表 forward(前進)。這些組合鍵今后將與你形影不離。

          >> 按幾次 C-n 把光標往下挪到這里。

          >> 用 C-f 把光標移動到這一行,然后再用 C-p 往上挪。

             注意觀察當光標在一行的中央時 C-p 命令的行為。

          每行文字都以一個“換行符”結束,“換行符”把行與行區分開來。文件的最后 一行也應該也有一個換行符(不過 Emacs 并不強制要求這一點)。

          >> 在一行的行頭輸入 C-b。

             光標應該會移動到前一行的行尾,因為光標在回退過程中越過了換行符。

          同樣 C-f 也可以像 C-b 一樣越過換行符。

          >> 連按幾次 C-b,感受一下光標的移動。

             然后按幾次 C-f 回到本行的行尾。
          再按一次 C-f,光標會移動到下一行。

          當你移動光標穿越屏幕的上下邊界時,在邊界外的文字會移動到屏幕內,這稱為 “滾動”(scrolling)。滾動使得光標可以被移動到文字中的任何位置,并且還 不會讓光標跑到屏幕外邊去。

          >> 用 C-n 將光標下移,一直越過屏幕邊界,同時觀察發生了什么變化。

          如果你嫌一個字符一個字符地挪光標太慢,你還可以一個詞一個詞地跳。M-f (META-f) 可以將光標往前移動一個詞,而 M-b 則是往后移。【這里的“詞”指 英文單詞,對中文來說,則是指移動到下一個標點符號。】

          >> 試試 M-f 和 M-b。

          如果光標停在一個詞的中間,M-f 會移動到這個詞的末尾。如果光標處于詞與詞 之間的空白處,M-f 會移動到下一個詞的末尾。M-b 的功能類似,只是方向相反。

          >> 按幾次 M-f 和 M-b,中間夾雜一些 C-f 和 C-b。

             你可以觀察到 M-f 和 M-b 在不同位置上所表現出來的不同行為。

          請注意 C-f 、C-b 和 M-f 、M-b 兩對之間的類比關系。通常的慣例是:META 系 列組合鍵用來操作“由語言定義的單位(比如詞、句子、段落)”,而 CONTROL 系列組合鍵用來操作“與語言無關的基本單位(比如字符、行等等)”。

          類似的慣例在“行”與“句子”之間也同樣適用:C-a 和 C-e 可以將光標移動到 “一行”的頭部和尾部;而 M-a 和 M-e 則將光標移動到“一句”的頭部和尾部。

          >> 按兩次 C-a,再按兩次 C-e。

             按兩次 M-a,再按兩次 M-e。

          想一想為什么重復的 C-a 命令會沒有作用,而重復的 M-a 命令則會讓光標不斷 地回退到上一個句子。雖然這個類比規律并不嚴格,但是很自然。

          光標停留的位置也可以稱作“點位”(point)。或者干脆說,光標指示出了屏幕 上“點位”在文本中的位置。

          這里對簡單的光標移動命令做一個總結,其中也包括了整詞和整句的移動:

                  C-f     向右移動一個字符
          C-b 向左移動一個字符

          M-f 向右移動一個詞【中文是移動到下一個標點符號】
          M-b 向左移動一個詞【中文是移動到上一個標點符號】

          C-n 移動到下一行
          C-p 移動到上一行

          C-a 移動到行首
          C-e 移動到行尾

          M-a 移動到句首
          M-e 移動到句尾

          >> 把上面所有的命令都練習幾次,這些可都是最常用的命令。

          這里還要介紹兩個重要的光標移動命令:M-< (META 小于號)可以將光標移動到 所有文字的最開頭;M-> (META 大于號)可以將光標移動到所有文字的最末尾。

          注意,在大部分鍵盤上,小于號(<)需要用上檔鍵(Shift)來輸入,所以在這 些鍵盤上你應該用 Shift 鍵來輸入 M-<,如果不按 Shift 鍵,你輸入的會是 M-comma(META 逗號)。

          >> 試一試 M-< ,移到本快速指南的最開始。

             然后再按幾次 C-v 回到這里。

          >> 試一試 M-> ,移到本快速指南的最末尾。

             然后再按幾次 M-v 回到這里。

          如果你的鍵盤上有方向鍵的話,也可以用它們來移動光標。不過我們有三個理由 推薦你學習 C-b 、C-f 、C-n 、和 C-p:(1)它們在任何鍵盤上都能用。(2) 當你熟練使用 Emacs 之后,你會發現用這些組合鍵比用方向鍵要快得多,因為你 的手不需要離開打字區。(3)一旦你習慣了使用這些組合鍵,你也可以很容易地 適應其它更高級的光標移動命令。

          大部分的 Emacs 命令接受數字參數,并且對于多數命令而言,這些數字參數的作 用是指定命令的重復次數。為一個命令指定數字參數(也就是重復次數)的方法 是:先輸入 C-u,然后輸入數字作為參數,最后再輸入命令。如果你有META (或 EDIT 或 ALT)鍵,那么還有另一種辦法:按住 META 鍵不動,然后輸入數字。不 過我們還是建議你用 C-u,因為它在任何終端機上都能用。這種數字參數也稱為 “前綴參數”,意思是說這個參數是先于使用它的命令而輸入的。

          舉例來說, C-u 8 C-f 會向前移動 8 個字符。

          >> 為 C-n 或者 C-p 指定一個數字參數,這樣你可以只用一個命令就把光標移動

             到本行的附近。

          雖然大部分命令用數字參數來作為其重復次數,但是也有些命令例外,它們將數 字參數另做它用。比如有些命令(目前還沒學到)僅僅將前綴參數作為一個標 志——只要有一個前綴參數出現,不管其值為何,命令的功能都會改變。

          而 C-v 和 M-v 則屬于另一種類型的例外。當給定一個參數時,它們將滾動你指 定的“行數”,而不是“屏數”。舉例來說,C-u 8 C-v 將屏幕向下滾動 8 行, 而不是 8 屏。

          >> 現在試試看,輸入 C-u 8 C-v。

          這個命令應該已經將文字向上滾動了 8 行。如果你想將它再次地向下滾動,你可 以給定一個參數然后執行 M-v。

          如果你正在使用一個窗口系統,比如 X11 或者微軟的 Windows,那么在 Emacs 窗口的左邊或者右邊應該有一個長方形的區域叫“滾動條”,你可以用鼠標操縱 滾動條來滾動文字。

          >> 試著在“滾動條內的反白區域”上按一下鼠標中鍵。

             文字應該會滾動到鼠標所指示的位置。

          >> 當按住中鍵時,試著將鼠標上下移動。

             你會看到文字隨著鼠標的移動而上下滾動。
          【Windows 版本符合 Windows 程序的傳統操作習慣,上述操作不適用。】
          • 在 EMACS 失去響應的時候(WHEN EMACS IS HUNG)

          如果 Emacs 對你的命令失去響應,你可以很安全地用 C-g 來終止這個命令。 C-g 也可以被用來終止一個執行過久的命令。

          C-g 還可以被來取消數字參數和那些輸入到一半的命令。

          >> 輸入 C-u 100 設定一個值為 100 的數字參數,然后按 C-g。

             現在再按 C-f,光標應該只會移動一個字符,因為你已經用 C-g 取消了參數。

          如果你不小心按了一下 <ESC>,你也可以用 C-g 來取消它。 【這個說法似乎有問題,因為按照這個按鍵順序輸入的應該是 C-M-g。

            取消<ESC> 的正確做法是再連按兩次 <ESC>。】
          • 被禁用的命令(DISABLED COMMANDS)

          有一些 Emacs 命令被“禁用”了,以避免初學者在不了解其確切功能的情況下誤 用這些命令,造成麻煩。

          如果你用到了一個被禁用的命令,Emacs 會顯示一個提示消息,告訴你這個命令 到底是干什么的,詢問你是否要繼續,并在得到你的肯定之后再執行這命令。

          你要是真的想執行被禁用的命令,那么在 Emacs 詢問你的時候應該按空格。一般 來說,如果你不想執行,按“n”就行了。

          >> 試試 C-x C-l (這是一個被禁用的命令)

             然后用 n 來回答問題。
          • 窗格(WINDOWS)

          Emacs 可以有多個窗格,每個窗格都顯示不同的文字。我們后面再介紹怎么對付 多個窗格,現在先讓我們先搞明白如何關掉多余的窗格。其實也很簡單:

                  C-x 1   只保留一個窗格(也就是關掉其他所有的窗格)。

          也就是先按 CONTROL-x 然后再按 1。C-x 1 會保留光標所在的窗格,并將其擴大 到整個屏幕,同時關掉所有其它的窗格。

          >> 把光標移到本行然后輸入 C-u 0 C-l。

          >> 輸入 CONTROL-h k CONTROL-f。觀察當一個新窗格出現時當前窗格(用來顯示

             CONTROL-f 命令的文檔)是如何縮小的。

          >> 輸入 C-x 1 關掉文檔窗格。

          這個命令跟先前學到的命令不太一樣,因為它包含了兩個字符,以 CONTROL-x 開 始。有一系列命令都是以 CONTROL-x 開始的,這些命令許多都跟“窗格、文件、 緩沖區【緩沖區(buffer)會在后文詳細介紹】”等等諸如此類的東西有關,其 中有些命令可能有 2 個、3 個或者 4 個字符長。

          • 插入與刪除(INSERTING AND DELETING)

          插入文字很簡單,敲鍵盤就行了。你能看到的字符,比如 A、7、* 等等,都被 Emacs 視為文字并且可以直接插入。敲 <Return>(回車鍵)會插入一個換行符。

          你可以用 <Delback> 來刪除最后輸入的的一個字符,這個跟你在 Emacs 之外的 用法應該一樣。一般來說 <Delback> 就是位于 <Return> 鍵上方某處的一個大號 鍵,通常被標示為“Delete”、“Del”或者“Backspace”。

          如果你找到了標著“Backspace”的鍵,那么它應該就是 <Delback>;即便你又在 鍵盤其它地方找到了一個標示為“Del”的鍵,那么它也應該不是 <Delback>。

          一種更通用的說法是,<Delback> 將位于光標前的一個字符刪除。

          >> 現在就試試——敲點字,然后按幾下 <Delback> 刪除它們。

             不用擔心你會修改文件,你干什么都沒關系,這里就是專給你練習用的。

          如果一行文字很長、超出了窗格的寬度,顯示不下的部分會在緊鄰的下一行繼續 顯示。這時會有一個反斜線(控制臺下是反斜線,如果你用圖形窗口系統,則應 該是一個小小的轉彎箭頭)顯示在右邊沿,表明這是某一行的接續顯示。

          >> 輸入文字,一直到屏幕的右邊界,然后繼續,你會看到一個接續行出現。

          >> 用 <Delback> 刪掉一些文字,直到此行長度小于窗格寬度,接續行就消失了。

          你可以像刪除其他字符一樣刪除換行符。刪除兩行中間的換行符會將兩行合并成 一行。如果合并的結果使這一行太長,超出了窗格的寬度,它就會以一個接續行 來顯示。

          >> 移動光標到本行的開頭并輸入 <Delback>。

             這時本行與其前一行將被合并為一行。

          >> 輸入 <Return> 重新插入你剛才刪除的換行符。

          前面說過,大部分的 Emacs 命令都可以指定重復次數,這其中也包括輸入字符的 命令。重復執行輸入字符的命令實際上就是輸入多個一樣的字符。

          >> 試試 C-u 8 *,這將會插入 ********。

          好,現在你應該已經掌握了最基本的的文本插入和修改功能,其實刪除還可以 “以詞為單位”進行,下面是一個關于“刪除”操作的小結:

                  <Delback>    刪除光標前的一個字符
          C-d 刪除光標后的一個字符

          M-<Delback> 移除光標前的一個詞
          M-d 移除光標后的一個詞

          C-k 移除從光標到“行尾”間的字符
          M-k 移除從光標到“句尾”間的字符

          【可能你已經注意到了“刪除(delete)”和“移除(kill)”的用詞區別,后 文會有詳細說明。】

          注意“<Delback> 和 C-d”還有“M-<Delback> 和 M-d”是根據前述慣例從 C-f 和 M-f 衍生出來的(其實<Delback>不是控制字符,我們先忽略這一點)。C-k 和 M-k 的關系在某種程度上與 C-e 和 M-e 一樣——如果把“一行”和“一句” 作一個類比的話。

          你也可以用一種統一的辦法來移除緩沖區里的任何一部分:首先把光標移動到你 想要移除的區域的一端,然后按 C-@ 或 C-SPC(任一即可,SPC指空格)【注意, C-SPC 往往被中文用戶設定成輸入法熱鍵,如果這樣,C-SPC 就被系統攔截而無 法輸入給 Emacs 了,因此這里還是推薦使用C-@。】,然后再移動到另一端,再 按 C-w 就可以把位于這兩點之間的所有文字移除了。

          >> 移動光標到上一段開頭的“你”字。 >> 輸入 C-@ 。Emacs 應該會在屏幕的下方顯示一個“Mark set”的消息。 >> 移動光標到第二行中的“端”字。 >> 輸入 C-w,就會把從“你”開始到“端”之前的文字全部移除。

          注意,“移除(kill)”和“刪除(delete)”的不同在于被移除的東西可以找回 來,而被刪除的就不行了。【實際上,移除掉的東西雖然看起來“消失”了,但 實際上被 Emacs 記錄了下來,因此還可以找回來;而刪除掉的東西雖然也可能還 在內存里,但是已經被Emacs“拋棄”了,所以就找不回來了。】重新插入被移除 的文字稱為“召回(yank)”。一般而言,那些會去除很多文字的命令會把去除 掉的文字儲存起來(它們被設定成了“可召回”),而那些只是去除一個字符或 者只是去除空白的命令就不會儲存那些被去除掉的東西(因此你就無法召回)。

          >> 移動光標到一非空白行的行頭,然后輸入 C-k 移除那一行上的文字。

          >> 再次 C-k,你可以看到它移除了跟在那一行后面的換行符。

          注意,單獨的 C-k 會把一行的內容移除,而第二個 C-k 則會移除換行符,并使 其后所有的行都向上移動。C-k 處理數字參數的方式很特別,它會把參數指定的 那么多行連同其后的換行符一起移除,而不僅僅是重復 C-k 而已。比如 C-u 2 C-k 會把兩行以及它們的換行符移除;而如果只是輸入 C-k 兩次顯然不是這個結 果。

          將被移除的文字恢復的動作稱為“召回(yanking)”。(就好像你把別人從你身 邊移走的東西又猛力地拉回來。)你可以在你刪除文字的地方召回,也可以在別 的地方召回,還可以多次召回同樣的文字以得到它的多個拷貝。

          召回的命令是 C-y。它會在光標所在處插入你最后移除的文字。

          >> 試試看,輸入 C-y 將文字召回。

          如果你一次連按了好幾下 C-k,那么所有被移除的行會被存儲在一起,只要一個 C-y 就可以把它們都召回。

          >> 在這里試試,連續按幾次 C-k。

          現在再來恢復剛剛被我們移除的文字:

          >> 按 C-y。然后把光標往下移動幾行,再按一次 C-y。

             現在你應該知道怎么復制文字了。

          C-y 可以把最近移除的文字召回,但如果你想召回的東西不是最近移除的,該怎 么辦呢?它們當然沒有丟,你可以用 M-y 來召回它們。在用 C-y 召回最近移除 的文字之后,緊接著再用 M-y 就可以召回再前一次被移除的文字,再按一次 M-y 又可以召回再上一次的,因此只要多按幾次 M-y 就可以找到你想要召回的東 西了。找到了之后,你什么也不用做,把它們晾在那里,繼續你的編輯就行了。

          如果你一次按 M-y 按了很多下,你可能會回到起始點,也就是最近移除的文字。 【看得出這實際上是一個環。】

          >> 移除一行,移動一下光標,然后再移除另外一行。

             按 C-y 將第二次移除的那行召回來。
          緊接著再按 M-y,它將會被第一次移除的那行取代。
          試著再按幾下 M-y 看看會發生什么。
          再繼續,直到第二行被召回來,然后再做個幾次。
          如果你愿意,你可以試著給 M-y 指定一個正的或負的參數。
          • 撤銷(UNDO)

          如果你修改了一段文字,又覺得改得不好,可以用 undo 命令進行撤銷: C-x u。

          通常 C-x u 會消除一個命令所造成的所有改變;如果你在一行中連續多次地使用 C-x u,你會把以前的命令也依次撤銷。

          但是有兩個例外: 1) 沒有改變文字的命令不算(包括光標移動命令和滾動命令) 2) 從鍵盤輸入的字符以組為單位——每組 20 個字符——來進行處理。

              (這是為了減少你在撤銷“插入文字”動作時需要輸入 C-x u 的次數)

          >> 用 C-k 將這一行移除,然后輸入 C-x u ,它會再次出現。

          C-_ 也是撤銷命令;它的作用跟 C-x u 一樣,但是它比較容易多次輸入。C-_ 的 缺點是在某些鍵盤上可能不太容易按,這也正是我們同時提供 C-x u 的原因。在 某些終端上,你可以按住 CONTROL 再按“/”來輸入 C-_。

          數字參數對于 C-_ 和 C-x u 的意義是執行撤銷的重復次數。

          • 文件(FILE)

          想保存工作成果就要記得存盤,否則一旦退出 Emacs 你編輯的文字就都丟了。要 存盤,就要在編輯前“尋找”到一個存盤文件。(這個過程通常也被稱為“訪問” 文件。)

          尋找到一個文件意味著你可以在 Emacs 里查看這個文件的內容。從很多角度講, 這就等于你在直接編輯這個文件。但是你所做的修改只有在“存盤”的時候才會 被寫入文件。也正因為如此,你可以丟棄一個改到一半的文件而不必把這個殘廢 文件也保存到計算機上。最后就算你真正存了盤,Emacs 也會把存盤前的文件重 命名保存,以防你改完之后又想反悔。

          在屏幕的下方,你應該能夠看到頭尾都是短線“-”的一行,其開頭通常都是諸如 “--:-- TUTORIAL.cn”這樣的東西,這些文字就代表了你當前正在訪問的文件。 現在你訪問的文件叫“TUTORIAL.cn”,它只是給你個人臨時使用的一個拷貝。只 要你用 Emacs 尋找到一個文件,文件名就會出現在上述位置。

          尋找文件的命令有一個特別之處,那就是你必須給出文件名。我們稱這個命令 “從終端讀入了一個參數”(在這里,這個參數顯然就是文件名)。當你輸入了 這個命令之后:

                  C-x C-f   尋找一個文件

          Emacs 會提示你輸入文件名。你輸入的文件名會出現在屏幕最底端的一行,這一 行被稱為小緩沖(minibuffer),在小緩沖里你可以使用通常的 Emacs 編輯命令 來編輯文件名。

          在小緩沖里輸入文件名(其實輸入別的東西也一樣)時可以用 C-g 取消。

          >> 輸入 C-x C-f,然后輸入 C-g

             這會關掉小緩沖,同時也會取消使用小緩沖的 C-x C-f 命令。
          當然了,你也沒有找任何文件。

          輸入完文件名之后用 <Return> 結束,然后 C-x C-f 命令開始工作并找到你指定 的文件。小緩沖在 C-x C-f 命令結束之后也會消失。

          眨眼間文件就會顯示在屏幕上,你可以開始編輯了。存盤用這個命令:

                  C-x C-s   儲存這個文件

          這個命令把 Emacs 中的文字存儲到文件中。第一次存盤的時候 Emacs 會將原文 件重命名以保留原文。重命名的規則通常是在原文件名之后添加一個“~”字符。

          存盤結束后,Emacs 會顯示寫入文件的文件名。你最好養成經常存盤的習慣,這 樣在系統崩潰或者死機的時候你不會損失太多。

          >> 輸入 C-x C-s 把本快速指南存下來。

             你會看到“Wrote ...TUTORIAL.cn”這樣的消息顯示在屏幕的下方。

          注意:使用某些終端的時候,輸入 C-x C-s 會凍結屏幕【屏幕沒有任何輸出】, 這樣你就看不到 Emacs 的任何變化。其原因是操作系統的“流量控制”功能把 C-s 攔截了,并且凍結了屏幕,Emacs 自然也就看不到這個輸入了。用 C-q 可以 解除屏幕凍結。要解決這個問題,請參考 Emacs 手冊里的“Spontaneous Entry to Incremental Search”一節【Emacs 手冊可能還沒有中文翻譯】,那里可能有 一些有用的建議。

          你可以尋找一個已有的文件然后查看或者編輯,你還可以尋找一個不存在的文件。 實際上這正是用 Emacs 創建新文件的方法:找到不存在的新文件,然后從零開始。 在存盤的時候,Emacs 才真正創建這個文件然后再存盤。在這之后一切就跟你編 輯一個已有文件一樣了。

          • 緩沖區(BUFFER)

          如果你用 C-x C-f 找到第二個文件,第一個文件仍然會在 Emacs 里。要切回第 一個文件,你可以 C-x C-f 再次尋找它。這樣,你可以在 Emacs 里同時打開很 多文件。

          >> 用 C-x C-f foo <Return> 的方式建立一個名為“foo”的文件。

             然后敲入一些文字,再用 C-x C-s 保存文件“foo”。
          最后,輸入 C-x C-f TUTORIAL.cn <Return> 回到這里。

          Emacs 把每個編輯中的文件都放在一個稱為“緩沖區(buffer)”的地方。每尋 找到一個文件,Emacs 就在其內部開辟一個緩沖區。用下面的命令可以列出當前 所有的緩沖區:

                  C-x C-b   列出緩沖區

          >> 現在就試一下 C-x C-b

          觀察一下緩沖區是如何命名的,它很可能跟其對應的文件同名。事實上,你在一 個 Emacs 窗格里看到的任何文字都是某個緩沖區的一部分。

          >> 輸入 C-x 1 離開緩沖區列表

          不管存在多少緩沖區,任何時候都只能有一個是“當前”緩沖區,也就是你正在 編輯的這個。如果你想編輯另外一個緩沖區,那么你必須“切換”過去。上面講 過,用 C-x C-f 可以切換到某個文件對應的緩沖區。不過還有一個更簡單點的辦 法,那就是用 C-x b。用這個命令,你必須輸入緩沖區的名稱。

          >> 輸入 C-x b foo <Return> 以回到文件“foo”的緩沖區。

             然后輸入 C-x b TUTORIAL.cn <Return> 回到這里。

          大多數情況下,緩沖區和與其對應的文件是同名的(不包括目錄名),不過這也 不是絕對的。用 C-x C-b 得到的緩沖區列表中顯示的總是緩沖區的名稱。

          你在 Emacs 窗格里看到的“任何”文字都一定是屬于某個緩沖區的。也有些緩沖 區并沒有對應文件:比如顯示緩沖區列表的緩沖區就是這樣,再比如一個名叫 “*Messages*”的緩沖區也沒有對應的文件,這個緩沖區里存放的都是在 Emacs 底部出現的消息。

          >> 輸入 C-x b *Messages* <Return> 瞅瞅消息緩沖區里都有什么東西。

             然后再輸入 C-x b TUTORIAL.cn <Return> 回到這里。

          如果你對文件做了修改,然后切換到另一個文件,這個動作并不會幫你把第一個 文件存盤,對第一個文件的修改仍然僅限于 Emacs 中,也就是在它對應的緩沖區 里。同時對第二個文件的修改也不會影響到第一個文件。這很有用,但是也挺麻 煩,因為如果你又想要存儲第一個文件,你還需要先用 C-x C-f 切換回去,然后 再用 C-x C-s 存盤,這顯然太麻煩了。你需要一個更簡便的方法,而 Emacs 當 然已經替你想到了:

                  C-x s   保存多個緩沖區

          C-x s 會找到所有已被修改但尚未存盤的緩沖區,然后向你逐個詢問,是否需要 存盤?

          >> 插入一行文字,然后輸入 C-x s。

             它應該會問你,是否要儲存名為 TUTORIAL.cn 的緩沖區?
          按“y”告訴它你想存盤。
          • 命令集擴展(EXTENDING THE COMMAND SET)

          Emacs 的命令就像天上的星星,數也數不清。把它們都對應到 CONTROL 和 META 組合鍵上顯然是不可能的事情。Emacs 用擴展(eXtend)命令來解決這個問題, 擴展命令有兩種風格:

                  C-x     字符擴展。  C-x 之后輸入另一個字符或者組合鍵。
          M-x 命令名擴展。M-x 之后輸入一個命令名。

          很多擴展命令都很有用,雖然與你已經學過的命令比起來,他們可能不那么常用。 你應該已經見過一些擴展命令了,比如用 C-x C-f 尋找文件和用 C-x C-s 保存 文件。退出 Emacs 用的 C-x C-c 也是擴展命令。(不用擔心退出 Emacs 會給你 帶來什么損失,Emacs 會在退出之前提醒你保存文件的)

          在控制臺下,C-z 可以暫時離開 Emacs——當然,你還可以再回來。

          在允許 C-z 的系統中,C-z 會把 Emacs“掛起”,也就是說,它會回到 shell 但不退出 Emacs。在那些最常用的 shell 中,通常可以用“fg”或者“%emacs” 命令再次回到 Emacs 中。

          在沒有提供掛起功能的系統中,C-z 會在 Emacs 之下創建一個子 shell 來讓你 運行其它程序,并且再次“回到” Emacs 中——雖然我們并沒有真正離開過。這 種情況下,通常用shell 命令“exit”從子 shell 回到 Emacs。

          C-x C-c 最好在你打算退出登陸的時候再用。在 Emacs 被諸如郵件處理程序之類 的外部程序調用之后,也可以用 C-x C-c 退出。不過一般來講,如果你不想退出 登錄,最好還是把 Emacs 掛起而不是退出。

          C-x 的擴展命令有很多,下面列出的是你已經學過的:

                  C-x C-f         尋找文件。
          C-x C-s 保存文件。
          C-x C-b 列出緩沖區。
          C-x C-c 離開 Emacs。
          C-x 1 關掉其它所有窗格,只保留一個。
          C-x u 撤銷。

          用命令名擴展的命令一般都不太常用,或者只在部分模式下被用到。比如 replace-string(字符串替換)這個命令,它會在全文范圍內把一個字符串替換 成另一個。在你輸入 M-x 的時候,Emacs 會在屏幕底端向你詢問,然后你應該輸 入命令名。如果你想輸入“replace-string”,其實只需要敲“repl s<TAB>”就 行了,Emacs 會幫你自動補齊的。輸入完之后按 <Return> 。

          字符串替換命令需要兩個參數——被替換的字符串和用來替換它的字符串。每個 參數的輸入用換行符來結束。

          >> 將光標移到本行的下兩行空白,然后輸入

             M-x repl s<Return>changed<Return>altered<Return>。

          【為了繼續練習,保留一行原文如下:
          Notice how this line has changed: you've replaced... 】

          請注意這一行是怎么改變的:在光標之后的范圍內,你已經將“changed”這個 詞——不管它在哪里出現——全部用“altered”替換掉了。

          • 自動保存(AUTO SAVE)

          如果你修改了一個文件但是還沒來得及存盤,然后你的計算機罷工了,那么你編 輯的東西很可能就找不回來了。為了避免這樣的不幸一再發生,Emacs 會定期將 你正在編輯的文件存入一個“自動保存”文件中。自動保存的文件名的頭尾各有 一個“#”字符,比如你正在編輯“hello.c”,那么它的自動保存文件就叫 “#hello.c#”。在你正常存盤之后,Emacs 會刪除自動保存文件。

          假如不幸真的發生了,你大可以從容的打開原來的文件(注意不是自動保存文件) 然后輸入 M-x recover file<Return> 來恢復你的自動保存文件。在提示確認的 時候,輸入 yes<Return> 就行了。

          • 回顯區(ECHO AREA)

          如果 Emacs 發現你輸入多字符命令的節奏很慢,它會在窗格的下方稱為“回顯區” 的地方給你提示。回顯區位于屏幕的最后一行。

          • 狀態欄(MODE LINE)

          位于回顯區的正上方的一行被稱為“狀態欄”。狀態欄上會顯示一些信息,比如:

          --:** TUTORIAL.cn (Fundamental)--L670--54%----------------

          狀態欄顯示了 Emacs 的狀態和你正在編輯的文字的一些信息。

          你應該知道文件名的意思吧?就是你找到的那個文件嘛。-NN%-- 顯示的是光標在 全文中的位置。如果位于文件的開頭,那么就顯示 --Top-- 而不是 --00%--;如 果位于文件的末尾,就顯示 --Bot--。如果文件很小,一屏就足以顯示全部內容, 那么狀態欄會顯示 --All--。

          L 和其后的數字給出了光標所在行的行號。

          最開頭的星號(*)表示你已經對文字做過改動。剛剛打開的文件肯定沒有被改動 過,所以狀態欄上顯示的不是星號而是短線(-)。

          狀態欄上小括號里的內容告訴你當前正在使用的編輯模式。缺省的模式是 Fundamental,就是你現在正在使用的這個。它是一種“主模式”。

          Emacs 的主模式林林總總。有用來編輯程序代碼的——比如 Lisp 模式;也有用 來編輯各種自然語言文本的——比如 Text 模式。任何情況下只能應用一個主模 式,其名稱會顯示在狀態欄上,就在現在顯示“Fundamental”的地方。

          主模式有時會改變一些命令的行為。比如說,不管編輯什么樣的程序代碼,你都 可以用一個統一的命令來添加注釋,但是在不同的語言中注釋的語法往往是不同 的,這時相應的主模式就會分別用各自的語法規則來添加注釋。主模式都是可以 用 M-x 啟動的命令,所以 M-x fundamental-mode 就可以切換到 Fundamental 模式。

          如果你要編輯自然語言文本——比如現在——你應該用 Text 模式。

          >> 輸入 M-x text mode<Return>。

          別害怕,沒有什么命令會改變功能。不過你可以發現,M-f 和 M-b 現在把單引號 (')視為詞的一部分了。而在先前,在 Fundamental 模式中,M-f 和 M-b 都將 單引號視為分隔單詞的符號。

          主模式通常都會搞一些類似的小動作,因為很多命令其實完成的是“相同的工 作”,只是在不同情況下會有不同的工作方式而已。【所謂“求同存異”,在 Emacs 里得到了很好的體現】

          用 C-h m 可以查看當前主模式的文檔。

          >> 用 C-u C-v 將本行帶到靠近屏幕的上方。 >> 輸入 C-h m,看看 Text 模式與 Fundamental 模式有哪些不同。 >> 輸入 C-x 1 關掉文檔窗格。

          主模式之所以稱之為“主(major)”模式,是因為同時還有“輔模式”(minor mode)存在。輔模式并不能替代主模式,而是在主模式之外再做一些輔助的修改。 每個輔模式都可以獨立地開啟和關閉,跟其它輔模式無關,跟主模式也無關。所 以你可以不用輔模式,也可以用一個或者多個輔模式。

          有一個叫做自動折行(Auto Fill)的輔模式用處很大,特別是在編輯自然語言文 本的時候。這個輔模式啟動后,Emacs 會在你打字超出一行邊界時自動替你換行。

          用 M-x auto fill mode<Return> 啟動自動折行模式。啟動之后,如果我們再用 一次 M-x auto fill mode<Return>,自動折行模式就被關閉了。也就是說,如果 自動折行模式沒有開啟,這個命令會開啟它;而如果已經開啟了,這個命令會關 閉它。我們說這個命令用來“開關(toggle)”模式。

          >> 現在輸入 M-x auto fill mode<Return>。然后隨便敲點什么,直到你看到它

             分成兩行。必須敲一些空格,因為 Auto Fill 只在空白處進行斷行。【空格
          對英文來說是必須的,而對中文則不必。】

          行邊界通常被設定為 70 個字符【這里指英文字符】,你可以用 C-x f 命令來重 新設定之。指定新行邊界可以用數字參數來進行傳遞。

          >> 輸入 C-x f 并傳遞參數 20: C-u 2 0 C-x f。

             然后輸入一些文字,觀察 Emacs 的自動折行動作
          最后再用 C-x f 將邊界設回 70。

          如果你在段落的中間做了一些修改,那么自動折行模式不會替你把整個段落重新 折行。重新自動折行用 M-q,注意使用的時候光標必須位于你想折行的那一段里。

          >> 移動光標到前一段中,然后輸入 M-q。

          • 搜索(SEARCHING)

          Emacs 可以向前或者向后搜索字符串。搜索命令是一個移動光標的命令:搜索成 功后,光標會停留在搜索目標出現的地方。

          Emacs 的搜索命令的獨特之處在于,它是“漸進的(incremental)”,意思是搜 索與輸入同時進行:你在這邊一個字一個字地輸入你想搜索的東西,同時 Emacs 在那邊就替你搜索了。

          C-s 是向前搜索,C-r 是向后搜索。不過手別這么快!先等等別著急試。

          在你按下 C-s 之后,你會發現回顯區里有“I-search”字樣出現,這是在提示 你目前 Emacs 正處于“漸進搜索”狀態,正在等待你輸入搜索字串。<Return> 會結束搜索。

          >> 輸入 C-s 開始一個搜索。注意敲慢一點,一次輸入一個字符。

             慢慢輸入“cursor”整個詞,每敲一個字就暫停一下,注意觀察光標。
          現在你應該已曾經找到“cursor”這個詞了。

          >> 再按一次 C-s,搜索下一個“cursor”出現的位置。 >>

          主站蜘蛛池模板: 庆云县| 焦作市| 永丰县| 阜宁县| 得荣县| 台北县| 临西县| 视频| 永登县| 新津县| 汶川县| 茂名市| 于都县| 台安县| 黔西县| 喀喇沁旗| 宝兴县| 大同市| 临泉县| 江达县| 治多县| 庄河市| 郎溪县| 宁国市| 遂溪县| 始兴县| 唐海县| 漾濞| 天镇县| 祁门县| 盱眙县| 仁寿县| 周至县| 南投市| 麻江县| 桐柏县| 宝山区| 侯马市| 皮山县| 梅州市| 昌平区|