目錄
-
導言前端
-
GNU是什麼node
-
GNUEmacs是什麼git
-
GNUEMACS的特質redis
-
Emacs的線上輔助說明shell
-
Emacs的基本知識express
-
Emacs的自學我教材c#
-
Ctrl-h的用法windows
-
Eamcs的info使用說明後端
-
Emacs的整合環境api
-
如何在Emacs中執行Shell的指令
-
有關目錄的編輯方法
-
如何編輯遠方機器上的檔案
-
程式的編輯,編譯與測試
-
如何在Emacs中列印文件
-
在Emacs中如何收發信件
-
其它與Emacs相關的工做環境
-
與Emacs有關的議題
-
如何起動Emacs
-
如何離開Emacs
-
EMACS的螢幕安排
-
Emacs的緩衝區與視窗
-
Emacs的基本編輯指令
-
如何載入檔案與儲存檔案
-
Emacs的基礎編輯指令
-
何謂Yanking
-
如何在文件中作上標記
-
文件的移動與拷貝
-
何謂Undo
-
Emacs進階編輯指令
-
文件的搜尋
-
文件的取代
-
RegularExpression
-
Emacs的其它相關事項
-
Registersand Bookmarks
-
文字的勘誤
-
圖形的編輯
-
中文編輯環境
-
Emacs下的中文編輯
-
中文化的EMACS-Mule
-
結論
1.目錄
Introduction
本文的主旨以討論 EMACS 的入門爲主,其內容包括 EMACS 發展的概述, EMACS 整合環境的簡介以及 EMACS 的基石- editor 的詳談。本文在結構上分紅八章,第一章討論有關 EMACS 的源起、發展歷史以及 EMACS 的特性簡介。第二章討論 EMACS 的 on-linehelp。第三章則簡單介紹 EMACS 的整合環境。接下來就是本文的重點,探討 EMACS 的本質。因此,第三章之後的各章節則詳細探討 EMACS 爲editor 的這一個主題。
如今就來討論與 EMACS 發展有關的機構組織以及 EMACS 所扮演的角色特質。
GNU 是什麼
GNU 是 RichardStallman 於 1975 年,在 MIT 所成立的 FreeSoftware Foundation (FSF)中所執行的一項計劃。GNU 的本意表明 ``Gnu'sNot Unix'';雖然如此,它倒是一個與 UNIX 徹底相容的軟體系統。兩者最大不一樣在於,GNU 是一個 free 的軟體, UNIX 倒是一個要付費的軟體系統。 GNU 之因此與 UNIX 徹底相容,是由於 UNIX 的使用者不少,爲了讓 UNIX 的使用者在使用 GNU 的時候不會有疏離的感受,因此 GNU 儘可能與UNIX 相容,它的相容只是看起來與用起來像 UNIX 而已, GNU 其實改進了所多 UNIX 的缺點,使它能盡善盡美。
Stallman 倡導 FSF 的宗旨,是要創建一個軟體 free 的王國。他所謂的 free 並非意謂著便宜或免費,由於在 FSF 下的有些軟體仍是必需付些工本費。他所謂的 free 是指使用上的自由。
要了解 Stallman 所言 free 的真意,就必須知道通常軟體的使用情形。大部份的商業軟體在使用上都或多或少有些限制。例如,必須付費纔可以使用軟體程式,若運氣很差,同一程式在不一樣的電腦上使用,可能還要另行付費。有些軟體程式的使用也有必定的期限,期限一到就需另繳費用,不然使用權就會被撤銷;甚至有些軟體是以使用時間來計算費用的。固然,這些商業軟體是絕對不予許使用者將這些軟體任意給他人使用。除非給予軟體公司至關的代價,使用者是絕對不可能拿到軟體的原始程式的。
上述的種種都仍是付錢就能夠解決的,有些問題是錢也乏術的。由於,當商業程式銷售失敗或遠景不被看好時,使用者所購置的軟體就可能被開發者遺棄。此時,若想維持此軟體的正常運做,就必須自求多福了。 Stallman 所領導的 GNU 計劃就是要脫離商業軟體的種種枷鎖,這也是 GNU 計劃所謂 ``free'' 的真諦。GNU 計劃下的任何軟體,只要使用者能找到軟體的來源,任何人均可以自由的使用它。得到 GNU 軟體的來源不少,如 publicarchives、anonymousFTP、UUNET 等,甚至任何一個裝有 GNU 軟體的地方均可以取得。GNU 計劃下的軟體,不僅提供軟體的使用權,也提供軟體的原始程式,任何人均可以根據須要來修改程式,也能夠盡己之力來找出程式的錯誤,使隸屬於 GNU 的軟體在你們的努力下能盡善盡美。 GNU計劃下的軟體,是可不需付費而享有使用權。GNU對使用者惟一的要求就是,當使用者對於 GNU計劃下的軟體作了進一步的修改時,仍必須維持GNU的精神,就是對於修改過的軟體仍然必須將其無條件的奉獻出來,任何人都不可將修改過的 GNU 軟體當成商品來買賣。因此 Stallman一直強調 GNU 計劃下的軟體是free的,並且永遠會是 free 的。GNU 計劃的最終目標是要完成一個全新的做業系統。目前完成的有 EMACStext editor、debugger、yacc-compatibleparser generator以及 linker等等;也完成了將盡3、四十個公用程式(utilities);而 shell 也已經接近完成的階段。目前只要等 kernel 和 compiler 完成,就能夠在 GNU 的系統上發展程式。
將來完成的 GNU 系統將能夠執行 UNIX 上的全部程式,但它卻與 UNIX 系統不徹底一致。 GNU 系統將改進 UNIX 系統的缺失,使它使用起來更方便。例如,將來的系統將會有較長的檔名,檔名會有版次等等;新的系統會使用 C與 LISP 作爲系統程式語言。
GNUEmacs 是什麼
GNUEMACS 是 GNU 計劃下的第一個產品, EMACS 爲 EditorMACros 的縮寫。 RichardStallman 於 1975 年在 MIT 首次撰寫 EMACSeditor。目前 GNUEMACS 已發展到 19.28 版,本文所討論的 GNUEMACS 也以 19.28 版爲主。 GNUEMACS 秉持著 GNU 的精神,它依然是 free 的。任何人均可以 ``anonymousftp'' 的方式至 prep.ai.mit.edu 這個 site ,取得 GNUEMACS 的原始碼。 GNUEMACS 不是 publicdomain 的產物,它有版權也有使用上的限制,那就是任何獲得它的人都不能夠將其視爲私有的財產。修改過的 GNUEMACS 也不能夠做爲商品來牟利,金錢交易的行爲是絕對被禁止。
EMACS 有多種版本可適合不一樣的工做平臺(platfrom)。適合 UNIX 環境的有 GNUEMACS、UnipressEMACS 以及 CCAEMACS ,其中以GNUEMACS 最常被使用,本文也只介紹 GNUEMACS。適合我的電腦的 EMACS 有 FreEMACS、MicroEMACS 以及 Epsilon。固然,也有使用在 VMS 環境的版本。
GNUEMACS 是由 C 與 LISP 語言寫成,任何人均可依據須要將我的所發展的函式(function)加入 GNUEMACS 上。固然,新發展的軟體是不能夠從事商業買賣,只能將它無條件的奉獻出來。新發展的函式能夠直接在 EMACS 中使用,不需從新編譯(complie)整個EMACS ,並且新增的函式也不會破壞 EMACS 原有的結構。就由於有此特性,EMACS 的函式能夠與日俱增。願與他人共享成果的使用者,能夠透過電子郵件或電子公佈欄,將函式的原始碼公諸於世。公佈的函式,最後會經由 FSF 的審查,以決定是否要加入新版的 EMACS 中。FSF 也鼓勵使用者將所發現的錯誤,透過相同的管道,提供給 FSF做爲改進之用。GNUEMACS就是在如此的運做下,靠你們共同的努力來提高品質,以達產品的穩定性。
GNUEMACS 的特質
GNUEMACS 與其說它是一個編輯器(editor),倒不如說它是一個以編輯器爲主幹的環境軟體。通常的軟體都是將編輯器視爲一個附屬功能,只有 EMACS 以編輯器爲基石,在其上發展其它的功能。以收發電子信件的軟體爲例,電子信件軟體是以收發信件爲環境的基石。任何電子信件的軟體都只有在使用編輯器時,才呼叫相關的編輯器。 EMACS的出發點就不同凡響,EMACS 一切以編輯器爲主,任何的功能都是建基在編輯器之上。
因此,進入 EMACS ,就等於是進入了一個編輯環境,這個編輯環境提使用者許多功能,讓使用者如置身在一個全功能的做業系統中。EMACS 自行發展了一個 ``bourne-shell-like'' 的 shell,除了 EMACS 本身的 shell 外, EMACS 還可讓使用者自行選擇所使用的shell;EMACS能夠讀送 e-mail。 EMACS 能夠透過 ftp 來編輯遠方 host上的檔案,而不須要簽入(login)檔案所在的host;EMACS也可作telnet與relogin的動做。EMACS也能夠讀 news;EMACS也提供了年曆(calendar),可讓使用者查閱日期,也能夠將重要的事情在年曆上標示出來;EMACS又提供了``Diary''的功能,當特定的日期與時間到來時,會在螢幕上將 ``Diary'' 上的事情顯示;EMACS 也有撰寫文章大綱的功能。 EMACS 更提供多種程式的編譯功能,讓使用者能夠在 EMACS 中一邊編輯程式一邊編譯程式; EMACS 更有本身的 debugger,使程式的除錯、編輯與編譯在 EMACS 中同時完成。
因此 EMACS 所提供的不僅是一個編輯器而己,它所提供的是一個整合的工做環境,而這個環境是創建在編輯的基石上。它但願使用者進入了 EMACS 之後,能夠在 EMACS 的環境中完成全部的工做,不須要離開 EMACS,要離開 EMACS 就是要離開電腦的時候(logout)。EMACS 除了是一個整合的工做環境外,它還具備如下的特性:
EMACS 是一個 display 編輯器,由於每個被編輯的文字都會被顯示在螢幕上。
EMACS 是一個 real-time 的編輯器,由於當新的文字被鍵入時,螢幕會在很是短的時間內被更新。
EMACS 的編輯功能不僅具有通常編輯器全部的功能,它還提供以下的功能:
EMACS 是一個 Self-documenting的軟體,由於在任什麼時候候均可以 ``Ctrl-h'' 指令來得當即的幫助。由於,透過 ``Ctrl-h'' 能夠得知每個EMACS 的指令。
EMACS 是能夠 Customizable 的。使用者可視我的的需求,來改變 EMACS 指令的定義。GNUEMACS的Customization 的設定很是簡單,使用者能夠很方便的使用它。EMACS 是Extensible 的。GNUEMACS是由 LISP 語言所寫成的函式共同組成的,函式與函式間的互動關係(dependency)不強。就由於EMACS是由函式所組合而成的,因此能夠隨時將函式做增減而不會破壞EMACS既有的結構。 EMACS 也針對 X 的視窗環境,提供本身的選單(menus)和滑鼠按紐(mousebottons)功能。 EMACS 對於 text-only 的終端機也提供許多與 X 環境至關的服務品質,例如在文字模式的終端機,能夠同時開啓數個的檔案,檔案能夠互相切換,當使用 shell 模式來執行 shell 指令的同時也能夠編輯檔案。但本文的只討論 text-only的EMACS使用法。以上的種種就是有關EMACS的特點。至於如何使用這些功能就是下列章節所要討論的重點。
2.Emacs 的線上輔助說明
EMACS 是一個整合的工做環境,初次使用EMACS或不熟悉EMACS的人,常會不知所措。因此,EMACS 提供了很是便捷且功能強大的線上輔助說明(on-linehelp),來幫助使用 EMACS 。
Emacs 的基本知識
在未討論 EMACS 的線上輔助說明時,先談談如何啓動 EMACS。啓動EMACS 的方法很簡單,只要在螢幕的提示下鍵入 ``emacs'' 便可;離開 EMACS,只要鍵入``Ctrl-xCtrl-c''便可離開 EMACS 。鍵入 ``Ctrl-xCtrl-c'' 的方法是,先按住鍵盤上的 Ctrl 鍵不放再按下英文字的 ``x''便可。鍵入 ``Ctrl-c'' 的方法同樣,先按住鍵盤上的 Ctrl 鍵不放再按下英文字的 ``c'' 便可。固然進入與離開 EMACS 的方法還有多種,這裏只是介紹一種方法,讓使用者能夠很快的使用 EMACS 的線上輔助說明,至於其它的方法會在如下各章節中陸續說起。
除了進入與離開 EMACS 的方法必須知道外,還有一個指令很是用那就是 ``Ctrl-g''。 ``Ctrl-g'' 可用來取消鍵入的指令,若是不想執行所鍵入的指令,能夠隨時將其取消。
EMACS 鍵入指令的方法有二種:
全部 EMACS 的指令均可以 Meta 鍵表示出來,鍵盤上若無 Meta鍵,則能夠 ESC鍵來取而代之。經常使用的 EMACS 指令一般會有一個 Hotkey與之連結。Hotkey 的構成,一般是以Ctrl爲開頭的型態出現。例如 ``Ctrl-x Ctrl-c'' 這一個 Hotkey,則表明了 EMACS 指令的 ``save-buffers-kill-emacs'' 。若要使用 Meta 鍵來表達與 Ctrl-x Ctrl-c 相同的效果 ,則必須鍵入
``ESC-xsave-buffers-kill-emacs''。
使用 Meta 鍵,能夠利用 EMACS completion 的功能。由於 completion 可讓使用者鍵入最少的字,就可以使系統喚起所欲執行的命令。如下就介紹 EMACS的 completion。
EMACS completion的意思是,只要鍵入字串的部份, EMACS 會將其他的部份自動填入其應在的位置。若是所給予的字串不足以決定其他的部份,EMACS 會將全部可能的結果都列出來,以供使用者來決定所須要的字串名稱。 completion 所適用的範圍以下:
-
指令
-
特定目錄下的檔案
-
緩衝區
-
EMACS 的變數
至於何謂特定目錄下的檔案、緩衝區以及 EMACS 的變數,會在以後的章節中陸續談及。此處討論completion ,只是爲了使用 completion 在 EMACS 的線上輔助說明。
使用EMACS的completion有三種方法:
使用completion 的作法是將部份字串鍵入後,再按下 TAB、SPACE 或 ? 便可。例如,鍵入 ``M-x au TAB'' ,則螢幕的最下方會出現 ``鍵入 TAB 則螢幕會在另外一個視窗出現:
Possible completions are:
auto-fill-mode auto-lower-mode
auto-raise-mode auto-save-mode
若鍵入 ``M-x au SPACE'',則螢幕的最下方也會出現 ``M-x auto-''。若鍵入 SPACE ,則螢幕的另外一個視窗也會出現以下的命令:
Possible completions are:
auto-fill-mode auto-lower-mode
auto-raise-mode auto-save-mode
這彷佛意味著 TAB 與 SPACE 的功能同樣,其實否則,兩者的差別可從下一個例子看出。鍵入 ``M-x auto-f TAB'',可得 ``M-x auto-fill-mode'';但鍵入 ``M-x auto-f SPACE'',只能獲得``M-x auto-fill-'' ,欲獲得 ``M-x auto-fill-mode'',則必須再鍵入一次 SPACE。這就是前面所說的 ``SPACE'' 一次只填一個 ``puncutation''以前的一個字的意思;而 TAB 則是儘量的將全部能夠判斷出來的字串呈現出來,其顯示字串的長度並不以一個 ``puncutation'' 爲限。
鍵入 ? 的做用,是在 EMACS 的另外一個視窗上顯示全部可能的字串,此時使用者可根據視窗上的訊息鍵入適當的命令。例如鍵入 ``M-x au ?'' ,螢幕上出現另外一個視窗顯示以下的資訊:
Possible completions are:
auto-fill-mode auto-lower-mode
auto-raise-mode auto-save-mode
鍵入 ``M-x au ?'' 的地方,則不會執行 completion 的動做,這是 ? 與 TAB 、SPACE 最大不一樣的地方。
若視窗的內容太多沒法一次窮盡,此時就必需捲動視窗。捲動視窗能夠用 ``Ctrl-v'' 與 ``Meta-v'' 二個指令來使視窗作上下的移動。
Emacs 的自學教材
想快速瞭解 EMACS 的人,能夠參考 EMACS 的自學教材(tutorial)。使用 EMACS 自學教材的方法很簡單,只要鍵入 ``Ctrl-ht'' (help-with-tutorial) 便可進入 EMACS 的自學的狀態了。
EMACS 的自學教材可分紅如下幾部份:
-
介紹 EMACS 指令的鍵入方法,即介紹 Ctrl 與 Meta 鍵。
-
viewingscreenfuls
-
basiccursor control
-
Ctrl-g 的用法
-
EMACS 的 window 與 multiplewindows
-
insertingand deleting
-
undo
-
EMACS 檔案的處理
-
EMACS 的 buffers
-
extendingthe command set
-
簡介 EMACS 的 modeline 與 echoarea
-
searching
-
recursiveediting levels
-
gettingmore help
-
leavingEMACS
-
有關 EMACS 的版權問題
EMACS 的自學教材是以編輯功能的介紹爲主。雖然 EMACS 的功能不僅如此, 但編輯是 EMACS 的最基礎的功能,要了解 EMACS固然要從它的基本著手。因此 EMACS的自學教材也以編輯的介紹爲主,至於 EMACS 其它的工件環境,是沒法從 此自學教材中得知。因此,本文會在第三章簡介 EMACS 的工做環境。
Ctrl-h 的用法
EMACS 除了自學教材可供參考外,它還提供了其它的線上輔助說明功能,讓使用者能夠隨時查閱須要的相關訊息。EMACS的線上輔助說明都是以``Ctrl-h''爲開端,其種類有如下二種:
鍵入 Ctrl-h(help-command),螢幕的最下端會出現以下的訊息:C-h(Type? for further options)- 此時的 ``Ctrl-h'' 只是用作前置字(prefixkey),它是用來等候使用者輸入其它的指令。若輸入 ``?'',則螢幕的下方會出現全部可以使用的選擇,使用者可根據須要來選擇合適的選項。若鍵入兩次的 ``Ctrl-h''Ctrl-h(felp-for-help),螢幕下方會出現: typeone of the options listed or Space toscroll 此時 EMACS 會另外開啓一個視窗,將全部與求助的選項都列出來,且會作一簡要的說明,要捲動此視窗則鍵入 Space。此新開啓的視窗共有二十一個選項,包括: ab c f C-f i k C-k l m n p s t v w C-c C-d C-n C-pC-w. 使用這二十一個選擇項的方法很是簡單,只要在 ``Ctrl-h'' 以後輸入任一個選擇就能夠了。例如,要選擇``a'' ,則執行 ``Ctrl-ha'' 便可。
如今將 EMACS 經常使用的線上輔助說明一一做解釋。EMACS 經常使用的線上輔助說明有:
-
Ctrl-hc
-
Ctrl-hk
-
Ctrl-hw
-
Ctrl-ha
-
Ctrl-hv
-
Ctrl-hi
``Ctrl-h c'' 與 ``Ctrl-h k'' 的功能類似, 兩者都是在尋求與 Hotkey有關的訊息。兩者惟一的差異,就在於對指令的解釋詳細與否而已。
`` Ctrl-h c'' 是簡述與 Hotkey 連結的命令,而 ``Ctrl-h k''則詳述連結Hotkey 的命令。兩者都有一個前題的預設,那就是都是先知道 Hotkey 爲什麼,而想進一步知道此 Hotkey 所使用命令的名稱。今舉 ``Ctrl-x Ctrl-c'' 的例子來講明兩者的差異。
鍵入 ``Ctrl-hc RET'' (RET,亦即鍵盤上的 Enter 鍵。任何一個指令輸入完畢時,必需緊跟著一個 Enter。此做用是用以告知系統,指令輸入已經結束,能夠開始執行相關的動做了。) 則螢幕下方會出現 Describekey briefly: - 在 ``:'' 的後面鍵入 ``Ctrl-xCtrl-c'',則在原先出現 Describekey briefly: - 的地方則出現 C-xC-c runs the command save-buffers-kill-emacs'' 鍵入 ``Ctrl-hk RET'',則螢幕下方出現 Describekey: - 在 ``:'' 的後面鍵入``Ctrl-xCtrl-c'',則 EMACS 會另以一個視窗顯示以下的訊息: save-buffers-kill-emacs:Offer to save each buffer, then kill this emacs process. With prefixarg, silently save all file-visiting buffers, thenkill. 此訊息的第一行是 Hotkey 所連結命令的全名,之後的行數則是對此命令的詳細說明。 ``Ctrl-h w''w (where-is) 的用法與 ``Ctrl-h c'' 和 ``Ctrl-h k'' 正好相反。 ``Ctrl-h w'' 是在知道EMACS 的命令而欲知是否有相對應的 Hotkey 時所使用的。例如鍵入 ``Ctrl-hw'',螢幕的下方會出現
whereis command:
在 ``:'' 以後鍵入 ``save-buffers-kill-emacs'',則在原處會出現
save-buffers-kill-emacsis on C-x C-c 因此想知道命令是否有相對應的 Hotkey,能夠此方法查知。 ``Ctrl-hw'' 能夠使用 EMACS 的 completion ,但其最大的不便處,就是必需給予指令的第一個字元。如 ``save-buffers-kill-emacs'',必需先給予以 s 開頭的子字串,才能逐步使用 EMACS 的completion 。若不鍵入 s 開頭的子串,而鍵入s以後的任何字串,則沒法找到相對應的指令,因此使用 ``Ctrl-hw'' 必須要記著指令的第一個字。除此以外, EMACS 的線上輔助說明還提供了另外一種幫助,可以讓使用者鍵入任意的子字串,均可以找到相對應的指令,那就是 ``Ctrl-h a''。鍵入 ``Ctrl-ha'' 則螢幕的下方會出現 command-apropos(regexp): 此時只要給予與命令相關的任一子字串或 ``regular expression'' 6.3 節會討論何謂 regularexpression)再按下 RET, EMACS 會另開一個視窗,將全部涵蓋此子字串或 regularexpression 的指令全列出來。此指令與 ``Ctrl-h w'' 最大不一樣處以下:
-
使用 ``Ctrl-h a'' 所鍵入的子字串,並不限於指令的第一個字元, 而 ``Ctrl-h w'' 則必需以指令的第一個字爲起始字。
-
使用 ``Ctrl-h a'',可給予指令中任何位置的子字串。
-
``Ctrl-h a'' 沒法使用 completion,而 ``Ctrl-h w'' 可以使用 completion。
-
``Ctrl-h a'' 主要的目的是當使用者沒法正確的鍵入指令的第一個字元時,能夠藉此將全部包含使用者記得的部份子字串的指令都列舉出來。
-
EMACS 除了以上幾個經常使用的線上輔助說明以外,還有一個很是實用的資料查閱中心,那就是 ``Ctrl-h i''。 ``Ctrl-h i'' 執行 ``Infoprogram'',它主要是用來瀏 已建構成樹狀結構的文件檔案。目前全部與 EMACS 有關的文件檔案均可透過 Info 來閱覽,最終全部與 GNU 有關的文件資料,將能夠由此而窺得其文件檔案全貌。
-
使用
info
模式(
infomode
)的方法很簡單,只要鍵入
``Ctrl-hi''
就可查閱全部與
EMACS
相關的文件資料。進入了
info
以後要如何有效的使用它呢?會在下一節詳細討論。
-
以上所談的,就是較常使用的線上輔助說明種類。若線上輔助說明的訊息,是以另外一個視窗顯示出來,此時的訊息又沒法一「幕」瞭然。想參考其它部份的資料,就必需捲動視窗。視窗捲動的指令,可參考以下的方法:
-
-
Ctrl-x1 (delete-other-windows)
-
-
(本文全部與 Hotkey 相對應的指令都放於括號中。保留遊標所在的視窗,而將其它的視窗關閉。
-
-
Ctrl-xo (other-window)
-
-
可以使遊標在不一樣的視窗間切換。換言之,若是遊標在工做的視窗,能夠此指令將遊標移出顯示線上輔助說明訊息的視窗,反之亦然。
-
-
Ctrl-v (scroll-up)
-
-
將螢幕向上卷,如此則可看清螢幕下方的訊息。
-
-
Meta-v (scroll-down)
-
-
螢幕向下卷,如此能夠重複參考已經看過的資料。
Emacs 的 info 使用說明
前已簡略敘述 info 的使用法,如今就更進一步詳述之。在 EMACS 的線上輔助說明功能中,info 的內容可說是最爲豐富的。由於,任何線上輔助說明的文件均可在 info 模式中找到。由於,info 就是用來放置整個 EMACS 手冊。
-
info 對於 EMACS 文件的安排是採起樹狀的結構,因此是以根部(root)爲出發點。info 執行 infoprogram,使用 infoprogram 的方法有二:
-
info
對於檔案的編排,是以
Hypertext
的方法來處理全部的相關文件。當鍵入
``Ctrl-hi''
或
``ESC-xinfo''
後,會先進入
info
樹狀(
tree
)結構的最頂端。以下就是進入
info
時的第一個畫面:
-*-Text -*- This is the file .../info/dir, which contains the topmostnode of the Info hierarchy. The first time you invoke Info you startoff looking at that node, which is (dir)Top. ? File: dir Node: TopThis is the top of the INFO tree This (the Directory node) gives amenu of major topics. Typing "d" returns here, "q"exits, "?" lists all INFO commands, "h" gives aprimer for first-timers, "mTexinfo" visits Texinfo topic,etc. --- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topicfirst.) --- * Menu: The list of major topics begins on the nextline. * Info: (info). Documentation browsing system. * Emacs:(emacs). The extensible self-documenting text editor. * VIP: (vip).A VI-emulation for Emacs. * Texinfo: (texi.info). With one sourcefile, make either a printed manual (through TeX) or an Info file(through texinfo). Full documentation in this menu item. * Termcap:(termcap). The termcap library, which enables application programsto handle all types of character-display terminals. * Regex:(regex). The GNU regular expression library. * Cpp: (cpp.info). Cpre-processor. * Gcc: (gcc.info). GNU C Compiler --- an ANSI CCompiler developed by FSF. * Gzip: (gzip.info). GNU zip program ---an compress package developed by FSF. * Ispell: (ispell.info). Aspelling checker. * Libg++: (libg++.info). G++ libraries. * Gmake:(make.info). A make utility developed by FSF. * Bison: (bison.info).GNU Yacc. * Gawk: (gawk.info). GNU awk --- pattern scanning andprocessing language. * Gdb: (gdb.info). GNU debugger. * Info-stnd:(info-stnd.info). Stand along GNU info. * Makeinfo: (makeinfo.info).Program for producing *.info file from *.texi file. * Graphics:(graphics.info). A set programs for producing plot files and displaythem on Tektronix 4010, PostScript, and X window system compatibleoutput devices. * m4: (m4.info). m4 is macro processor, in the sensethat it copies its input to the output, expending macros as it goes.GNU m4 is mostly compatible with system V, Release 3 version. *Hyperbole: (hypb.info). GNU Emacs-based everyday informationmanagement system. Use {C-h h d d} for a demo. Include Smart Keycontext-sensitive mouse or keyboard key support, a powerful rolodex,and extensible hypertext facilities including hyper-links in mailand news messages. * Standards Coding Style:(standards.info). GNUCoding Style.
此時,出如今螢幕的第一列是標頭(
header
),它包含此結點(
node
)的基本訊息。表頭所提供的訊息,最多可有五件事情:
-
-
結點所在的檔案(File)
-
-
結點的名稱(node)
-
-
此結點的下一個結點(Next)
-
-
此結點的上一個結點(Prev)
-
-
此結點的上一層結點(up)
-
此時的畫面,只顯示了二件事情,是由於此畫面爲 info 樹狀結構的最上層。
-
在表頭之下的資訊,是用來告知如何用 info 。它提供了五件事情,現一一說明。
-
-
h
-
-
不知如何使用
info
模式者,可在進入
info
模式後,使用
info
的線上輔助說明。欲使用
info
的線上輔助說明,只要在進入
info
模式後,鍵入
``h''
便可。此不僅是一個線上輔助說明,仍是一個教學指引。跟隨著它的說明,便可明瞭如何使用
info
模式
.
-
-
d
-
-
``Ctrl-hi'' 指令,會先進入 info 樹狀結構的根部。任何狀況下,可鍵入 ``d'' 回到此根部。
-
-
?
-
-
想知全部與 info 有關的指令,只要鍵入 ``?'',就能夠得知全部指令的全貌。
-
-
q
-
-
欲離開 info,只要鍵入 ``q'' ,就能夠離開 info 而回到先前的緩衝區。
-
-
mTexinfo< Return >
-
-
這一個指令是用來使用 info 的 MenuItem。使用的方法以下:
-
-
鍵入 ``m'' 。
-
-
鍵入所欲參考的文件名稱,也可以使用 completion 的功能來簡化輸入的工做。
-
-
鍵入 RET。
-
何爲 MenuItem 會再解釋。
-
在這五個指令之下的是,此結點能夠使用的 MenuItem。使用者能夠直接至所要參考的 Menu 之下,鍵入 ``RET''。此時, info 會將此Menu 的相關文件顯示在螢幕上。使用 info 除了以上的指令以外,還有幾個必需知道的指令。現介紹以下:
-
-
n
-
-
將結點移至下一個與此結點相連的結點。
-
-
p
-
-
將結點移至上一個與此結點相連的結點。
-
-
u
-
-
將結點移至上一層的結點。
-
-
m
-
-
以上結點間移動的指令,必需結點間有相鏈接的關係。若想作跨越的移動,這幾個指令是沒法作到的。此時,必需透過 Menu 來作誇越結點的文件閱讀。使用 Menu 的方式有二:
-
-
``mTexinfo''
-
-
這種使用 menu 的方法,在進入 info 的第一個畫面就能夠看到了。此方法由三件事共同組成:
-
-
m 鍵入 m 是使用 menu 的指令。
-
-
Texinfo 鍵入 m 時,minibuffer 會出現
-
-
menuitem:
此時,可在其後輸入所欲閱 的文件名稱。因此,
Texinfo
意指文件的名稱。此時,就能夠鍵入畫面上以
``*''
爲開頭的名稱。若是是剛進入
info
,可以使用的
Texinfo
名稱有:
Info
、
Emacs
、
VIP
、
Forms
、
GNUS
、
CL
、
Gcc
、
Cpp
、
Makeinfo
、
Info-stnd
、
Texi
、
Hyperbole
、
Octave
-
-
RET
-
-
待文件名稱輸入完畢後,要按下
RET
,以告知系統文件名稱已經輸入完成了,能夠開始執行的動做了。
-
-
直接鍵入 ``RET''
-
-
若是在閱 某一個結點時,文件中出現以 ``*Menu:'' 爲首的文字,就表示此列如下如有以 ``*'' 爲開頭的列,均爲一個能夠使用的 MenuItem 。此時,能夠直接鍵入 ``RET'' 參考另外一個結點的文件。
-
使用
Menu
有些條件,就是所要使用的
Menu
,必需在此結點的文件中有明列出來的才能夠使用。要使用其它結點的
Menu
,必需先到有要使用的
Menu
的結點,才能夠使用它的
Menu
。
Menu
有其必定的結構。全部
Menu
的第一列,都是以
``Menu:''
爲開端。以下所示:
*Menu: The list of major topics begins on the nextline.
此列以後的全部列,只要以
``*''
爲開始的列,就表示一個能夠使用的
item
。
MenuItem
的表示法以下所述:
*Info: (info). Documentation browsing system.
它主要由四個部份主成:
-
-
*
-
-
每個 MenuItem 都是以 ``*'' 爲開頭。
-
-
Subtopic:
-
-
``*''
以後就是
Subtopic
的名稱,再加上一個
``:''
。
info
就是根據此
Subtopic
找到所對應的結點名。此例子的
Subtopic
的名稱就是
``Info''
。若是要以指令
``m''
的方式,使用
MenuItem
所要給予的
Texinfo
的名稱就是此
Subtopic
的名稱。
-
-
nodename
-
-
在
Subtopic:
以後就是所使用的結點名。通常爲了使用上的方便,會盡量的使用相同的
Subtopic
和結點的名稱。若兩者的名字相同時,在
Subtopic
後的結點名會省略而以兩個
``:''
表示之。如
``*Info::''
。
-
-
nodedescription
-
-
結點後面的內容是選擇性,它主要是用來概略描述此結點。
-
-
l
-
-
若是想要回到前一個(last)所參考過的結點,能夠使用指令 l 一步一步的往回走。
-
-
b
-
-
指令 b 能夠使遊標移至文件的最前端。
-
-
SPC
-
-
若文件太長可鍵入空白鍵( SPC)來捲動螢幕。
-
-
Ctrl-g
-
-
任什麼時候候想要取消所鍵入的指令,可鍵入 Ctrl-g
3.Emacs 的整合環境
前面不斷的強調,EMACS 不僅提供一個編輯的環境,而提供一個整合的工做環境。因此,在未進入本文的正題- EMACS 的編輯環境以前,先對 EMACS 的工做環境作一個簡介。
-
EMACS 所能提供的工做環境以下
-
-
EMACS 可執行 Shell 的指令。
-
-
EMACS 可作爲 DirectoryEditor(Dired)。
-
-
EMACS 能夠編輯、編譯及除錯程式。
-
-
EMACS 具備編輯其它 host 上檔案的能力。
-
-
EMACS 能夠列印檔案。
-
-
EMACS 具備年曆、日記的功能(Calendar、Diary)。
-
-
EMACS 具備讀 ManPage 的能力。
-
-
EMACS 能夠收發電子郵件(Mail、Rmail)。
-
-
EMACS 能夠閱讀網路上的電子布告欄(GNUS)。
-
-
EMACS 具備 versioncontrol 的功能。
-
-
EMACS 對於檔案的處理,具備 Outline 的能力。
-
-
EMACS 具備資料庫的處理能力。
-
-
EMACS 能夠提供電子計算機的功能。
-
-
EMACS 提供了娛樂的環境(game),讓工做者能夠暫時放下工做的壓力。
由以上的分析可知,只要進入 EMACS 的工做環境,就能夠在其下完成全部的工做。因此 EMACS 的理想,是離開 EMACS 就是離開電腦工做的時候,由於它的最終目標,就是要完成一個以編輯器爲軸心的做業系統。
EMACS 所提供的這些功能,都是先喚起表明此功能的模式mode, EMACS 的模式,分紅主要模式 major mode與次要模式minor mode。每一次只能使用一個主要模式,並且必需要的。但一個主要模式能夠搭配一個以上的次要模式。如今就來簡述 EMACS 工做環境的功能,至於如何使用這些 EMACS的工做環境,本文就很少作介紹。
如何在 Emacs 中執行 Shell 的指令
在EMACS 中有兩種執行 shell 指令的方法:一種是進入shellcommand mode,另外一種是進入 shellmode。兩者均可以執行 shell 的指令,其最大不一樣之處是,進入 shellmode 的狀態,執行 shell 指令的同時,仍能夠切換到其它模式處理別的工做,但若是使用 shellcommand mode,就必須等指令執行完後才能夠作其它的事。 使用 shellcommand mode 時,使用者在螢幕的最下方輸入欲執行的指令, EMACS 會開啓一個名爲``*Shellcommand output*'' 的視窗,將 shell 指令執行的結果顯示在此視窗中.shellmode 則是執行一個 subshell,其輸入與輸出都是透過同一個緩衝區,因此輸入與輸出是在同一個地方,它不似 shellcommand mode,指令輸入與結果的顯示在不一樣的地方。 shellcommand mode 又能夠有兩種模式,一種就是很單純的執行一個 shell 的指令;另外一種是對某一特定區域的資料執行 shell 的指令。 shellcommand mode 允許執行後的結果,直接輸入到目前所使用的工做區內。有了如此的功能,使用者能夠很輕易的將 shell 指令執行的結果,直接放入適當的位置,而不需另外從事剪貼的工做。要如何使用 EMACS 所提供的 shell 功能呢?如下是最基本的方法,至於高階的用法則請自行參考 GNUEMACS所提供的 ``GNUEmacs Manual'' 。
-
-
shellcommand mode
-
-
ESC-!(shell-command)
-
-
喚起 shellcommand mode。
-
-
ESC- (shell-command-on-region)
-
-
針對某一特定區域執行shellcommand mode 的 shell 指令。
-
-
(特定區域,是指緩衝區的某一範圍(region)而言,因此此指令只是針對緩衝區的某一部分運做的資料,)
-
-
Ctrl-uESC-! 與 Ctrl-uESC- 在 ESC 前加上 Ctrl-u ,能夠將 shell 指令執行的結果,輸出到遊標所在的位置。
-
-
shellmode
-
-
ESC-xshell\indexESC-x shell 是喚起 shellmode的指令。
有關目錄的編輯方法
Dired 是專門針對目錄來運做的編輯功能。進入Diredmode 後, EMACS 會根據使用者所指定的目錄來列出其下的檔案及次目錄,此時可根據須要EMACS 對這些檔案及次目錄做些運做。 EMACS 所提供可操做 Dired 的種類以下:
-
-
可閱讀、編輯 Dired 所列舉出來的檔案
-
-
操做 Dired 下的檔案
-
-
(a)在 Dired 能夠刪除(delete)檔案此功能能夠很容易的將EMACS 的備份檔(其檔名以 ~結尾)、暫存檔(檔名在兩個 # 中間)或具某一特殊檔名模式的檔案刪除。
-
(b) 檔案的拷貝
-
(c) 檔名的更新
-
(d) 改變檔案的 mode
-
(e) 改變 gid、uid
-
(f) 檔案的列印
-
(g) 檔案的壓縮、解壓縮
-
(h) 載入、編繹 EMACS 的 LISPfile
-
(i) 可產生 hardlinks 與 symboliclinks
-
(j) 可將檔名換成大寫或小寫的英文字母
-
-
可在 Dired 中執行 shell 的指令
-
-
可以使用 UNIX 的 diff 指令比較檔案間的異同
-
-
可隱藏次目錄
-
-
可以使用 find 的公用程式來尋找檔案
以上所列舉的就是Dired的功能,有人說它相似 PC 上的 PCTOOLS,讀者是否有相同的感受呢?
進入 Dired 模式的方法很簡單,只要鍵入
``ESC-x dired''便可。此時的minibuffer 會顯示出以下的文字:
-
Dired(directory):
-
``:''
以後是目前所在的目錄,此時能夠修改目錄名。肯定所要使用的目錄,按下
RET
後,系統會另開啓一個視窗來顯示此目錄下的全部檔案。以後就能夠對這些檔案作運做。
Dired
所使用的緩衝區是一個惟讀(
read-only
)的緩衝區,因此
modeline
會出現二個
%%
來表示其爲惟讀的狀態。若是要緩衝區的惟讀狀態改成可讀,能夠鍵入
Ctrl-xCtrl-q
的指令,將緩衝區的狀態改變。運做此緩衝區有其特別的方法,所以對此緩衝區作編輯並沒有實質上的做用。如下就介紹運做
Dired
的方法:
-
-
在 Dired 中刪除檔案
-
-
Dired
最基本的指令,就是將要刪除的檔案作上旗標(
flag
)以後,再將有旗標的檔案刪除。
-
-
d
-
-
將遊標移至所欲刪除的檔案列,鍵入 d。此列的最前方會出現 D,這就是刪除的旗標。此時的遊標會移至此列的下一列。
-
-
u
-
-
若想放棄已定好的旗標,能夠鍵入 u 使螢幕上的 D 消失。
-
-
x
-
-
鍵入指令 d 只是將要刪除的檔案先作上旗標,並未真正執行刪除的動做。只有鍵入 x 纔會將全部作上旗標的檔案刪除。執行刪除檔案以前,會先詢問是否真要刪除的意見。此時若是回答 ``yes''則執行刪除的動做,若回答 ``no'' 不執行刪除的動做,但旗標依然存在著。
-
-
在 Dired 中將多個檔案同時作上旗標
-
-
-#
-
-
鍵入 #,系統會自動將全部的自動儲存的檔案(auto-savefile)作上刪除的旗標。
-
-
~
-
-
鍵入 ~,系統會自動將全部的備份檔(backupfile)作上刪除的旗標。
-
-
%dregexp RET
-
-
將全部適合的 regularexpression 檔案作上刪除的旗標。
-
-
全部作上旗標的檔案要執行刪除的動做,都必需執行指令 x。
-
-
在 Dired 中訪問檔案
-
-
f(dired-find-file)
-
-
若是想要訪問目前遊標所在列的檔案,只要在此列上鍵入 f 便可。此時,檔案的內容會顯示在原先顯示 Dired 緩衝區的視窗上。使用此方法訪問檔案,就如同以 Ctrl-xCtrl-f 訪問檔案同樣。
-
-
o(dired-find-file-other-window)
-
-
此方法也是用來訪問檔案,但與鍵入
f
有些不一樣之處。鍵入
o
後,所訪問的檔案會出如今另外一個視窗上而遊標也會移至所訪問的視窗,顯示
Dired
緩衝區的視窗並未消失在螢幕上。
-
-
Ctrl-o(dired-display-file)
-
-
此方法與鍵入
o
雷同,兩者不一樣之處在於鍵入
Ctrl-o
後所訪問的檔案會出如今另外一個視窗上,但遊標不會移至所訪問檔案的視窗,依然留在顯示
Dired
緩衝區的視窗上。
-
-
v(dired-view-file)
-
-
此指令僅供流 檔案之用,由於以此而開啓的檔案是惟讀檔案。
-
-
將 Dired 的檔案作上標記
-
-
m(dired-mark)
-
-
將目前遊標所在的檔案作上標記 ``*''。若是給予數值引數,則作上標記的檔案數目會依所給予的數目而定。
-
-
*(dired-mark-exectables)
-
-
將全部的可執行檔(executablefiles)作上標記 ``*,若給予數值引數。則會將全部作上標記的可執行檔的標記取消(unmark)。
-
-
@(dired-mark-symlinks)
-
-
將全部的 symbolicfiles 作上標記 ``*,若給予數值引數。則會將全部作上標記的 symbolicfiles 檔的標記取消(unmark)。
-
-
/(dired-mark-directories)
-
-
將全部爲目錄的檔名,但除了 ``.'' 與 ``..'' 以外,均作上標記 ``* 。若給予數值引數,則會將全部作上標記的目錄名稱的標記取消(unmark)。
-
-
ESC-DEL markchar(dired-unmark-all-files)
-
-
消除全部以字元(character)( markchar)作爲標記的記號。 若是給予數值引號,則在消除每個記號時,會詢問是否要消除記號。 回答 ``y'' 則表示要將記號消除,回答 ``n'' 則表示不要消除已作好的記號。若此時鍵入 !,則表示消除其他的記號再也不詢問意見。
-
-
cold new(dired-change-marks)
-
-
使用此指令,可將本來以 old 爲標記的記號,換成以 new 爲標記的記號。
-
-
%m regexp RET(dired-mark-files-regexp)
-
-
可以使用regularexpression ,將具備某一類型的檔案作上標記。
-
-
在 Dired 中的運做方式,有幾件事情必需注意:
-
-
若是給予指令數值引數
n
時,此時指令所運做的檔案是從目前遊標所在的檔案起日後算
n
個檔案(包括遊標所在的檔案)。若是給予負數的數值,則往遊標所在處以前算
n
個檔案(包括遊標所在的檔案)。
-
-
若是不給予任何的數值引數,則指令的運做範圍會以作了標記的檔案爲主。
-
-
若是不給予數值引數也不對任何檔案作標記,則指令只對目前遊標所在列的檔案運做。
-
-
全部運做 Dired 緩衝區的指令都是大寫的英文字母,全部的指令都是使用minibuffer 來接收所需的訊息。
-
-
如下就是運做 Dired 緩衝區的指令:
-
-
Cnew RET (dired-do-copy)
-
-
拷貝檔案。如有多個檔案同時要拷貝,則引數 new 表明檔案所要拷貝到的目錄。若只拷貝一個檔案,可利用此引數 new 將檔案重新命名。
-
-
Rnew RET (dired-do-rename)
-
-
更換檔名。如有多個檔案同時要換檔名,則引數
new
表明檔案換名稱後所要放置的目錄。若只有一個檔案,此引數
new
表明更換的檔名。當檔名更換完畢,
Dired
緩衝區的檔案名稱會自動跟著更換。
-
-
Hnew RET (dired-do-hardlink)
-
-
將檔案標上 hardlinks 的標記。引數 new 表明 hardlinks所要鏈接的目錄。若只有一個鏈接時,此引數 new 表明連結的名稱。
-
-
Snew RET (dired-do-symlink)
-
-
將檔案標上 symboliclinks 的標記。引數 new 表明 symboliclinks 所要鏈接的目錄。若只有一個鏈接時,此引數 new 表明連結的名稱。
-
-
Mmidespec RET (dired-do-chmod)
-
-
更改特定檔案的模式(mode,permissionbits)。此程式使用 chmod 的程式,因此式適用的引數。
-
-
Gnewgroup RET (dired-do-chgrp)
-
-
改變特定檔案的團體(group)爲新的團體( newgroup)。
-
-
Onewowner RET (dired-do-chown)
-
-
改變特定檔案的擁有者(owner)爲新的擁有者( owner)。
-
-
Pcommand RET (dired-do-print)
-
-
列印特定的檔案,可利用 minibuffer 輸入列印的指令 command。
-
-
Z (dired-do-compress)
-
-
壓縮或反壓縮特定的檔案。若是檔案已被壓縮則將其反壓縮,反之則將檔案壓縮。
-
-
L (dired-do-load)
-
-
載入特定的 EMACSLisp 檔案。
-
-
B (dired-do-byte-compile)
-
-
位元編譯(bytecompile)特定的 EMACSLisp 檔案。
-
-
Dired 在編輯遠方檔案與使用 ftp 的用法使用 EMACS 的遠方編輯或使用 EMACS 來作 ftp 時,若只給予目錄名,系統會進入 Dired 的模式。此時可以使用運做 Dired 緩衝區的指令來操做所要的檔案。至於何爲遠方的編輯會在下一節中討論。
如何編輯遠方機器上的檔案
EMACS 除了提供了通常編輯器所具備的功能以外,它還提供了通常編輯器全部的功能,那就是編輯遠方 host 的檔案。 EMACS 編輯遠方host 的檔案,是使用了 ftp 的技巧,將所欲編輯的檔案 ftp 到目前的 host 上,待編輯完畢再以相同的技巧,把檔案 ftp 傳回遠方的 host 而已。往昔要編輯遠方的檔案只有兩種作法,一是簽入(login)到檔案所在的 host 去,另外一種就是以 ftp 的方法將檔案先傳回目前所在的地方,修改完後再 ftp 回去。 RemoteEditing 也能夠用到 ``anonymousftp'' 上,它能夠進入遠方的目錄下,使用者便可根據須要挑選要 ftp 的檔案。使用 remoteediting 的方法很是簡單,在鍵入 ``Ctrl-x Ctrl-f'' 後,再根據語法給予適當檔名, EMACS 就會處理自行 ftp 遠方 host 上的檔案,其語法以下: Findfile:/host:filename host 是指遠方 host 的名稱, filename 是指存放在遠方 host 的檔案。例如: Findfile:/user1@gate.sinica.edu.tw:.login 就是編輯 host 爲 ``gate.sinica.edu.tw'' 的機器,而使用者爲 ``user1'',檔案的名稱爲 ``.login'' 的檔案。
程式的編輯,編譯與測試
EMACS 是一個整合的環境,在提供程式編輯的同時,天然會提供一個可供程式執行的環境。如下就要談談 EMACS 能夠爲程式撰寫者提供那些服務。 EMACS 對於不一樣的語言提供不一樣的編輯模式。 EMACS 提供的服務有程式內縮的安排、括號對應的提示、程式註解的安排、遊標移動的方式與程式的刪除等等。基本上,EMACS 是提供一個撰寫程式的格式,只是此格式可根據使用者的須要而自行設計。 EMACS 選擇適合的語言模式,是根據所編輯的檔案名稱附名來判斷的。如附名爲 .c 的 C 語言程式,EMACS 會自動給予 C 語言模式,而不需使用者自行處理。EMACS 提供的程式語言模式有 LISP、SCHEME、C、C++、FORTRAN、MAKEFILE、AWK、 PERL、ICON 與 MUDDLE等。編輯好的程式能夠直接進入 EMACS 的編譯模式,不需離開 EMACS 到 UNIX 的 shell 下進行編譯的動做。進入 EMACS 的編譯模式很簡單,只要鍵入 ``ESC-xcompile'' 便可。 EMACS 預設的編譯指令是 make ,執行 ESC-xcompile指令的結果以下所示:
-
compilecommand: make -k
若要使用其它的編譯器,只需在
``compilecommand :''
的後面給予適當的編譯指令便可,此指令與在
UNIXshell
下使用編譯的方法徹底相同。除了編輯、編譯以外,程式撰寫者還須要的功能是
Debugger
的提供。
EMACS
也提供了此項的服務。
EMACS
提供了四種
debugger
,分別爲
gdb
、
dbx
、
xdb
與
sdb
,使用者可根據需來選擇合適的
debugger
。此處,只將使用
debugger
的指令列舉以下:
-
-
ESC-xgdb RET file RET
-
-
ESC-xdbx RET file RET
-
-
ESC-xxdb RET file RET
-
-
ESC-xsdb RET file RET
如何在 Emacs 中列印文件
除了以上的功能外, EMACS 還提供了列印的功能。 EMACS 的列印可針對個整緩衝區或某部份的區域列印,其相關的指令以下:
-
-
ESC-xprint-buffer
-
-
列印整個緩衝區的內容。
EMACS
處理此工做的方法是先使用
shell
的
pr
指令,然後再使用
shell
的
lpr
列印指令。
-
-
ESC-xlpr-buffer
-
-
此指令與上一個指令類似,只是不透過 pr 而直接使用 lpr。
-
-
ESC-xprint-region
-
-
與 ESC-xprint-buffer 類似,惟一不一樣之處在於,此指令只列印部份的區域。
-
-
ESC-xlpr-region
-
-
與 ESC-xlpr-buffer 類似,惟一不一樣之處在於此,指令只列印部份的區域。
在 Emacs 中如何收發信件
在 EMACS 衆多的整合功能中,信件收發的功能天然是不可或缺的。 EMACS 對電子郵件的設計卻與通常的電子郵件系統背道而馳,它是在以編輯爲前提的條件下來提供電子郵件的子系統;換言之,電子郵件爲以編輯器爲主導的一個子功能。 EMACS 所提供的電子郵件系統分紅二個部份,一部分爲發送信件( mail),另外一部爲收取信件( rmail);收取信件的同時也能發送信件,它的做法是使用發送信件的功能將信件發送出去。 EMACS 讀取電子郵件,是將做業系統存放電子郵件的檔案拷貝至 EMACS 本身的檔案中,此檔案名爲 RMAIL, EMACS 在讀取信件時會至此檔(RMAIL)中讀取所要的信件。 EMACS 如此設計檔案的讀取有它的理由,其理由以下:
-
-
做業系統存放電子郵件的格式不一,讀取電子郵件的軟體也是變化萬千。EMACS 的 RMAIL 就是要將如此複雜的事情簡單化。
-
-
RMAIL 記錄了信件全部的相關資料,但做業系統所提供的信件檔案,並未有作如此詳細的記錄。
-
-
通常做業系統爲了要確保信件讀取時的安全性,必需經由一套繁雜的方法來保障信件讀取的安全以及資料的不流失。
EMACS
的
RMAIL
所採起的措失就是既安全又簡單。
RMAIL
的方法是,先把存於系統內的信件讀出後,再拷貝至
RMAIL
的檔案內,待一切就緒纔將存在系統內的信件刪掉。如此做的好處是,即便系統當掉只會使信件多作一份拷貝,也不會有流失信件的事件發生。
-
EMACS 對於發送信件與讀取信件提供了許多有用的操做功能,讀者可自行參考相關手冊,此處只告訴讀者如何進入送信件與讀信件的模式:
-
-
ESC-xmail (發送信件)
-
-
ESC-x rmail (讀取信件)
其它與 Emacs 相關的工做環境
EMACS 除了提供以上種種的工做環境境,還有其它的環境能夠運用,如今讓咱們一一道來。
-
-
TheCalendar and the Diary
-
-
EMACS
的
CalendAr
與通常的月曆功能類似。
Diary
更能夠適時提醒使用者該注意的事情。進入
Calendar
的方法以下:
ESC-xcalendar Diary
的使用能夠在進入
calendar
的模式中後,再來設定相關的資料。
-
-
ReadingMan Page from EMACS
-
-
閱讀 manualpage 的方法很是簡單,其用法以下: ESC-xmanual-entry RET unix-command-name RET
-
-
ReadingNews with GNUS
-
-
讀送網路新聞爲現今交換電腦資訊的重要媒體與管道, GNUEMACS 也提供了此一子系統,稱爲 GNUS.EMACS 的 GNUS 是將``.newsrc'' 檔的內容顯示出來,它的內容包括全部被訂閱的(subscribe)的 newsgroups,以及未被閱讀的文章。在 GNUS 中還能夠看到或隱藏未被訂閱的 newsgroups,並能夠再訂閱未訂閱的 newsgroup 或取消訂閱某一個newsgroup。固然 GNUS 也提供了可遊走於各 newsgroups 間的指令。在 EMACS 中使用 GNUS這一個子系統只需鍵入以下的指令便可。 ESC-xgnus RET
-
-
versioncontrol
-
-
管理原始檔案(sourcefiles)也是EMACS 所提供了服務項目之一。功能。 versioncontrol 是一個套裝軟體,它能夠記錄一個原始檔案 (sourcefile)全部改變的版本(multipeversions),它保留全部改變的記錄且存放於一個檔案中,對於每一版本重複的部份只會保留一分記錄。versioncontrol 也會記錄每一版本被創造、誰創造了它等等的相關資料。目前 EMACS 是透過 VC,來使用做業系統所提供的 RCS 或 SCCS 的 versioncontrol 軟體。若做業系統提供 RCS, EMACS 會先使用 RCS,若無 RCS 則會使用SCCS。 EMACS 容許使用者自行決定使用 RCS 或 SCCS 的 versioncontrol。透過 EMACS 的 VC,所能使用的 versioncontrol 的功能並很少,它只提供最基本的 versioncontrol 的功能,但確是最常爲人使用的功能。若想使用 SCCS 或 RCS 所提供的全部功能,就必須進入 EMACS 的 shellmode 中了。如下就來簡介 EMACSversion control 的功能。EMACS 的 VC 提供的功能以下:
-
-
將檔案註冊於 versioncontrol 之下。
-
-
可將註冊的檔案從 versioncontrol 的控制中取出與放入。
-
-
放入 versioncontrol 的每個版本均可以隨時取出。
-
-
可比較任一版本間的異同。
-
-
可將一組相關的檔案,置於 versioncontrol 之下。
-
-
可自行設計標頭(versionheader),此標頭可置於 versioncontrol 下的檔案中。
-
至於其它的 versioncontrol 功能,則必需進入 EMACS 的 shell 中直接使用 RCS 或 SCCS。例如,將數個版本合併、使用 help 協助使用 versioncontrol 等的功能,就從 EMACS 所提供的 VC 獲得解答。
-
-
OutlineMode
-
-
以 editor 爲基石的 EMACS 固然少不了製做文章大綱的功能。 EMACS 的大綱模式(outlinemode)能夠使文章的部份主體暫時隱藏起來,只呈現文章的大綱部份。如此一來,吾人不需維護一套爲本文,另外一套爲大綱部份的兩套系統了。由於,製做本文的同時就已經隱含了大綱的部份了。
-
前面已經將 EMACS 能夠作的事以及它的特質都作了簡要的介紹。如下就開始討論 EMACS 的基本要素- 編輯功能。
-
-
4.
與Emacs
有關的議題
上一章簡介了EMACS的整合環境,在討論編輯以前,先介紹如何啓動 EMACS與離開EMACS;EMACS對於螢幕的安排如何;以及緩衝區與視窗在 EMACS中角色定位等等的問題。EMACS可用在text-only的終端機與Xwindow System 的視窗環境,但本文只針對text-only的終端環境來講明任何有關EMACS的介紹。
如何起動Emacs
啓動 EMACS 的方法很是簡單,只要在 shell 的提示下鍵入 ``emacs'' 五個英文字就能夠啓動 EMACS 了。例如:
$ emacs RET
啓動後的 EMACS 作了以下的啓始(initialize)動做:
-
-
清除目前的螢幕,開始一個全新的EMACS螢幕。
-
-
EMACS會在這個全新的螢幕,顯示一些與EMACS有關的基本訊息。其中包括,目前使用的 EMACS版本、基本的線上輔助說明訊息以及有關 EMACS版權的相關資訊等等。
-
-
此時若不輸入任何指令,
EMACS
會在一段時間以後(約二分鐘
)
自動將螢幕從新清除成一個空白的螢幕。
-
-
若在螢幕自動從新清除以前鍵入指令,EMACS會根據所給予的指令來作適當的運做。
-
啓動EMACS的方法,不須要給予任何的檔名,只要輸入emacs。由於EMACS是要創建一個能同時開啓多個檔案的編輯環境;更進一步但願開啓的檔案,能彼此共享一些訊息。因此,在鍵入 ``emacs''的同時,給予所要編輯的檔名,就變得不實際了。
如何離開Emacs
知道如何啓動EMACS後,接下來就要探討如何離開EMACS了。離開 EMACS的方法有兩種,一種是暫時離開EMACS(suspendingEMACS),另外一種是永遠離開 EMACS(killingEMACS)。其使用方法以下(爲求統一,以後的各章節都先列出EMACS的Hotkey,其相對應的命令則列舉在小括號內,若無Hotkey則直接列出其命令。要使用EMACS的命令,一般要在每一個命令前加上Meta-x或ESC-x):
-
-
Ctrl-z(suspend-emacs)
-
-
暫時離開EMACS回到其上一層的狀態,通常是回到shell的狀態。若想回到 EMACS的狀態,只要鍵入''%emacs'',則能夠回到EMACS了。
-
-
Ctrl-xCtrl-c(save-buffers-kill-emacs)
-
-
永久離開EMACS。以此方法離開EMACS,除了從新啓動EMACS方外(即在shell的提示下鍵入emacs),沒有其它的方法能夠再回 EMACS了。
-
暫時離開
EMACS
意思是回到上一層的狀態(
parentprocess
),通常是指
shell
。使用者能夠隨時回到原先所啓動的
EMACS
下,對於所使用的緩衝區、
killring
以及
undohistory
等相關資訊,仍保持與離開前相同的狀態
(
有關
killring
、
undohistory
等相關資料會在之後的各章陸續說起。以
Ctrl-z(suspend-emacs)
指令暫時離開的
EMACS
,能夠在
shell
的提示下,以
``%emacs''
回到離開前的
EMACS
下。有些系統或
shell
並不提供這種暫時離開的功能,此時只能永遠離開
EMACS
而沒法暫時離開
EMACS
了。
-
要永遠離開
EMACS
則必需鍵入
``Ctrl-xCtrl-c''(save-buffers-kill-emacs)
或
``ESC-xsave-buffers-kill-emacs''
,
EMACS
接收此指令後會展開以下的動做:
-
-
EMACS會主動提醒使用者,儲存全部修改過的檔案。
-
-
當使用者對須要儲存的檔案作了適當的處理後,
EMACS
對於全部仍在執行的
subprocess
,也會主動提醒使用者是否要結束它們。由於離開
EMACS
的同時也就是結束這些
subprocess
的時侯。
-
在永久離開
EMACS
前,
EMACS
會再三的提醒使用者有關檔案的儲存與仍在執行的程式等等。由於,一旦永久離開
EMACS
以後,全部未存檔或尚在執行的
subprocess
都會隨之消失。
EMACS
對於全部未儲存的檔案與仍在進行的程序,會利用
echoarea
一一提醒遺忘它們的使用者。
echoarea
會提示須要儲存的檔案,同時也提供可處理這些檔案的方法。因此
echoarea
除了顯示要存檔的檔案名稱外,還會在檔名以後出現以下的訊息:(
y,n, !, ., q, C-r or C-h
)這些訊息提供,就是要讓使用者對於檔案或程序有適當處理的機會。如今就對這些訊息作一討論。
-
-
y
-
-
贊成對 echoarea 所顯示的緩衝區存檔,並徵詢對於其它檔案是否存檔的意見。
-
-
n
-
-
放棄對 echoarea 所顯示的緩衝區存檔,但徵詢對於其它檔案是否存檔的意見。
-
-
!
-
-
贊成對 echoarea 所顯示的緩衝區存檔,且對其它的緩衝區也一併存檔,再也不徵詢其它檔案是否存檔的意見。
-
-
.
-
-
贊成對 echoarea 所顯示的緩衝區存檔,但對其它的緩衝區則再也不徵詢是否存檔的意見,直接放棄其它緩衝區的存檔,且離開此存檔的狀態。
-
-
q
-
-
放棄存檔的狀態而不執行任何存檔的動做。
-
-
C-r
-
-
此指令可用來流 目前所要儲存的檔案內容,當離開此流 狀態即回覆存檔的模式,系統會再度詢問與存檔有關的訊息。
-
-
C-h
-
對於以上的選項如有不明白的地方,能夠此功能查閱其意思。
EMACS的螢幕安排
在text-only的終端機啓動EMACS時,EMACS會佔據整個螢幕,此時的螢幕稱爲 frame。再一次的強調,本文只討論text-only的終端機,至於 XWindow 的環境則不在討論的行列中。
-
text-only的 frame 又由數個window所組成。啓動 EMACS時,會產生二個預設的視窗,一個視窗用來輸入通常的文件,在未有文件輸入前先用來展現前面提到的EMACS版本、線上輔助說明以及有關版權等訊息;另外一個視窗用來輸入指令或是用作訊息的迴應,稱爲minibuffer或 echoarea。
-
若終端機提供反白的功能,在反白區域以上的地方是用來輸入文件的視窗;反白區域如下的地方則是 minibuffer 或 echoarea。此反白的長條型則稱爲 modeline,它是用來描述輸入文件視窗的一些訊息。如今就來談談組成 EMACS frame 的這三個部份。
-
有關文字視窗的部份,由於還牽涉到緩衝區的問題,如今先略過不談,下一節再行討論。如今先討論與其有關的 modeline和位於 modeline下的minibuffer 或 echoarea。
-
modeline
出如今每個文字視窗的最後一列,其描述此視窗的相關資訊。
modeline
所描述的訊息以下
:--ch-Emacs: buf
(
majorminor
)
--pos--------------
如今則分別解釋其所表明的意義。
-
-
rl-h表明緩衝區的狀態(何謂緩衝區會在下一節討論)。
-
-
--表示緩衝區未被修改過。
-
-
**表示緩衝區已被修改過。
-
-
%%表示緩衝區爲read-only的緩衝區。
-
-
%*表示read-only的緩衝區被修改過。
-
-
buf
-
-
表示此視窗緩衝區的名稱,通常即爲所編輯的檔案名稱。
-
-
majorminor
-
-
此緩衝區全部使用的模式(mode)都列舉在此括號內。其中包括一個主要模式 (majormode)和數個次要模式(minormode)。EMACS容許一個緩衝區有數個次要模式,但只能有一個主要模式。
-
-
pos
-
-
表示文件在視窗顯示的情形。其表示的種類以下:
-
-
All
-
-
若是資料不多能夠一「幕」瞭然,則會以All來表示。
-
-
Top
-
-
若資料沒法一「幕」瞭然,但出現的位置在最前面,則以Top來表示。
-
-
沒法一「幕」瞭然的資料,出現的位置是在最尾端,則以Bot來表示。
-
-
nn%
-
-
若資料出現的位置不在第前端也不在最後端,則以百分比來表示資料出現的情形。
-
介紹完了
modeline
,如今來談談
echoarea
與
minibuffer
。在
frame
的最後一列,也就是
modeline
的下一列就是
echoarea
或
minibuffer
出現的地方。兩者使用同一區位但所表明的意思卻不相同。
Echoing
的意思就是將鍵入的字元在螢幕上回應出來。
EMACS
對於只有一個字元的指令並不會把它
Echoing
出來,例如
``Ctrl-e''
。對於多個字元的指令,只要在鍵入指令的時候給予稍許的停頓,
echoarea
就會把鍵入的指令迴應出來。等第一次的迴應產生時,再輸入的部份就不須要再給予停頓的時間,其迴應會在鍵入的同時當即產生。
echoarea
除了迴應鍵入的指令,也會將指令所產生的訊息顯示出來;錯誤訊息的顯示也是利用此區域。
-
minibuffer 所使用的地方與 echoarea 相同。它自己也是一個視窗,是用來輸入執行指令所需的引數(argument)。使用 minibuffer 的同時也會使用 echoarea。
-
minibuffer
輸入引數的地方,是在
echoarea
迴應字串的
``
:
''
以後。由於
echoarea
的迴應是以
``
:
''
的出現作爲結束。換言之,
``
:
''
冒號以後就是
minibuffer
輸入引數的地方。
-
例如,要訪問一個檔案,鍵入指令
``Ctrl-xCtrl-f''
時,
echoarea
會出現
Findfile: ``Find file''
就是
echoarea
的迴應字,而此迴應字串以
``
:
''
作爲結束。因此
``
:
''
以後,就是
minibuffer
的地盤了,也就是
minibuffer
輸入引數的地方。
-
使用
minibuffer
時,遊標會自動移至
minibuffer
所在處,當遊標在
minibuffer
時,就表示能夠輸入引數了。若遊標由於某些緣由不出如今
minibuffer
的位置,此時能夠
``Ctrl-x o
(
other-window)
使遊標在視窗間移動,直到遊標出如今
minibuffer
所在的視窗爲止。若已在
minibuffer
的狀態,但不想輸入任何引數,此時能夠
``Ctrl-g
(
keyboard-quit
)
)
離開
minibuffer
。輸入
``Ctrl-g''
後,遊標會移至其它的視窗。
-
minibuffer 也是一個視窗,因此能夠從別的視窗移至此視窗; ``Ctrl-x o'' 的指令就是用來使遊標在各個視窗間移動的。通常的 minibuffer都只有一列的高度,但有時一列的高度沒法將資料顯示完畢,此時的 minibuffer 就須要調整其大小了。至於如何將 minibuffer 的視窗作調整,就是下一節所要討論的重點之一了。
Emacs的緩衝區與視窗
EMACS的緩衝區與視窗的關係密不可分,緩衝區是用來存放編輯文件的,但視窗倒是用來顯示緩衝區的文件。如今就來談談緩衝區和視窗。 緩衝區(buffer)是EMACS編輯文件時,暫時存放文件的地方。這個地方只用來暫時存放文件,要想永久保留這些文件,必需將暫時存放的文件儲存起來,通常是使用硬碟來安置緩衝區的文件。
-
在
EMACS
中所作的任何事情,都是先暫放於緩衝區內。
EMACS
處理檔案的方式,也是先將檔案從硬碟中取出後,再放於緩衝區內。因此不管是刪減、修改與新增文件,都是在緩衝區內進行,除非將緩衝區內的文件存回硬碟,不然硬碟的內容都不會因緩衝區內容的改變而改變。
-
文件未存回硬碟而離開EMACS(killEMACS),將永遠消失。但 EMACS有一個自動儲存文件的功能,稱爲``auto save'' 。每當鍵入必定數量的字元(一般是三百個字元),EMACS就會自動作儲存的動做;通過一段停置的時間(一般是三十秒),EMACS也會作自動儲存的動做。
-
EMACS自動儲存的功能並不是將文件直接存回該檔案所在的硬碟中,而是將緩衝區的文件存入一個暫存檔內。只有以存檔的指令,例如 ``Ctrl-x Ctrl-s'' 的指令,將緩衝區的文件存回硬碟時,緩衝區內的文件纔會存回硬碟中。只有當文件存回硬碟中,EMACS纔會自動清除此暫存檔。若緩衝區的內容一直未存回硬碟,此暫存檔就會一直存在著,直到存回硬碟纔會消失。
-
EMACS
如此安排暫存檔有兩個好處,第一個好處是能夠確保編輯的檔案資料不會流失;第二個好處是可預防機器意外關機或當機,檔案不及存回硬碟,所形成的損失。
EMACS
命名此暫存檔的方式,是以緩衝區所使用的檔名爲依據。在檔名的先後各加上一個
``#''
,就是暫存檔的名稱。舉例說明,若所編輯的檔名爲
``emacs.doc''
,其產生的暫存檔即爲:
#emacs.doc#
若所編輯的檔案未存回硬碟時,
EMACS
會自動產生一個暫存檔。下次編輯此檔時,
EMACS
允予使用者從暫存檔中將流失的資料回覆。例如編輯的檔案爲
``emacs.doc''
,在離開
EMACS
時未存回硬碟,
EMACS
會自動產生一個
``#emacs.doc#''
的自動儲存檔。當從新啓動
EMACS
且編輯
``emacs.doc''
檔時,
EMACS
會提示使用者此檔案已被更改過但未給予適當的儲存。此時,使用者可自行決定是否要從自動儲存的檔案中(
#emacs.doc#
)將
``emacs.doc''
檔中未被儲存的資料找回。
-
如何從自動儲存檔中將資料找回呢?想要從自動儲存的檔案中,恢復原始檔案中流失的資料,能夠使用 ``Meta-x recovery-file'' 的指令。若存放於硬碟中的檔案,有相對應的自動儲存檔時,可經由以下的步驟將資料找回:
-
-
鍵入``Ctrl-xCtrl-f RET''
-
-
Findfile: ~/ filename
-
-
在
Findfile:
處輸入所欲編輯的檔案後後,
echoarea
-
-
會出現以下的訊息:Autosave file is newer: consider M-x recovery-file
-
-
鍵入``Meta-xrecovery-file RET''
-
-
此時echoarea 會自動出現相對應的自動儲存的檔案名稱,若願意執行恢復的動做,只要直接按下 RET便可。不然,以 ``Ctrl-g''指令,放棄此命令的執行。
-
除了暫存檔外,
EMACS
對於每個編輯的檔案,都會在編輯前作一份備份,以防止在編輯的過程當中因一時的疏忽而將檔案毀損。備份檔的設計是,當檔案被存回硬碟後,備份檔也不會所以而消失。
-
EMACS
命名備份檔的方式,是在所要編輯的檔名以後加上
``~''
。例如,
``emacs.doc''
的備份檔就爲
``emacs.doc~''
。
-
以上的設定是能夠改變,由於它們都是變數。下面列出相關的變數,使用者可自行決定其所需。
-
-
auto-save-visited-file-name
-
-
設定自動儲存檔案的種類。能夠設爲暫存檔也可設爲正在使用的原檔案。
-
-
delete-auto-save-file
-
-
設定檔案被存回硬碟後,自動儲存的暫存檔是否會自動刪除。
-
-
auto-save-interval
-
-
設定自動儲存時的字元數。
-
-
auto-save-timeout
-
-
設定自動儲存時的時間。
-
想知道如何設定變數嗎?在EMACS中任何設定變數的方法都是以``Meta-x set-variable(或ESC-xset-variable)''的指令來完成變數的設定。變數值的設定,能夠只設定真假值或設定數值或是設定字串。
-
若只是設定變數的確定或否認值時,EMACS有一個遵循的規則。EMACS中以任何``non-nil''的值來表明確定,習慣上是以``t''來表示確定;而以``nil''來表明否認。
-
在設定新的變數值以前,若想知道目前變數的值,EMACS能夠``Ctrl-h v''(describe-variable) 來查閱變數的值。如今就舉設定 ``auto-save-visited-file-name''和``auto-save-interval''二個變數來講明變數設定的方法。
-
-
以``Ctrl-h v'' 查閱auto-save-visited-file-name的變數。
-
-
以``Meta-x set-variable'' 來設定變數。
-
-
再以``Ctrl-h v'' 來查閱所設定的auto-save-visited-file-name變數。
-
如今來看看設定auto-save-visited-file-name這一個變數的實際過程:
-
-
鍵入``Ctrl-hv RET''
-
-
echoarea 處會出現Describevariable:
-
-
在
Describevariable:
後鍵入
auto-save-visited-file-name
-
-
螢幕上會另開一個視窗,顯示以下的訊息:
-
-
auto-save-visited-file-name'svalue is nil Documentation: *Non-nil says auto-save a buffer in thefile it is visiting, when
-
practical.Normally auto-save files are written under other names.
-
-
鍵入``Meta-xset-variable''
-
-
echoarea 處會出現Setvaraible:
-
-
在
Setvariable:
後鍵入
auto-save-visited-file-nameRET
-
-
echoarea 處會出現Setauto-save-visisted-file-name to value:
-
-
此時能夠利用在
``
:
''
以後的
minibuffer
,輸入變數的值。此變數的值不是確定就是否認的。目前的值是
nil
,要改其值爲確定的能夠輸入
t
。
-
-
再以``Ctrl-hv'' 來檢視變數設定的情形。
-
上一個例子是設定確定與否認值的例子,如今來看看設定變數值爲數字的例子。 auto-save-interval實際執行的過程:
-
-
鍵入``Ctrl-hv RET''
-
-
echoarea 處會出現Describevariable:
-
-
在
Describevariable:
後鍵入
auto-save-interval
-
-
螢幕上會另開一個視窗,顯示以下的訊息:
-
-
auto-save-interval'svalue is 300 Documentation:
-
*Numberof keyboard input characters between auto-saves.
-
Zeromeans disable autosaving due to number of characters typed.
-
-
鍵入``Meta-xset-variable''
-
-
echoarea 處,會出現Setvaraible :
-
-
在
Setvariable:
後鍵入
auto-save-intervalRET
-
-
echoarea 處會出現Setauto-save-interval to value:
-
-
此時能夠利用
``
:
''
以後的
minibuffer
,輸入變數的值。此變數的值爲數字。目前的值是
300
,使用者可根據須要輸入適當的數字。
-
-
再以``Ctrl-hv'' 來檢視變數設定的情形。
-
在EMACS執行過程當中所設定的變數值,只對目前所執行的EMACS有用,一旦離開此EMACS,全部的設定就恢復成原來的預設值。要想永久保留此設定的變數值,就必需將所設定的變數值儲存在檔名爲 ``.emacs''(.emacs 檔爲EMACS的啓始檔,進入EMACS時會先執行此檔內的指令,EMACS的設定也是根處此檔而來的的檔案中。由於啓動 EMACS時,EMACS會先執行.emacs檔,全部存於此檔案的變數會被從新設定一次。
-
在.emacs檔中設定變數``auto-save-visited-file-name''與``auto-save-interval''的方法以下所示:(setqauto-save-visited-file-name t) (setq auto-save-interval 350) 前已述及EMACS能夠允許多個緩衝區的同時存在,既然如此,天然有其處理每一個緩衝區的方法。如今就來看看EMACS如何處理緩衝區。
-
-
Ctrl-xb buffer RET (switch-to-buffer)此指令用來選擇不一樣的緩衝區,其預選的緩衝區是目前所使用的緩衝區以外,最近被使用過的緩衝區。此指令能夠使用completion。使用此指令, echoarea 會出現以下的訊息:Switchto buffer: (default filename)若所要選擇的緩衝區不是系統所預設的,能夠利用 minibuffer 將所要選擇的緩衝區名稱鍵入。
-
-
Ctrl-xk buffername RET (kill-buffer)此指令是用來刪除 minibuffer 所顯示的緩衝區。若只鍵入RET,則刪除目前的緩衝區,不然,刪除所輸入的緩衝區名稱。一樣的,此指令能夠使用 completion。
-
-
Ctrl-xCtrl-b (list-buffer)將目前 EMACS所使用過的緩衝區顯示出來。如下的就是執行 ``Ctrl-xCtrl-b'' 時,視窗所顯示的資料:
MRBuffer |
SizeMode |
File |
|
-------- |
---- |
---- |
---- |
.*chap4.tex |
17460 |
LaTeX |
/home/usr/hsko/work/chap4.tex |
*%RMAIL |
8788 |
RMAIL |
/home/usr/hsko/RMAIL |
**Buffer List* 241 |
BufferMenu |
|
*scratch* |
0 |
lispInteraction |
|
diary |
928 |
Fundamental |
/home/usr/hsko/diary |
%*man ls* |
15420 |
Man |
|
*Help* |
64 |
Fundamental |
|
-
以上資料的每一欄位各有其所表明的意思,詳述以下:
-
-
欄位MR,標記緩衝區的狀態,其可能的狀態以下所示:
-
-
``*''
-
-
表示此緩衝區被修改過。
-
-
``.*''
-
-
``.''表示此緩衝區爲目前被選擇的緩衝區,``.*''表示此選用的緩衝區被修改過。
-
-
``%''
-
-
``%''表示此緩衝區爲read-only的緩衝區。
-
-
``%*''
-
-
表示此read-only的緩衝區被修改過。
-
-
欄位Buffer,顯示所使用的緩衝區名稱。
-
-
Buffer中的資料若爲檔案名稱時,則表示緩衝區所放置的資料爲一個檔案。
-
-
若
Buffer
中的資料先後加上了
``*''
,則表示此緩衝區不是任何被訪問的檔案。
-
-
欄位Size,顯示緩衝區的大小。
-
-
欄位Mode,顯示緩衝區所使用的主要模式。
-
-
欄位
File
,表示所訪問檔案的絕對名稱。若緩衝區的資料不是來自訪問的檔案,亦即欄位
Buffer
的名字先後加上
``*''
時,則以空白表示。
-
-
Meta-xbuffer-menu
-
-
此指令好似Dired\indexdired的功能,應用在緩衝區上。此指令可對列出來的緩衝區各別作運做。其運做內容包括,儲存緩衝區、刪除緩衝區、顯示緩衝區以及編輯緩衝區等等。其實運做於 ``Meta-x buffer-menu'' 的指令一樣也可用在``Ctrl-x list-buffer'' 上,只是使用 ``Meta-x buffer-menu'' 指令時,echoarea 處會顯示出可運用的選項。其可運用的選項內容以下所示:Command:d, s, x, u; f, o, 1, 2, m, v; ~, %; q to quit; ? for help.現舉較常使用的選項說明,至於其他的選項,使用者可鍵入``?'',來使用其所提供的線上述助。
-
-
d
-
-
標示所欲刪除的緩衝區。在 MR欄位的最前方會出現D。此時並未真正刪除緩衝區,只是將要刪除的緩衝區作上標記,直到下達執行標記的命令時,纔會真正將標示 D的緩衝區刪除。此執行的指令爲``x''。
-
-
s
-
-
標示所欲儲存的緩衝區。在 MR欄位處標示上S。此時並未真正作儲存的動做,只是在要儲存的緩衝區作上標記,直到下達執行標記的命令時,纔會真正將標示 S的緩衝區存檔。
-
-
x
-
-
對作好標記的緩衝區,下達執行的命令。也就是對標示有D 與S的緩衝區,作執行的動做。
-
-
u
-
-
將設好的標記取消。
-
-
f
-
-
選擇目前遊標所在處的緩衝區。此時的視窗會將此緩衝區的內容顯示出來、
-
談完了EMACS的緩衝區,如今來談談與其關係密切的視窗。前已略述,進入 text-only的EMACS,即進入一個frame。一個 frame 由數個視窗組成,每個視窗顯示一個EMACS的緩衝區,且一次只顯示一個緩衝區的內容。
-
EMACS在任什麼時候候,總有一個視窗爲選擇的視窗( selectedwindow)。此視窗所顯示的緩衝區,則稱爲目前的緩衝區( currentbuffer).point(或稱爲遊標)所在的視窗,就是 EMACS的選擇視窗。EMACS是透過遊標來示point所在的位置。因此說,若想要知道目前的選擇視窗,觀察遊標所在的位置就可知道。
-
至於什麼是point呢?point就是用來標示目前所使用的視窗或緩衝區所在的位置。EMACS的每個視窗,各有其所專屬的點位置( pointlocation).每個緩衝區也有屬於它自已的點位置。每個緩衝區或視窗point的位置,並不會隨著視窗或緩衝區的改變而變更。換言之,point的位置會隨時被記錄下來,當再次訪問其它的視窗或緩衝區時,遊標仍會回到離開前的位置。因此,任何移動 point的指令,只會對所選擇的視窗產生影響,對於其它視窗的 point是不會有任何影響的。EMACS下的每一個視窗除了有各自的point外,也各自有其相對應的 modeline。
-
EMACS視窗的大小是允許從新調整的。除了大小是能夠調整的,一個視窗也能夠再分紅兩個視窗。其分割的方法,能夠作水平或垂直的化分。視窗的操做,除了分割視窗以外,也能夠使遊標在不一樣的視窗間移動;固然,將不須要的視窗刪除也是基本的功能。如今就來看看與視窗相關的指令。
-
-
Ctrl-x2(split-window-vertically)
-
-
將一個視窗分紅上下兩個視窗。此時化分出來的兩個視窗,分享著化分前視窗的緩衝區。換言之,此時兩個視窗的緩衝區內容是同樣的。由於共享著同一個緩衝區,因此改變其中一個視窗緩衝區的內容,也會改變另外一個視窗緩衝區的內容。分割成兩個視窗的好處之一是,能夠編輯一個緩衝區,將另外一個緩衝區做爲參考的依據。
-
-
Ctrl-x^ (enlarge-window)將目前遊標所在的視窗拉長一列。此指令,只有在 frame 存在一個以上的視窗時纔有效果。若只有一個視窗,此視窗就佔據了整個 frame,此時天然就無多餘的空間能夠放大了。
-
-
Ctrl-un Ctrl-x ^ (enlarge-windownn)與 Ctrl-x^ 指令類似。不一樣之處在於,此指令能夠將目前遊標所在的視窗拉長 n列以上。
-
-
Ctrl-x3(split-window-horizontally)
-
-
將視窗分紅左右兩個視窗。此時的兩個視窗依然擁有相同的緩衝區,因此,改變一個視窗緩衝區的內容,同時也會改變另外一個視窗緩衝區的內容。
-
-
Ctrl-x(enlarge-window-horizontally)
-
-
將目前遊標所在的視窗拉寬一行。對 frame 存有一個以上的視窗纔有效。若只有一個視窗,此視窗已經佔據整個 frame 了,即便想放大,恐怕也心有餘而力不足了。
-
-
Ctrl-un Ctrl-x (enlarge-window-horizontallynn )與 Ctrl-u指令類似。此指令能夠將目前遊標所在的視窗拉寬n行。
-
-
UsingOther Windows and Deleting Windows
-
-
Ctrl-xo(other-window)
-
-
此指令是用來選擇所欲使用的視窗。注意,此``o'' 是英文字的``o'',而非數字的``0''。
-
-
Ctrl-x0(delete-window)
-
-
將目前遊標所在的視窗刪除。提醒你們注意,此``0'' 是阿拉伯數字的 ``0''。
-
-
Ctrl-x1(delete-other-window)
-
-
保留目前遊標所在的視窗,其他的視窗所有刪除。
-
視窗的大小是有限的,但緩衝區的內容卻常常超過視窗所能顯示的範圍。接下來就是要告訴各位,如何在有限的空間中,以窺緩衝區的全貌。 想要在視窗的侷限下,洞悉緩衝區的全貌,其最基本動做就是捲動螢幕。所謂螢幕的捲動,就是螢幕上下左右的移動。除了捲動螢幕以外,還需考慮螢幕的清除。在那些情形之下要清除螢幕呢?例如,遠方送來的 message,在螢幕的顯示久久不退; 系統送來的訊息也在螢幕上不會消失。這些狀況的發生,都值得將螢幕作清除且從新顯示的動做。如下就來看看這些相關的指令。
-
-
Ctrl-l(recenter)(清除螢幕)
-
-
清除螢幕且從新顯示螢幕。
-
-
使螢幕上下捲動
-
-
Ctrl-v(scroll-up)(向上捲動螢幕一列)
-
-
向上捲動螢幕,且將目前螢幕的最後二列作爲捲動後螢幕的前二列。
point
出如今螢幕的第一列。
-
-
Ctrl-un Ctrl-v (向上捲動螢幕n 列)
-
-
螢幕向上捲動
n
列。若指定捲動的列數
n
,不超過
point
在此螢幕上所在的列數,捲動後的
point
仍會留在原處不動,不然
point
移至螢幕的第一列。
-
-
Meta-v(scroll-down)(向下捲動螢幕一列)
-
-
向下捲動螢幕,且將目前螢幕的前二列作爲捲動後螢幕的後二列,
point
出如今螢幕的最後一列。
-
-
Ctrl-un Ctrl-v(向下捲動螢幕n 列)
-
-
螢幕向下捲動
n
列。若向下捲動的列數
n
,不超過
point
在此螢幕所在位置如下的列數, 捲動後的
point
仍會留在原處不動,不然
point
移至螢幕的最後一列。
-
-
Meta< (beginning-of-buffer)(螢幕卷至緩衝區的最前端)
-
-
(beginning-of-buffer)將螢幕卷至緩衝區的最前端,point也移至第一列。
-
-
Meta>
(
end-of-buffer
)(螢幕卷至緩衝區的最尾端)將螢幕卷至緩衝區的最尾端,
point
也移至最後一列。
-
-
Ctrl-ESC-v(scroll-other-window)
-
-
前面六個捲動螢幕的指令,都是針對遊標所在位置的視窗而言,若要捲動其它的視窗,則必需使用 ``Ctrl-ESC-v''。``Ctrl-ESC-v'' 指令是用來捲動遊標所在位置下一個視窗的螢幕。因此,若是開啓了兩個視窗,能夠使用此指令來參考非遊標所在位置的緩衝區資料。此指令方便之處在於,能夠省略移動遊標的步驟,就能夠捲動其它的視窗。 若是今開啓了 A與B二個視窗,遊標在視窗A處,以``Ctrl-ESC-v'' 能夠捲動視窗B。若是開啓二個以上的視窗,``Ctrl-ESC-v'' 指令所捲動的視窗,就必需看那一個視窗最接近遊標所在的視窗了。
-
-
使螢幕左右捲動
-
-
Ctrl-x<(scroll-left)
-
-
螢幕向左捲動。
-
-
Ctrl-x>(scroll-right)
-
-
螢幕向右捲動。
-
-
上下移動遊標
-
-
Ctrl-p或↑(previous-line)
-
-
↑Ctrl-p能夠使遊標向上移動一列。如有設定功能鍵,則能夠用來移動遊標。
-
-
Ctrl-un Ctrl-p
-
-
使遊標向上移動n 列。
-
-
Ctrl-n或↓next-line)Ctrl-n能夠使遊標向下移動一列。如有設定功能鍵,則能夠用↓ 來移動遊標。
-
-
Ctrl-un Ctrl-n
-
-
使遊標向下移動n 列。
-
-
-
5.Emacs的基本編輯指令
前面的四個章節已經把EMACS的環境與架構作了扼要的介紹,如今開始討論 EMACS作爲編輯器(editor)所能提供的服務。
如何載入檔案與儲存檔案
使用編輯器最基本的需求,就是要能載入檔案以便編輯。如今就先來看看 EMACS是如何處理檔案的載入。EMACS載入檔案的方法很簡單,只要在鍵入"Ctrl-xCtrl-f" 之後,再利用 minibuffer 輸入所要編輯的檔名便可。檔名的輸入能夠與 completion 相互搭配。鍵入 ``Ctrl-xCtrl-f'' 命令之後,在 mininbuffer 處輸入已存在硬碟的檔案, EMACS會執行以下的過程:
-
-
產生一個新的緩衝區。
-
-
將所欲編輯檔案的內容,拷貝至緩衝區內。
-
-
將緩衝區的內容顯示出來,以便編輯。
這整個事件的過程,在 EMACS 的編輯系統中稱爲「訪問檔案」( visiting file )。雖然載入檔案的方法很簡單,但仍有幾件事情值得討論的,現說明以下:
-
-
鍵入
``Ctrl-xCtrl-f''
後,
echoarea
會顯示目前緩衝區的目錄,此時若編輯檔案的目錄與
echoarea
所顯示的目錄相同,可逕在其後輸入檔名便可。
-
-
若檔案所在的目錄與目前緩衝區的目錄不一樣,輸入檔名的方法有以下幾種:
-
-
檔案在同一個機器上的作法:
-
-
無視 echoarea 所顯示的目錄,由使用者從新輸入檔名。
-
-
鍵入新檔名的方法,是在
echoarea
顯示目錄的最後方鍵入
``/'',``/''
表明,忽略
``/''
以前面的路徑,新的路徑從
``
的路徑必須鍵入絕對路徑(
absolutefile name
)。現舉一實例說明。
Findfile: ~/work/emacs/emacs.tex
所要編輯的檔案在
~/work/doc/text.tex
此時輸入正確檔名的作法以下所示:
Findfile:~/work/emacs/emacs.tex//~/work/doc/text.tex
-
-
以
EMACS
提供的刪除功能,將沒必要要的字刪除以後,
-
-
再輸入正確的資料.除非顯示的目錄與所欲編輯的目錄相差無幾,使用刪除的方法纔有意義,不然不如放棄所顯示目錄,從新開始新的生涯纔是正途。至於如何刪字,會在 5.2.5一節中說明,此處就不贅言。
-
所欲編輯的檔案,不在目前所在的機器上的作法,以下所示:前已述及
EMACS
能夠
FTP
的方式來編輯遠方的檔案,但
EMACS
是如何以
FTP
的方法來編輯遠方 檔案呢?想要編輯遠方的檔案,只要給予正確的語法,
EMACS
就會根據其語法來決定是否要使用
FTP
來編輯此檔案了。其語法很簡單,只有
/host:filename
而已。如何來使用其語法呢? 由其語法可知,其語法是由四組元素所組成的字串,包括二組子字串(
host
和
filename
)以及二個符號(
/
和
:
)。在
minibuffer
處輸入
/
後,緊接給予檔案所在的機器名稱(
host
),在其後當即給予
``:''
,在
``:''
後則輸入所欲編輯檔案,整個訪問檔案的過程就完成。注意此四組資料間,不能夠留有任何的的空白。現舉一實例子來講明之。
Findfile:~/work/emacs.tex//hsko@gate.sinica.edu.tw:~/work/text.tex
-
-
鍵入``Ctrl-xCtrl-f'' 當 echoarea 顯示出目前緩衝區
-
-
的目錄後,只給予
RET
而別無它物時,
EMACS
以目前緩衝區所使用的檔案爲預設檔案。
-
-
鍵入
``Ctrl-xCtrl-f''
後,忽然改變心意,想知此目錄之外其它目錄的檔名,除了使用
``Ctrl-xd''
(使用目錄的編輯指令-
dired
)指令外,還能夠利用現有的目錄名稱來獲得想要的訊息。其做法是直接修改
echoarea
所顯示的目錄,直到所要的目錄出現後,鍵入
RET
,此時會另開啓一個視窗來顯示出此目錄下的全部檔名。若想操做這些檔案,其操做方式與運做
Dired
的方式相同。若對
Dired
的印象已經模 的人,請參閱
3.2
節。
-
以上是介紹檔名的輸入方式。在編輯資料的同時,是否能夠輕易查得目前所在的目錄?
"Meta-x pwd"
指令能夠知足這種需求。鍵入
"Meta-x pwd"
後,
EMACS
會假借
echoarea
將目前所在的目錄顯示出來。
-
以上談的都是EMACS輸入檔案的方式,但EMACS又是如何爲其緩衝區命名的呢?其實使用者並不須要爲緩衝區命名,由於 EMACS會自動給予緩衝區合適的名稱。EMACS爲緩衝區的命名,能夠從 modeline上得知。
-
EMACS
命名緩衝區的方式是根據所鍵入的檔案名稱而來,它捨棄了全部的目錄名稱只保留編輯檔案的檔名。因此若全名爲
``/user/work/emacs.tex''
的檔案,其緩衝區的名稱則爲
``emacs.tex''
。除了將檔案從硬碟直接載入緩衝區外,在編輯檔案的同時,有時須要參考其它的檔案,甚至須要引進其它的檔案到目前所使用的緩衝區內。
EMACS
的
``Ctrl-x i''
指令,就是讓使用者能隨時引進其它的檔案到目前的緩衝區內。
``Ctrl-xi''
的
``i''
是
insert
的意思,相信瞭解意思後,對於該指令應有較深入的印象,不然怎有知已知彼,百戰百勝之說呢? 如下是
EMACS
有關檔案載入指令的整理:
-
-
Ctrl-xCtrl-f(find-file)
-
-
Ctrl-xi(insert-file)
-
-
Meta-xpwd
-
文件編輯完後,最重要的事情就是要能將其保留下來。如下就來談談文件儲存的方法。檔案儲存不外乎將緩衝區的內容以原名或易名存回磁碟;此儲存方式能夠選擇一次存一個檔案或一次存數個檔案;最後的考量是存完檔案後是否要直接離開
EMACS
。下面就來看看
EMACS
所提供的相關指令。
-
-
存檔但不離開EMACS
-
-
Ctrl-xCtrl-s(save-buffer
-
-
將目前緩衝區的內容,存回磁碟中。存回的檔案名稱與緩衝區的名稱相同 。此指令只對目前所使用的緩衝區作存檔的動做。若緩衝區的內容未有任何的變更則 echoarea 會顯示以下的文字:(Nochanges need to be saved)
-
-
Ctrl-xCtrl-w(write-file)
-
-
此指令與上一個指令類似,不一樣之處在於能夠使用與緩衝區不一樣的檔案名稱存檔。。換言之,可另行指定存回磁碟的檔名。鍵入
``Ctrl-xCtrl-w''
後,
echoarea
會顯示出目前緩衝區所在的目錄, 此時,使用者可根據須要輸入檔名。若不輸入任何檔名只鍵入
RET
,系統仍會將緩衝區內的資料存回原先訪問的檔案中。此指令也只對目前所使用的緩衝區作存檔的動做。
-
-
Ctrl-xs(save-some-buffers)
-
-
此指令可用來儲存全部被修改過的緩衝區。使用此指令時,
echoarea
除了顯示檔案名稱外,還會在檔名以後出現 (
y,n, !, ., q, C-r or C-h
)這些訊息是提供給使用者作參考的。如今就告訴使用者這些訊息所表明的意義。
-
-
y
-
-
贊成對 echoarea 所顯示的緩衝區存檔,進一步徵詢其它檔案是否存檔的意見。
-
-
n
-
-
放棄對 echoarea 所顯示的緩衝區存檔,但徵詢其它檔案是否 存檔的意見。
-
-
!
-
-
贊成對 echoarea 所顯示的緩衝區存檔且一併對其它的緩衝區存檔,此時再也不一一徵詢其它檔案是否存檔的意見。
-
-
.
-
-
贊成對 echoarea 所顯示的緩衝區存檔,但放棄對其它未存檔的緩衝區存檔,且直接離開此存檔的狀態。
-
-
q
-
-
離開存檔的狀態而不執行任何存檔的動做。
-
-
C-r
-
-
能夠此指令流 目前所要儲存的檔案內容,當離開此流 狀態即回覆存檔的模式,系統會再度詢問與存檔有關的訊息。
-
-
C-h
-
-
對於以上的選項如有不明白的地方,能夠此功能查閱其意思。
-
-
存檔後直接離開
EMACS
-
-
Ctrl-xCtrl-c
(
save-buffers-kill-emacs
)此指令允許用者在決定是否將緩衝區的內容存檔後,當即離開
EMACS
。此指令其實是先執行
``save-some-buufers''
的動做再離開
EMACS
。
-
討論完了載入與儲存檔案的功能以後,相信已經迫不急待想要知道如何編輯一份心目中想要的文件。如今就是介紹如何編輯檔案的時候了。
Emacs的基礎編輯指令
編輯器作些什麼事呢?如今先談談編輯器的基本功能,至於編輯器的進階功能則在下一章討論。此處所談的基本或進階的功能,所指的都是 EMACS能夠提供的功能,所區分的基本和進階也只是爲了討論上的方便而已。
-
所謂的編輯器就是用來編輯文件的器具。一張紙與一支筆,就能夠知足文件的編輯,這也是最簡單且最原始的編輯器。將紙筆產生文件的動做以電腦來代步,就是電子編輯器(如下簡稱編輯器)主要的功能,也是本文所要討論的編輯器。
-
文件的編輯不外乎文件的鍵入、遊標的移動、文件的搬移與刪除以及文件資料的找尋與取代等等。現將 EMACS可提供的基本編輯功能簡列以下,其詳細的用法會在如下的各節中一一敘及。EMACS所能提供的基本編輯功能以下:
-
-
字元輸入與顯示在螢幕上的方式
-
-
字元的顯示方式,可以使用插入法(insert)或覆蓋(overwrite)的方法。
-
-
除了通常的字元(ASCIICharacter)外,還能夠顯示特殊字元
-
-
(SpecialCharacter)以及任何八進位超過200的字元。
-
-
文件在螢幕上所能顯示的範圍。
-
-
point(cursor)的移動方式(move point)
-
-
point 能左右移動一個或數個字元(character)
-
-
point 能左右移動一個或數個字(word)
-
-
point 能移至一列的開頭或結尾
-
-
point 能上下移動一列或數列(line)
-
-
point 的設定,使遊標能上下移動至指定的欄位
-
-
point 的移動能以頁爲單位(page)
-
-
point 能至螢幕的前端或尾端
-
-
point 能移至緩衝區的前端或尾端
-
-
顯示緩衝區大小與 point 所在的位置
-
-
刪除螢幕上所顯示的文件
-
-
向左或向右刪除一個字元(character)
-
-
向左或向右刪除一個字(word)
-
-
刪除遊標所在位置之後的全部文件
-
-
刪除一個區塊的文件(region)
-
-
刪除的文件能夠再使用(yank)
-
-
文件的搬移與拷貝(moveand copy)
-
編輯器具有以上的功能,就能夠編輯出想要的文件。如今就來看看如何在EMACS所提供的編輯環境,來編輯出想要的文件。
在Emacs中如何加入與顯示文件
EMACS容許輸入文件時,將資料直接輸入在 point 所在位置的正前方,此方法稱爲 insertmode;或將輸入的資料以覆蓋的方式取代 point 所在位置的字元,此方法則稱爲overwritemode。現舉一實例來講明 insertmode 與overwritemode 的異同。
-
-
字串food, point 所在位置爲d處,此時的狀態爲insertmode。
-
-
在 point 所在的d處鍵入t,原字串變爲footd。
-
-
字串food, point 所在位置爲d處,此時的狀態爲overwritemode。在 point 所在的d處鍵入t,原字串變爲foot。
-
EMACS對輸入模式的預設值是insertmode,若想將模式轉換成overwritemode,指令 ``Meta-x overwrite-mode RET'' 可知足此一需求。若想恢復insertmode,只需再使用一次``Meta-x overwrite-mode RET''就能夠了。當輸入模式轉爲 overwritemode 時,螢幕下方的modeline 會顯示``Ovwrt''的訊息,用以提示目前是使用overwrite的模式。指令 ``Meta-x overwrite-mode''是用來轉換insertmode 與overwritemode。在此前提下,原爲insertmode ,經轉換則爲 overwritemode。反之,若原爲overwritemode 則轉換成insertmode。
-
EMACS的overwritemode 只針對從鍵盤輸入的文件有效,若文件不是從鍵盤輸入,而是以別的方式產生的,則一概失去overwrite的效用。例如,拷貝而來的文件或以``Ctrl-x i'' 得來的文件,EMACS一概使用insertmode。
-
除了insert與overwrite的顯示方法外,EMACS還容許使用者輸入一些從鍵盤上沒法輸入的字,那就是一些控制碼和八進位超過 200的字元。要輸入這些特殊的文字時,只要在這些字的前方加上 ``Ctrl-q''便可。例如,要輸入分頁碼(formfeed,ASCIICtrl-L,octalcode 014),則輸入 ``Ctrl-qCtrl-l'' 便可。此時螢幕會出現C此時螢幕會出現^L的符號。當輸入文件的長度,超過EMACS視窗寬度所能顯示的範圍,EMACS對此情形的處理以下所示:
-
-
若文件太長鬚要換列時,在換列處鍵入
RET
,其後的文字會自動轉到下一列且以第一個欄位爲新列的起始點。若其後沒有文件而鍵入
RET
,遊標會會停在下一列的第一個欄位。
-
-
不理會文件是否會超過視窗的寬度,也就是不鍵入
RET
而繼續輸入文字。
EMACS
會自動在視窗的最後加上
``\''
,而將其他的文字移至下一列;若下一列仍是沒法顯示出全部的文字,會在此列的最後再加上一個
``~
續將多餘的文字移至下一列。
EMACS
就是不斷重複如此的動做,直到全部的文字都能徹底顯示出來爲止。所表明的意思與鍵入
RET
並不相同。鍵入
RET
表示從新使用一個新列;不鍵入
RET
而令
EMACS
自動加入所產生的文件,仍表明著同一列,只是這一列太長,
EMACS
沒法以其視窗的寬度來一次窮盡,必須分爲數次來表示。
-
-
不鍵入
RET
,也不使
EMACS
自動產生,而使超過螢幕寬度 的部份暫時隱藏起來。
EMACS
處理這種情形,是在視窗的最後加上一個
``$''
。
``$''
表示其後的內容在視窗上暫時看不到,但仍安在緩衝區內。
EMACS
的基本預設是自動加入
``\''
。要使多餘的文字隱藏起來,必須設定
``truncate-lines''
變數的值爲正值。變數設定的方法請參考
4.4
節。
4.4
節曾談過一個視窗能夠分紅左右二個小視窗,此視窗能夠作水平的捲動,此情形下的視窗在處理太長的列時,就是將
truncate-line
變數的值設成正值,使超過寬度的文件隱藏起來。
-
前面所談的都是「文字」的插入方式,但如何插入一個「非文字」的空白列呢?在編輯的過程當中,若想在某列以前加入一個新列,只需將遊標移至此列的最前端 ,隨後再按下
RET
便可。此時
EMACS
會在遊標所在處的前一列,加入一空白列。
EMACS
爲什麼要將空白列加在遊標以前而不是遊標以後呢?由於將空白列加在遊標以前,有一個最大好處,就是能夠很輕易的在緩衝區的最前端加入一個空白列。 此時所鍵入的
``RET''
,表明著
newline
。若不鍵入
RET
,也能夠 使用
EMACS
所提供的
Hotkey
,也就是
Ctrl-j(tex-terminate-paragraph)
來得到新的一列。
point的移動
文字的鍵入及顯示是編輯過程不可或缺的。除此以外,移動遊標到適當的位置,也是編輯過程不可缺的功能。如今就來看看在EMACS下如何移動 point 或可稱爲如何移動遊標。移動 point 也就是移動遊標,由於 point 是透過遊標來顯示的。因此在本文會將遊標與 point 交互使用。遊標移動不外乎以固定的單位,將其作上下左右的移動。此固定的單位多是字元(character)、字(word)、列(line)或頁(page)。如今就來x看看如何將遊標以這些單位來移動。
-
-
左右移動一或數個「字元」(character)
-
-
Ctrl-f(forward-char)
-
-
遊標往前(右)移動一個字元。
-
-
Ctrl-un Ctrl-f
-
-
(Ctrl-un Meta-x forward-char) 遊標往前(右)移動n個字元。
-
-
Ctrl-b(backward-char)
-
-
遊標往回(左)移動一個字元。
-
-
Ctrl-un Ctrl-b (Ctrl-un Meta-x backward-char)
-
-
遊標往回(左)移動n個字元。
-
-
遊標左右移動一或數個「字」(word)
-
-
Meta-f(forward-word)
-
-
遊標往前(右)移動一個字。
-
-
Ctrl-un Meta-f (Ctrl-un Meta-x forward-word)
-
-
遊標往前(右)移動n個字。
-
-
Meta-b(backward-word)
-
-
遊標往回(左)移動一個字。
-
-
Ctrl-un Meta-b (Ctrl-un Meta-x backward-word)
-
-
遊標往回(左)移動n個字。
-
-
遊標移至一列的「最前端」或「最尾端」
-
-
Ctrl-a(beginning-of-line)
-
-
遊標移至一列的最前端。
-
-
Ctrl-e(end-of-line)
-
-
遊標移至一列的最尾端。
-
-
遊標上下移動「一列」或「數列」(line)
-
-
Ctrl-n(next-line)遊標向下移動一列。
-
-
下移一列的遊標其所在的水平位置,與移動前的水平位置相同。若遊標在文件的最後一列時,
Ctrl-n
會自創新列再移到此新列的第一個欄位。
-
-
Ctrl-un Ctrl-n(Ctrl-u n Meta-x next-line)遊標向下移動n列。
-
-
Ctrl-p(previous-line)遊標向上移動一列。
-
-
上移一列的遊標其所在的水平位置,與移動前的水平位置相同。若遊標已在文件的第一列時,再使用 ``Ctrl-p'' 時 echoarea 會顯示以下的訊息:Beginningof buffer
-
-
Ctrl-un Ctrl-p (Ctrl-un Meta-x previous-line)遊標向上移動 n列。
-
-
上下捲動緩衝區
-
-
Ctrl-v(scroll-up)
-
-
向上捲動緩衝區,且將目前視窗所顯示的最後二列,作爲捲動後的前二列,
point
出如今視窗上的第一列。
EMACS
如此作只是讓使用者有一個承先啓後的感受罷了。
-
-
Ctrl-un Ctrl-v
-
-
緩衝區向上捲動
n
列。數字
n
若小於目前
point
在此視窗所在位置的列數,捲動後的
point
位置,仍留在捲動前的同一列上;不然
point
移至視窗的第一列。
-
-
Meta-v(scroll-down)
-
-
向下捲動緩衝區,且將目前視窗上的前二列作爲捲動後的後二列,此時的
point
出如今螢幕的最後一列。
-
-
Ctrl-un Ctrl-v
-
-
緩衝區向下捲動
n
列,若數字
n
小於
point
在此視窗如下的列數,捲動後的
point
位置,仍留在捲動前的同一列處。不然
point
移至視窗的最後一列。
-
-
左右捲動緩衝區
-
-
Ctrl-x<(scroll-left)緩衝區向左捲動。
-
-
Ctrl-x>(scroll-right)緩衝區向右捲動。
-
-
遊標移至緩衝區的前端尾端
-
-
Meta<(beginning-of-buffer)
-
-
將遊標移至緩衝區的最前端, point 也移至視窗的第一列。
-
-
Meta>(end-of-buffer)
-
-
將遊標移至緩衝區的最尾端,
point
也移至視窗的最後一列。
-
-
頁數的移動
-
-
還記得討論``Ctrl-q'' (quoted-insert) 時,提過度頁的控制碼。有了分頁的設定,天然會有以頁數作爲移動遊標的單位了。
-
-
Ctrl-x[ (backward-page)
-
-
將
point
移至上一頁分頁指標(
^L
)以後且緊鄰
^L
。若
point
已緊鄰在
^L
以後了,則會略過此
F
在
^L
以後了,則會略過此
^L
到上一個
^L
以後。
-
-
Ctrl-x] (forward-page)
-
-
將
point
移至下一頁分頁指標(
^L
)以後且緊鄰
^L
。若
point
已緊鄰在
^L
以後了,則會略過此
F
在
^L
以後了,則會略過此
^L
到下一個
^L
以後。
-
-
Ctrl-xCtrl-p (mark-page)
-
-
以頁爲單位作上記號以後,再配合其它的指令對此頁作處理。此指令相似
markregion
(
5.4
節會討論其意思)。例如
Ctrl-xCtrl-p Ctrl-w
是將遊標所在的那一頁刪掉。此指令能夠配合
numericarguments
(
5.3
節會討論其意思)使用。
-
除了以移動遊標的方法來遊走緩衝區外,EMACS還提供一個能夠直接將遊標移到指定的行列。所要到達的目的地,不管是以字元數或列數爲移動的單位,其起算點都是以緩衝區的第一列第一個欄位爲起算的標準。如下就是此方法的介紹。
-
-
Meta-xgoto-char RET
-
-
鍵入此指令後再按下
RET
,
echoarea
會出現
``
遊標移動的總字元數便可。再一次的提醒各位,字元的計算是以緩衝區的第一列的第一個字元爲起算點。例如,在
``Gotochar:''
給予
100
的數字,則遊標會從緩衝區的第一字元移動到第
100
個字元。
-
-
Meta-xgoto-line RET
鍵入此指令再按下
RET
後,
echoarea
會出現
``
,在其後輸入想要遊標移動的列數便可。再一次的提醒各位,列數的計算是以緩衝區的第一列爲起算列。例如,在
``Gotoline:''
給予
100
的數字,則遊標會從緩衝區的第一列開始往下移動
10
列。
何謂數值引數
在上一小節 point 移動一文中不斷的看到Ctrl-un ,它是什麼呢?它是 EMACS的數值引數(numericargument),但數值引數又是什麼的呢?
-
數值引數適用於全部EMACS的指令。它的用途可分紅如下數類:
-
-
對某一指令作重複執行的動做
-
-
用法:Ctrl-un command 或
-
-
Meta-n command
-
-
說明:
-
-
n表明重複的次數;command表明要重複執行的指令。
-
-
若鍵盤提供Meta鍵(我的電腦能夠使用ESC鍵),則Meta鍵是使用數值引數最方便的方法。
-
-
n若爲負值的數字,則表示以反方向運行指令。
-
-
例子:
-
-
n爲正值
-
-
Ctrl-u5 Ctrl-f 或Meta-5Ctrl-f 表示遊標往前(右)移動5個字元。
-
-
n負值
-
-
Ctrl-u-5 Ctrl-f 或Meta-5Ctrl-f 表示遊標往回(左)移動5個字元。
-
-
重複動做四次
-
-
用法:
-
-
說明:
-
-
Ctrl-u
後面所接的不是數字而是字元,它表明著一個
Ctrl-u
重複指令的動做爲一個四的倍數。換言之,一個
Ctrl-u
執行四次,二個
Ctrl-u
則執行
16
次,以此類推。
-
-
例子:
-
-
Ctrl-uCtrl-f
-
-
表示遊標往前移動4個字元。
-
-
Ctrl-uCtrl-u Ctrl-f
-
-
表示遊標往前移動16個字元。
-
-
利用引數變數自動鍵入相同的「字元」
-
-
用法:Ctrl-un char 或
-
-
Meta-n char
-
-
說明:省略n與否,表明不一樣的意義
-
-
Ctrl-u
後緊接著數字與字元,表示重複字元
n
次。
-
-
Ctrl-u
後面不接數字而緊接字元,表示重複字元四次。
-
-
例子:
-
-
Ctrl-u10 r 或Meta-10r 則螢幕上出現10個r。
-
-
Ctrl-ur 或Meta-4r 則螢幕上出現4個r。
-
-
使用引數變數自動產生相同的「數字」的方法
-
-
用法:Ctrl-un Ctrl-u n 或Meta-n Ctrl-u n
-
-
說明:
Ctrl-u
後面有二個
n
,第一個
n
表重複的次數,第二個
n
表重複的數字。第二個
n
以前必定要再給予一次
Ctrl-u
,若不給第二個
Ctrl-u
,系統會覺得重複
nn
次。
-
-
例子:Ctrl-u5 Ctrl-u 4 或Meta-5Ctrl-u 4 螢幕上出現5 個4。Ctrl-u5 4 ,則系統覺得重複54次。
-
數值引數的用途很廣,且適用任何一個EMACS的指令,當須要重複執行某一指令的動做時別忘了它。有人說電腦最強大的功能之一,就是能不厭其煩的執行重複的事情。如下有關EMACS指令的介紹,再也不特別強調numericarguments,但並不表示它就此而消失了,由於數值引數適合全部的指令,因此沒有必要每次都重複強調。只需記得,須要時可隨時使用numericarguments。
如何獲得與 point 有關的訊息
前面談過EMACS移動 point 的方法,如今介紹探知 point 位置的方法。point 所在的欄位、列數與頁數等訊息,可從整個或部份的緩衝區而得知。如今就開始討論 point 位置。
-
-
Meta-xwhat-page
-
-
告知 point 所在的頁數與列數。若緩衝區沒有以分頁(^L)符號分頁,則 point 所在的頁數永遠爲第一頁。若 point 在第一頁的第 200列,其顯示的訊息以下:Page1, line 200
-
-
Ctrl-xl (count-lines-page)
-
-
``Meta-x what-page''
用來告知
point
所在位置的頁數與列數,但沒法從中得知此頁的總列數。若想知道某一頁的總列數,必需靠
Ctrl-xl
來得知。此指令除了得知某頁的總列數外,同時還知道
point
所在位置以前與以後的尚有的列數。使用此指令時,
echoarea
會出現以下的訊息:
Pagehas 23 lines
(
20+ 4
)
echoarea
出現的第一個數字爲總列數,括號內的二個數字分別表明
point
所在處以前與以後的列數。括號內的兩個數是以
point
爲分界點而得來的。因此當
point
不出如今某一列的第一個欄位時,括號內二個列數的總和會比總列數多出一列,由於
point
所在的列被重複計算了兩次
.
此指令在決定如何分頁時能夠幫上大忙,由於能夠輕易得知
point
先後的列數。
-
-
Meta-xwhat-line
-
-
告知 point 在緩衝區的列數。若此時 point 在第200列,則 echoarea 會出現以下的訊息:
-
-
Ctrl-x=
-
-
指出遊標所在欄位的字元資料。這些資料包括字元的八進位碼、字元所在的位置佔整個緩衝區的比例(此比例以字元爲基本單位)以及字元所在的欄位。例如以此指令來得知此 ``a''字元的資料, echoarea 會出現以下的資訊:Char:a (0141)point=23905of 38784 (62) column 19 臨時想知某一字元的八進位,也不妨試試此法。
-
-
Meta-=
-
-
用來得知某特定區域(region)的總列數與總字元數。至於如何設定區域會在 5.3節討論。以此指令得知的結果以下所示:Regionhas 200 lines, 2000 characters
-
-
Meta-xline-number-mode
-
-
以上所討論的指令,只在使用指令時纔會顯示想要的訊息,訊息的出現是沒法長存的。 基於此,EMACS提供了一個可以使訊息永久存在 line的方法,那就是使用``Meta-x line-number-mode''。此指令能夠在 modeline 上顯示 point 所在的列數,直到離開此狀態或離開此視窗纔會消失。若想使每次進入EMACS都能顯示列數,最好的方法是在 ``.emacs''檔加上以下的敘述:(setqline-number-mode t) 如此一來,只要進入EMACS,modeline 會自動將列數顯現出來。至於自動顯示欄位的方法,目前的 EMACS還沒有提供此服務。
文件的刪減
修改文件不外乎將原有的文件刪除後,再加入新的內容;或將現有的資料作從新的排列組合。現先討論文件的刪除部份,文件的重組就留待 5.4節再進行討論。
-
EMACS中的刪除有兩種形式,一種是指文件的 killing,另外一種則指文件的deletion。在EMACS中所謂的 killing 是指將文件從目前的緩衝區移到一個稱爲kill-ring kill-ring 爲一個變數的地方去。文件在緩衝區中是消失了,但卻儲存在 kill-ring,variable這一個變數中。EMACS能夠有許多的緩衝區,但卻只有一個 kill-ring 的儲存變數。也就是說,多個緩衝區彼此共享一個 kill-ring,並且也只有一個 kill-ring。EMACS所設計共享的killing-ring的用意是讓被遺棄的文件能夠找回,並且各緩衝區彼此也可藉由 killing-ring來創建一個互通的管道。所謂的互通就是把甲緩衝區的東西給乙,反之,也可把乙緩衝區的東西給甲。此模式在 EMACS中就是透過 killing-ring 來完成。所以,想從甲緩衝區中獲得某些文件給乙緩衝區,只要將甲緩衝區的文件放入 kill-ring 中,乙緩衝區就能夠至此共享的 kill-ring 中將文件取出。如此一來,就能夠共享資源了。
-
另外一種模式的刪除,在
EMACS
中稱爲
deletion
。此種刪除,並不將刪除後的資料放入
kill-ring
中,而是將刪除的文件遺棄。此種情形的刪除是沒法失物復得的。以
deletion
刪除的資料,能夠鍵入
-
Ctrl-xu(undo)來找回。使用一次``Ctrl-x u,恢復前一個指令的景象;使用二次 Ctrl-xu,則恢復前二個指令的容貌,如此周而復始的使用 Ctrl-xu ,可恢復更改前的全貌。至於``Ctrl-x u'' 更詳細的說明會在 5.5節進一步討論。
-
前已說過,不放入 kill-ring 的指令稱爲 deletion 的指令。EMACS刪除字元、空白字元以及空白列的指令都不放入 kill-ring 中的。具體說來就是,Ctrl-d、DEL、Meta-\、Meta-SPC與Ctrl-xCtrl-o 等指令。現就爲各位說明這些指令。
-
文件的修改不是重組資料就是刪減與新增資料,新增資料已論述過了,而重組資料即將在 5.4節登埸,如今就開始談文件的刪減。刪除文件也不外乎刪除一個字元、一個字、一行或一個區塊;刪除的方向能夠選擇左右刪除的方式。如今就來看看如何以EMACS所提供的指令,來作刪除的工做。此處將刪減的指令分紅 deletion 和 killing而大類。
-
-
屬於 deletion 的指令集
-
-
刪除「字元」(character)的方法
-
-
Ctrl-d(delete-char)
-
-
刪除 point 所在位置的字元。
-
-
DEL(delete-backward-char)
-
-
刪除 point 以前的字元。此指令與 Ctrl-d爲最基本的刪除指令,只要耐心夠,任何的刪除均可以此二個指令完成。
-
-
刪除spaces和tabs的方法
-
-
Meta-\(delete-horizontal-space)
-
-
輸入資料時,常會不自覺的輸入無心的空白(
space
)和
tab
。當合並上下列而爲一列時,也常會出現
space
或
tab
從中做梗。爲此
EMACS
提供了
Meta-\
的指令,讓使用者能夠很容易將沒必要要的
space
和
tab
刪除。固然其它的刪除指令,也能夠將不須要的
space
和
tab
刪除,此指令只是更方便刪除
space
和
tab
而已。
Meta-\
可刪除
point
先後全部的
space
和
tab
。例如:
abcdef g
,此時的遊標在
f
與
g
之間。鍵入了
Meta-\
其結果以下所示:
abcdefg
-
-
Meta-SPC(just-one-space)
-
-
刪除
point
先後的
space
和
tab
時,若但願留下一個
space
或
tab
作爲彼此的分隔,就必須使用
``Meta-SPC''
來完成了。例如:
abcdef g
,此時的遊標在
f
與
g
之間。鍵入了
``Meta-SPC
其結果以下所示:
abcdef g
-
-
屬於 killing的指令
-
-
刪除「字」(word)的方法
-
-
Meta-d(kill-word)
-
-
此指令往前(右)刪除
point
所在位置的字。其所刪除字的範圍端賴
point
所在的位置而有不一樣。若
point
在一個字的第一個字元,則會刪除此字;若
point
在此字的其它位置,則刪除
point
所在位置及其以後的全部字元,包括
point
所在位置的字元。 例(一):
Thisis a test.
遊標若在
test
這個字的
t
處,使用此指令的結果以下:
Thisis a .
例(二):
Thisis a test.
遊標若在
test
這個字的
e
處,使用此指令的結果以下:
Thisis a t.
若想刪除一個以上的字,能夠使用
numericargument
。
-
-
Meta-DEL(backward-kill-word)
-
-
此指令往回刪除 point 所在位置的字。其所刪除字的範圍端賴 point 所在的位置而有不一樣。若 point 在一個字的第一個字元,則會刪除此字以前的字;若 point 在此字的其它位置,則刪除 point 以前的全部字元,但不包括 point所在位置的字元。 例(一): Thisis a test. 遊標若在test這個字的t處,使用此指令的結果以下:Thisis test. 例(二):Thisis a test. 遊標若在test這個字的e處,使用此指令的結果以下:Thisis a est. 一樣的,回想一下numericargument 吧。
-
-
刪除列的方法
-
-
Ctrl-k(kill-line)
-
-
刪除列的指令。所刪除列的範圍,以 point 所在的位置爲準則, 以 point 所在位置爲起始點,以此列的結束爲終點。被刪除掉的文件會在視窗上留下一空白,若想將空白列也一併刪除,必需再使用一次 Ctrl-k。此時的Ctrl-k是用來刪除換列指令的控制碼。
-
-
Ctrl-xCtrl-o(delete-blank-lines)
-
-
編輯的過程當中會不經意的加入許多空白列,此種情形常發生在緩衝區的最尾端。每按下一個
RET
,就輸入了一個新列,但在緩衝區的尾端按下
RET
,此時所加入的新列並不易爲人查覺。此指令能夠將
point
所在位置「先後」的空白列刪除只留下一列。固然並不是必定要以此指令來刪除空白,
Ctrl-k
天然也能夠用來刪除空白列,也能夠將空白列以刪除區塊的方式刪除之,提供此指令只是方便知足使用者的需求而已。
-
-
刪除區塊的方法
-
-
*Ctrl-w(Kill-region) EMACS 容許刪除某一特定的區塊。要刪除區塊,必需先標示區塊,此標示的動做稱爲 mark\。如何標示區塊,就是下一節的主題。
-
EMACS對於被 killing而刪除的資料,都是放在 kill-ring 中。 kill-ring 其實只是一個變數而已,全部 killing刪除掉的文件,就是此變數的值。其已述及查閱變數值的方法,現不厭其煩的再論述一次:
-
-
鍵入
``Ctrl-hv''
後,
echoarea
處會出現:
-
-
在
Describevariable:
後輸入變數的名稱,
EMACS
會另開一個視窗來顯示此變數的值。此時所要鍵入的變數名爲
``
kill-ring
''
-
此節討論
EMACS
編輯的基本指令,有了這些指令以後,編輯的工做就不是難事了。接下來各節則討論其它的編輯功能。
何謂Yanking
將killring 的內容取出的動做,稱爲 yank。 yank 除了可 yank 最新killing的資料,也可 yank 早先 killing的內容。如今就以二種不一樣的 yank 作爲討論的對象。將最新 killing的文件從 kill-ring中取出的方法很簡單,只要使用 ``Ctrl-y'' 便可。但在 yank 時,必定要確保在 killing-ring 中存有被刪除的資料。想要 yank 最新 killing以前的文件,就較爲複雜了。所謂的較爲複雜,只是多了一個移動指向 kill-ring 變數值的程序而已。由於 yank 指令所要yank 的內容,全視指標指向 kill-ring 的位置而定。此指標通常都是指向最新放入的文件。若想 yank 其它的內容,就必需先移動指標了。
-
移動
kill-ring
指標的方法是使用
``Meta-y'' (
yank
-pop)
,但在使用
``Meta-y''
以前,必定要先使用
``Ctrl-y''
。換言之,
``Meta-y''
的使用,必定要緊跟在
``Ctrl-y''
以後。
-
``Meta-y'' 的運做是將指向 kill-ring 入口的指標,向前移動,再將``Ctrl-y'' yank 出來的資料,以此時指標指向的文件取而代之。 這就是爲什麼使用``Meta-y'' 指令以前,必定要先執行``Ctrl-y''。以 ``Meta-y'' 來移動指標,並不會影響 kill-ring 變數值的內容次序。
如何在文件中作上標記
前面有些指令是專門運做區塊的,如``Ctrl-x Ctrl-p'' 與``Ctrl-w'' 等等。但什麼是區塊呢? EMACS所言的區塊,是指從標記(mark)處到 point 所在位置間的範圍,此範圍就是區塊(region)了。換言之,區塊的範圍是指,標記所在位置之後(包括標記所在位置自己)到 point以前(不包括 point 所在的位置)的全部文件。知道區塊的定義後,接下來就介紹如何定義區塊了。
-
既然區塊是指從標記處到 point的範圍,天然設定區塊也意味著設定標記和 point。設定 point的方法很簡單,只要移動 point至目的地便可。此時的 point表明著區塊範圍的終點。至於設定標記的方法也不難,只要在想要設定標記的地方,輸入如下的任一個指令便可。
-
-
Ctrl-@(set-mark-command)
-
-
Ctrl-SPC(set-mark-command)
-
因此設定區塊的步驟以下所示:
-
-
設定區塊的始位置,也就是所謂的標記(mark)。
-
-
可以使用``Ctrl-@'' 或``Ctrl-SPC'' 任一個指令來設定標記。
-
-
設定區塊的終結位置,也就是移動遊標至區塊的尾端。
-
在標記與 point之間的範圍就是所謂的區塊。
-
爲什麼會提供二個設定標記的Hotkey呢?Hotkey是用來連結EMACS的命令,EMACS會將經常使用的命令給予一個Hotkey與之連結。此連結的Hotkey,常會受所使用的終端機而不一樣。所以有的終端機能夠使用 ``Ctrl-@'',但有的終端機則必需使用``Ctrl-SPC''。更甚者,有的終端機卻兩者都沒法使用,例如筆者以我的電腦模擬成的終端機,卻必需鍵入 ``Ctrl-2'' 才能達到設定標記的效果。EMACS能夠容許使用者從新設定所使用的 Hotkey,但這已經超過本文討論的範圍。若是沒法使用以上任何一個 Hotkey,就使用命令
-
``ESC-x set-mark-command''。
-
使用EMACS的指令(command)永遠能夠達到目的的。
-
EMACS的 point,是透過視窗上的遊標來顯示的。text-only視窗只有一個遊標,所沒法同時表示標記及 point。若想觀測區塊的前因後果,能夠 ``Ctrl-x Ctrl-x''
-
(exchange-point-and-mark)
-
將標記與point作交換,從交換的過程能夠觀察標記與 point的位置。``Ctrl-x Ctrl-x'' 所能作的事,只互換標記與 point而已。
-
那些指令是使用在區塊上呢?如下指令就是適用在區塊上的。有些是曾經提過的,有些是將要談及的,有些可只能只是列舉出來並不會在本文中被討論。
-
-
Ctrl-w(kill-region)
-
-
Ctrl-xr s(copy-to-register)
-
-
Ctrl-xCtrl-p(mark-page)
-
-
Ctrl-xCtrl-l(downcase-region)
-
-
Ctrl-xCtrl-u(upcase-region)
-
-
Meta-xfill-region
-
-
Meta-xprint-region
-
接下來討論與編輯有切身關係的搬移與拷貝。
文件的移動與拷貝
變換文件在緩衝區出現的位置稱爲搬移(在緩衝區的其它地方重複出現稱爲拷貝( Copy)。
-
前已論及放於 kill-ring 的文件,可在須要時拿出來使用,此動做稱爲 yank\indexyank 。使用 yank 的方法很簡單,只要鍵入 ``Ctrl-xy''便可。使用此方法可將某特定區塊的文件作「搬移」的動做,只是所需的步驟比較煩瑣而已。首先將要搬移的文件重複以 ``Ctrl-x k'' 的指令,將其放入 kill-ring 中,再將 point 移至文件欲搬移的位置,以``Ctrl-y'' 將其 yank 出來。
-
「拷貝」一個區塊的方法與「搬移」一個區塊的方法累同,惟一不一樣是要執行二次 yank 。第一次使用 yank,是將刪除的原文件再放回被刪除的位置,第二次使用 yank 是作拷貝的動做,也就是將 kill-ring 的文件放入要拷貝的地方。
-
以上的方法固然能夠用來作搬移和拷貝之用,但如要搬移和拷貝的文件有數十甚至數百數千列,豈不要重複 ``Ctrl-k'' 的動做數十甚至數百數千次。由於 ``Ctrl-k'' 基本上是刪除列的指令,固然刪除列的指令,能夠配合numericargument。但在使用數值引數以前還必需肯定所欲搬移或拷貝的確實列數,如此一來豈不使事情越來越複雜呢?因此,要搬移與拷貝文件最好的方法,就是使用標記與區塊。下面所談的是針對區塊的搬移與拷貝的方法。
-
不論搬移或拷貝,只要觸及區塊的使用,首要之事就是先把區塊標示出。區塊定好以後,要搬移就以
``Ctrl-w''
,將整個區塊刪除以後,再以
``Ctrl-y''
將其
yank
出來。要拷貝則以
``Meta-w''
將區塊的內容拷貝一份放在
kill-ring
中,爾後再以
``Ctrl-y''
將其
yank
出來。現說明搬移與拷貝的實際操做過程。
-
-
不設定區塊,以刪列的方式,將文件一列列先刪除後
,
再
yank
出來。此法可搬移與拷貝
kill-ring
內的文件。
-
-
重複執行``Ctrl-k''(刪除文件,可以使用numericargument)
-
-
Ctrl-y(將放置在killring 中的文件,yank 至緩衝區內。)
-
-
若作搬移的動做,只需使用一次 yank。
-
-
若作拷貝的動做,則要使用二次的 yank。
-
-
以設定區塊的方式,「搬移」區塊的文字。
-
-
Ctrl-@(設標記,也就是設定區塊的起始值)
-
-
移動遊標以便設定 point的位置(設定區塊的終點)
-
-
Ctrl-w(刪除所標示的區塊)
-
-
移動遊標至要搬移的位置(肯定文件搬移處)
-
-
Ctrl-y(將放置在killring 中的文件,yank 至緩衝區內。)
-
-
以設定區塊的方式,「拷貝」區塊的文字。
-
-
Ctrl-@(設標記(mark))
-
-
移動遊標以設定 point的位置(設定區塊的終點)
-
-
Meta-w(不刪除標示區塊的內容,將此內容拷貝至 kill-ring 中)
-
-
移動遊標至要拷貝的位置(肯定文件拷貝處)
-
-
Ctrl-y(將放置在 kill-ring 中的文件,
-
-
yank 至緩衝區內。)
-
爲了更清楚搬移與拷貝後的真實結果,現舉實例來講明。
-
實例:現有二段文件,第一段文字是作搬移與拷貝用的,第二段文字是用來接收搬移後的文字。 第一段:標記設在第一列的
A
處,而
point
設在
B
的地方。
1111111111A222222222223333333333333333333333 4444444444444444444444 55555B5555555555555555
第二段:
point
在
Y
處
00000Y00000000000000000000000000000000000000 0000000000000000000000
結果1、將第一段的文件搬移至第二段,搬移後的遊標仍在
Y
處。
1111111111B555555555555555500000A22222222222 3333333333333333333333 444444444444444444444455555Y0000000000000000 0000000000000000000000 0000000000000000000000
結果2、將第一段的文件拷貝至第二段,搬移後的遊標仍在
Y
處。
1111111111A222222222223333333333333333333333 4444444444444444444444 55555B555555555555555500000A22222222222 3333333333333333333333 444444444444444444444455555Y0000000000000000 0000000000000000000000 0000000000000000000000
執行搬移與拷貝的動做時,
EMACS
所採起的一概是
insert-mode
。此時,即便設定爲覆蓋(
overwrite-mode
),覆蓋的效果也會暫時失效。
-
區塊的範圍以標記(
mark
)爲起始值,以
point
所在位置以前的字元作結束。因此,從以上的實例能夠很清礎的看到,搬移或拷貝以後的文件會包括標記所在的字元,但不會包含
point
所在的字元。搬移或拷貝的文件會出如今
point
以前,原先全部的文件會向後移動,此時的
point
仍在移動前的字元處。
-
區塊是以標記爲開始而以 point爲終點所構成的。標記與 point所在的列,可能包含所在列的一部分,其它區塊所包含的列都是完整的一列。若搬移或拷貝的範圍,爲文件中某一個長方形的區域,那該如何來設定其範圍呢?設定好的範圍又該如何來操做呢? EMACS對於這種形狀的區域有其它的處理方式,稱爲長方形的區塊 ( rectangleregion)。
-
設定長方形(
Rectangle)
的方法與設定區塊(
Region
)的方法是同樣的,只是在理解上有所不一樣。長方形設定的方法,也是設定二個標記,此兩個標記位於長方形相對的兩個直角上。因此,設定了左上角,另外一個標記必定要設在右下角;反之,若是設定了右上角,另外一個標記就必定要在左下角了。。此所設好的長方形,
EMACS
稱爲
rectangle
。長方形與區塊的設定方法是同樣,因此單從設定標記與
point
的方式,是沒法辨識兩者的差異的。要知是使用區塊或長方形,只有等到使用運做於此範圍的指令時纔會知道。如果以刪除長方形的指令將長方形的區塊刪除時,此時刪除掉的長方形文件並不放在 通常的
kill-ring
中,而是放於別的地方。由於刪除長方形的運做方式與刪除區塊的方式不一樣,因此將長方形刪除後的內容,與放置區塊刪除後的內容分隔,以便管理。長方形運做的種類與區塊運做的種類累同,可分爲二大類,一類爲刪除與插入,另外一類則專門用來處理空白。刪除長方形能夠採起摒棄的方式 (
Ctrl-xr d
)或將其儲存於某處(
Ctrl-xr k)
,以利過後的
yank
(Ctrl-x r y
)
(
yank
-rectangle)
。刪除掉的長方形資料的保存,只能保留最新刪除的資料,因此只有最新刪除掉的長方形資料,才能夠被
yank
出來。
-
長方形區塊的運做種類,除了能將資料作刪除與搬移外,還能夠在文件的某處加入固定區域的空白。由於從事編輯時,常須要在某一區域加入一些空白(
Ctrl-xr o
)
(open-rectangle)
。例如在文件加上空白作爲邊緣(
margin
);製做圖表時留些空白;或將某一區域的文件以空白取代(
Meta-xclear-rectangle
)等等。長方形的運做與區塊的運做最大不一樣處在於,沒法直接作拷貝的動做,若要拷貝必需先刪除後再執行二次的
yank
。如今就說明長方形區域的用法。
-
-
長方形區域的 yank 方法
-
-
Ctrl-@(設定長方形區域的第一個對角)
-
-
移動 point至第二個對角處(設定長方區域的第二個對角)
-
-
Ctrl-xr k(kill-rectangle)
-
-
刪除設定好的長方形,以便 yank 使用。
-
-
移動 point到要 yank 的地方。
-
-
Ctrl-xr y(yank-rectangle)
-
-
將刪除的長方形,從儲存處取出。
-
-
永遠刪除長方形的內容
-
-
Ctrl-@(設定長方形區域的第一個對角)
-
-
移動 point至第二個對角處(設定長方區域的第二個對角)
-
-
Ctrl-xr d(delete-rectangle)
-
-
刪除設定好的長方形區域。此刪除不會儲存在某必定地方。換言之,一旦摒棄此區域,就沒法將其喚回,除非使用 undo的指令。
-
-
在長方形區域內插入空白,原文件向前(右)移動。
-
-
Ctrl-@(設定長方形區域的第一個對角)
-
-
移動 point(設定長方區域第二個對角)
-
-
Ctrl-xr o(open-rectangle)
-
-
填入空白在設定好的長方形區域內。此時區塊內的文字會自動往右移動。使用 overwritemode,原有的文件也不會被加入的空白覆蓋。
-
-
將設定的長方形區域以空白覆蓋
-
-
Ctrl-@(設定長方形區域的第一個對角)
-
-
移動 point至第二個對角處(設定長方區域第二個對角)
-
-
Meta-xclear-rectangle
-
-
將此長方形區塊內的文件以空白取代。
-
-
在設定的長方形區域內填充某一類型的字串。
-
-
此方法常可用在程式的撰寫或測試上。例如,測試``.emacs''程式時,常因測試的過程當中,須要將設定作增減的工夫,使用此方法能夠隨時將測試條件作增減。
-
-
Ctrl-@(設定要填充字串的起點)
-
-
移動 point至第二個對角處(設定要填充字串的終點)
-
-
鍵入Meta-xstring-rectangle RET ,此時 echoarea 會出現
-
-
Stringrectangle: 利用 minibuffer 鍵入要填充的字串,便可將字串填入長方形區內。值得注意的是,此時長方形的寬度由字串的寬度來決定,Ctrl-@與 point只用來決定長方形的長度。
何謂Undo
在EMACS中想要將已經作過的動做放棄,以恢復舊觀。EMACS將其稱爲 undo,如下就介紹如何 undo:
-
-
Ctrl-xu(undo)
-
-
Ctrl-\_(undo)
-
以上兩個Hotkey都是用來執行 undo 的指令。提供二個 Hotkey,是由於有些鍵盤並沒有明顯使用``Ctrl-\_''的方法,爲了彌補沒法以一個字元達到 undo 效果的鍵盤,故另行提供``Ctrl-x u'' 給沒法使用``Ctrl-\_'' 的使用者。
-
EMACS所提供的 undo,能夠連續恢復最近使用過的指令。 undo 的順序是最新使用過的指令最早被 undo ,第二次使用 undo 則恢復第二新的指令,任何指令的輸入(除了 undo 自己以外)都會使指令輸入的順序 重整, 這也同時影響 undo 的順序。
-
使用
undo
有一個限制,就是
undo
只能
undo
對緩衝區內容形成改變的指令。對於只是改變遊標動做的指令,是沒法以
undo
來恢復舊觀。若全部修改過內容的指令,都以
undo
恢復原狀後,再一次使用
undo
的指令,
echoarea
會出現以下的訊息:
nofurter
undo
information
當使用了
undo
以後,還想要在
redo
這個已被
undo
的動做時,有一個技巧能夠達成如此的效果。
-
-
首先鍵入一個不會改變緩衝區內容的指令(如遊標移動的指令),使原來
-
-
存放指令的順序因新指令的加入而改變。
-
-
再使用一次 undo 的指令,就能夠達到redo的效果了。
-
現舉一實例來講明此>視窗上現有的資料爲:Thisis a test.
-
以下爲所執行的一連串指令,括號內表示所用過的指令:
-
-
執行四次DEL,視窗顯示以下的訊息:
-
-
Thisis a 所使用的指令集以下:DELDEL DEL DEL
-
-
將遊標至字元``i''處,視窗顯示的訊息並沒有改變:
-
-
Thisis a 所使用的指令集以下:DELDEL DEL DEL
-
-
鍵入Meta-d,視窗顯示以下的訊息:
-
-
Thisa 所使用的指令集以下:DELDEL DEL DEL Meta-d
-
-
鍵入Ctrl-xu,視窗顯示以下的訊:
-
-
Thisis a 此時恢復最新被使用過指令``Meta-d''前的情況(Ctrl-xu 不爲恢復的對象),也就是步驟二的情形。此時使用的過指令集以下: DELDEL DEL DEL Meta-d Ctrl-x u
-
-
鍵入Ctrl-f,視窗仍出現與先前相同的訊息:
-
-
Thisis a 所使用的指令集則增長以下:DELDEL DEL DEL Meta-d Ctrl-x u Ctrl-f
-
-
此時能夠Ctrl-xu 恢復第一次 undo 前的情況,即步驟三的情況。視窗出現:
-
-
Thisa 由於記錄指令歷史的指標,此時己在第二個Ctrl-xu 處,但Ctrl-xu Ctrl-f 均不在 undo 的行列中,因此此時能夠再恢復一次 Meta-d前的情況。所使用的指令集以下: DELDEL DEL DEL Meta-d Ctrl-x u Ctrl-f Ctrl-x u
通常而言,每個使用過的編輯指令都有一個與之相對應的 undo 記錄。每個 undo 的記錄,都只對目前的緩衝區有效。有的指令須要一個以上的 undo 記錄來完成 undo 的動做;有的指令會先聚集一羣 undo 的記錄,當使用 undo 時,會將此聚集的結果一次展示出來。例如,單一字元運做的指令,若每次使用 undo ,只恢復一個字元則很是的不經濟,因此遇到此種情形,以集合體的方式處理是比較合理的做法。
-
-
-
6.Emacs
進階編輯指令
前面的章節談論 EMACS 的基本用法,如今討論 EMACS 進階的用法。如今先談 EMACS 的搜尋 search 與字串 string 的取代功能。
文件的搜尋
搜尋特定的字串,並不是 EMACS 所特有的功能,相信大多數的編輯器都具備如此的功能。但 EMACS 所採起的搜尋方法是,每鍵入一個字元就展開搜尋,EMACS 稱此種方式的搜尋爲 IncrementalSearch 。固然, EMACS 也提供非 IncrementalSearch} ,稱爲 NonincrementalSearch。 EMACS 對於所要搜尋的字串,還是利用 minibuffer 來輸入所欲搜尋的字串。此時,輸入 minibuffer 的搜尋字串,若全由小寫的英文字母(lowercase)組成,則 EMACS 在展開搜尋的行動時,不論字母是否有大小寫的差異,會將全部與 minibuffer 具備相同英文字母的字串都找尋出來。例如在 minibuffer 處輸入 abc, EMACS 會找尋abc、 Abc、aBc、 abC、ABc、aBC、ABC 等字串。因此在 minibuffer 處輸入小寫的英文字母,就表示所要找尋的字串包括大寫的字母在內。如何直接找尋上述例子的 ABC,而不需通過 abc、Abc、aBc、 abC、ABc、ABC 等字串呢?欲達如此的效果,必需在 minibuffer 處,給予大寫字母(uppercase)的字串。例如,在 minibuffer 處,給予 ABC 的字串,此時,緩衝區的內容若爲abc、 Abc、aBc、 abC、ABc、aBC、ABC ,則會直接搜尋 ABC 。因此在 minibuffer 處輸入大寫的英文字串時, EMACS 所找尋字串的大小寫,就會與minibuffer 字串的大小寫徹底同樣。 此種對大小寫極度敏感的做法,稱爲 casesensitive。EMACS 對於大小寫出現的位置也有差異,如今就先來討論 casesensitive 的問題。
-
-
minibuffer 的字母都是小寫,則可能找到的字串,包含全部大小寫的字串。原始文件:abc、 Abc、aBc、 abC、ABc、aBC、ABC 輸入minibuffer 的字串: abcsearch string:abc、 Abc、aBc、 abC、ABc、aBC、ABC
-
-
minibuffer中的字母,如有任一個以上的字母是大寫,則可能找到的字串,就如同 minibuffer 所示的同樣。原始文件:abc、 Abc、aBc、abC、ABc、aBC、ABC
-
-
輸入 minibuffer 的字串: Abcsearch string:Abc
-
-
輸入 minibuffer 的字串: aBcsearch string:aBc
-
-
輸入 minibuffer 的字串: ABcsearch string:ABc
-
-
輸入 minibuffer 的字串: ABCsearch string:ABC
若是但願 minibuffer 輸入什麼,緩衝區就找到什麼時,例如,在 minibuffer中輸入 abc,所要找尋的字串就是 abc。此時就必需修改 EMACS ``case-fold-search'' 變數的值爲 ``nil''。由於EMACS 對此變數的預設值是 t,它的意思就是使搜尋成爲case sensitive。若將此變數改爲非 case sensitive 時,在minibuffer} 輸入 abc,就只會找尋 abc。
知道了 EMACS 對大小寫的處理程序後,如今就來談談 incremental search和noincremental search。鍵入第一個字母至minibuffer 時,搜尋的序幕就展開,是爲 incremental search。使用 incremental search時,當 minibuffer
收到第一個搜尋字母時,搜尋行動就從遊標所在位置向下開始搜索。此時的遊標,會從原先遊標所在位置移至其下第一個出現此字母的地方;當 minibuffer 出現兩個字元時,遊標也移至其下出現此兩個字元的地方。固然,這些都必須要以緩衝區中有這些文字爲前題,若找不到任何合適的文字時, echo area 會出現 ``Failing I-search:'' 的警示語。在 EMACS 中執行 incremental search的方法有兩種,一種是往前的搜尋(forward search),另外一種是回頭的搜尋(backward search)。以下,就是二種搜尋所使用的指令:
-
-
Ctrl-s
(
isearch-forward
)
-
-
遊標所在處向前(右)搜尋。
-
-
Ctrl-r (isearch-backward)
-
-
遊標所在處往回(左)搜尋。
當使用 Ctrl-s 或 Ctrl-r指令時, EMACS 的 echo area 會出現 ``I-search:''或 ``I-serach backward:''。當出現這些
提示字時,就表示其後是要輸入搜尋字串。只要鍵入第一個字元,搜尋的行動就當即展開了。 雖然如此,仍有幾個有關搜尋的關鍵字必需先行討論,它們是 ``RET''、 ``DEL'' 與``Ctrl-g''。
-
-
RET
-
-
當
minibuffer
收到
RET
時,遊標會停留在最後一個知足搜尋條件之處,且結束搜尋的動做。這種作法的好處是,若所找的資料就是所要的,且又是必需修改的資料,遊標停留在該處,便可當即處理。由於,有些離開搜尋狀態的方法,會使遊標到第一次執行搜尋的位置,這就是下面要談的
``Ctrl-g''
的處理原則。
-
-
Ctrl-g
-
-
``Ctrl-g''
的用法有二種,其1、是離開搜尋,承如上面所言;其2、就是當所鍵入的搜尋字串,沒法找到徹底符合的對應字串時,可利用
``Ctrl-g''
將
minibuffer
中所能找到的子字串留下,而將不能找到的資料除去。因此,若已經找到所要的字串而想離開搜尋時,鍵入
``Ctrl-g''
除了能夠離開搜尋外,還能夠將遊標帶回原先的出發點。根據
minibuffer
處所給予的資料,徹底無誤的在緩衝區中找到相對應的文字後,以
``Ctrl-g''
可將遊標歸回原位。但若所給予的資料在緩衝區中沒法找到徹底對應的字,此時,若想離開搜尋的狀態,就必需用「兩次」的
``Ctrl-g''
纔可徹底脫離搜尋的狀態。
-
此時,鍵入的第一個 ``Ctrl-g'' minibuffer 所找到的字串留下,而將沒法兌現的字串刪除。此時再鍵入一次 ``Ctrl-g'' ,則會徹底離開搜尋的狀態,而遊標也會自動移回展開搜尋時的位置。
-
-
DEL
-
-
想要修改 minibuffer 內的字串時,請用DEL(delete-backward-char)。 還記得它嗎?它是用來刪除字元的,此刪除的動做是往回的刪除。每執行一次的DEL,就是一個新字串的誕生,也就是一個新搜尋的展開。值得注意的是,此新展開的搜尋與原先的搜尋方向相反,這個設計是合理的。由於, 只要minibuffer 輸入任何一個字,搜尋就己展開了,此時,若以DEL 來刪除錯誤的輸入,則表示先前所找到的字串也不符須要,因此只能從新來過纔是可行之路。這也就是爲什麼每刪掉一個字元,搜尋的行動會回走的理由了。
要使用搜尋的指令,只需鍵入 ``Ctrl-s'' 。此時minibuffer會出現 ``I-search:''。若鍵入 Ctrl-r 後,則出現 ``I-search backward:''。
使用搜尋的指令,會有若干情形出現:
-
-
首次搜尋,即覓得所要的字串。
-
-
使用者此時可根據所需來作適當的處理。例如,離開搜尋,修改搜尋到的資料等等。
-
-
搜尋不利,必需一而再,再而三的努力,才能找到所要的字串。
-
-
此時只要重複使用 ``Ctrl-s'' ,遊標就移至下一個符合的字串。因此,只要所找尋的字串不變 就不須要再給予搜尋的字串。重複使用 ``Ctrl-s'' 的結果,仍沒法找到所要的字串,echoarea 會迴應出 ``FailingI-search:'' 的訊息。
-
-
若重複使用 ``Ctrl-s'' 的結果,已使 echoarea 出現
-
-
``FailingI-search''
後,則表示緩衝區已到了極限。若想再查看已閱 過的資料,只要再使用一次
``Ctrl-s''
,就會迫使搜尋從原來的啓始點再進行一次的搜尋。
-
-
搜尋的過程當中,若想回頭再查閱已看過的資料時,只要交替使用 ``Ctrl-s'' 與 ``Ctrl-r'' ,就能夠了。
EMACS 能夠將搜尋過的字串,再拿出來重複使用。由於,EMACS 將使用過的搜尋字串,都放在一個名爲 search ring的變數中。它與先前討論過的 kill-ring 相似,都爲變數。既爲變數,其值就能夠增減與參閱的。至於如何查閱變數的值,請再行參考 4.4 節 (EMACS buffer and windows)。
再使用搜尋過的字串,只要將 `` serach-ring''此一變數的值取出便可。取出其值的方法有兩種,一種是往前(右)的取出,另外一種是往回(左)的擷取,其分界點是以最新使用過的搜尋字串爲分野。由於 `` search-ring'' 爲一個ring,因此擷取的方式,不是採順時鍾的方向,就是採反時鍾的方向。今舉一實例說明之。
如下是以 `` Ctrl-h v'' 所獲得有關 `` search-ring'' 的資料。
search-ring's value is ("kill" "Ctrl" "tex" "Ctrl-h" "text" "search")
Documentation:
List of search string sequences.
此時 `` search-ring'' 的變數值是:
kill、 Ctrl、 tex、 Ctrl-h、 text 、 search
最新的搜尋字串則位於最前端,此時爲 ``kill'' 。往前(右)所得的字串則爲``Ctrl'',往回(左)所得的字串則爲 ``search''。今以此例,將使用`` search-ring'' 得取使用過的搜尋資料的步驟說明以下:
-
-
首先鍵入 Ctrl-s 或 Ctrl-r
-
-
ESC-p
-
-
當
echoarea
出現
I-search:
後,再鍵入
``ESC-p''
,則可獲得
``Ctrl''
的字串。若想繼續往前尋找使用過的字串,只要重複鍵入
``ESC-p''
便可。
-
-
ESC-n\indexESC-n
-
-
當
echoarea
出現
I-search:
後,再鍵入
ESC-n
,則可獲得
``search''
的字串。若想繼續往回尋找使用過的字串,只要重複鍵入
``ESC-n''
便可。
除了 search-ring 的資料可再使用外,將拷貝技巧運用在搜尋上,也是資料再使用的另外一項運用。
拷貝在搜尋上的運用,就是將緩衝區的資料拷貝至 echo area 出現I-search: 後的 minibuffer 處。經此拷貝的過程,任何大小的字串,均可使它輕易的出如今 minibuffer 處。
如下就是使用的方法:
-
-
鍵入 Ctrl-y
-
-
若要將遊標所在位置到列尾的全部資料,放入 minibuffer