#
在不同的major-mode中的特殊鍵綁定。我們可以用C-h m查看詳細的情況。
在mode中總是用C-c做前命令來指定特殊的函數。我們可以用C-c C-h來查看已經存在綁定的函數。
你光標在window里的位置叫point。而mark在buffer里的位置。
我們可以讓emacs高亮顯示。(在.emacs里添加(transient-mark-mode t))從point到mark的區域。如下:
best of the world
我們還可以交換point和mark之間的位置。(C-x C-x)
1。你可以在當前目錄建一個emacs的目錄。
$mkdir emacs
2。把你的腳本考到那個目錄下。
例如:$cp -v sams-lib.el ~/emacs
3。編輯默認的腳本.emacs
$vi ~/.emacs
加入下面內容:
(setq load-path (cons "~/Emacs" load-path))
(require 'sams-lib)
(load "refcard") 這行確保sams-lib.el中的一個函數被載入。
在你按下 C-s 之后,你會發現回顯區里有“I-search”字樣出現,這是在提示
你目前 Emacs 正處于“漸進搜索”狀態,正在等待你輸入搜索字串。<Return>
會結束搜索。
>> 輸入 C-s 開始一個搜索。注意敲慢一點,一次輸入一個字符。
慢慢輸入“cursor”整個詞,每敲一個字就暫停一下,注意觀察光標。
現在你應該已曾經找到“cursor”這個詞了。
>> 再按一次 C-s,搜索下一個“cursor”出現的位置。
>> 現在按四次退格鍵,看看光標是如何移動的。
>> 敲 <Return> 結束搜索。
剛才看仔細了么?在一個漸進式搜索中,Emacs 會嘗試跳到你輸入的字符串的出
現位置。想跳到下一個搜索目標出現的位置,只要再按一次 C-s 就行了。如果找
不到,Emacs 會發出“嗶”的一聲,告訴你搜索失敗。在整個過程中,都可以用
C-g 來終止搜索。【你會發現 C-g 之后光標回到了搜索開始前的地方,而
<Return> 會讓光標留在搜索結果上,這是很有用的功能。】
--------------------------------------------------------------------------------------------------
Emacs 的搜索命令的獨特之處在于,它是“漸進的(incremental)”,意思是搜
索與輸入同時進行:你在這邊一個字一個字地輸入你想搜索的東西,同時 Emacs
在那邊就替你搜索了。
C-s 是向前搜索,C-r 是向后搜索。
如果你修改了一個文件但是還沒來得及存盤,然后你的計算機罷工了,那么你編
輯的東西很可能就找不回來了。為了避免這樣的不幸一再發生,Emacs 會定期將
你正在編輯的文件存入一個“自動保存”文件中。自動保存的文件名的頭尾各有
一個“#”字符,比如你正在編輯“hello.c”,那么它的自動保存文件就叫
“#hello.c#”。在你正常存盤之后,Emacs 會刪除自動保存文件。
假如不幸真的發生了,你大可以從容的打開原來的文件(注意不是自動保存文件)
然后輸入 M-x recover file<Return> 來恢復你的自動保存文件。在提示確認的
時候,輸入 yes<Return> 就行了。
Emacs 的命令就像天上的星星,數也數不清。把它們都對應到 CONTROL 和 META
組合鍵上顯然是不可能的事情。Emacs 用擴展(eXtend)命令來解決這個問題,
擴展命令有兩種風格:
C-x 字符擴展。 C-x 之后輸入另一個字符或者組合鍵。
M-x 命令名擴展。M-x 之后輸入一個命令名。
-------------------------------------------------------------------------------------------------------
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”替換掉了。
如果你用 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 s 保存多個緩沖區
C-x s 會找到所有已被修改但尚未存盤的緩沖區,然后向你逐個詢問,是否需要
存盤?
>> 插入一行文字,然后輸入 C-x s。
它應該會問你,是否要儲存名為 TUTORIAL.cn 的緩沖區?
按“y”告訴它你想存盤。
尋找文件的命令有一個特別之處,那就是你必須給出文件名。我們稱這個命令
“從終端讀入了一個參數”(在這里,這個參數顯然就是文件名)。當你輸入了
這個命令之后:
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 會顯示寫入文件的文件名。你最好養成經常存盤的習慣,這
樣在系統崩潰或者死機的時候你不會損失太多。
如果你修改了一段文字,又覺得改得不好,可以用 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 的意義是執行撤銷的重復次數。
你可以用 <Delback> 來刪除最后輸入的的一個字符,這個跟你在 Emacs 之外的
用法應該一樣。一般來說 <Delback> 就是位于 <Return> 鍵上方某處的一個大號
鍵,通常被標示為“Delete”、“Del”或者“Backspace”。
下面是一個關于“刪除”操作的小結:
<Delback> 刪除光標前的一個字符
C-d 刪除光標后的一個字符
M-<Delback> 移除光標前的一個詞
M-d 移除光標后的一個詞
C-k 移除從光標到“行尾”間的字符
M-k 移除從光標到“句尾”間的字符
【可能你已經注意到了“刪除(delete)”和“移除(kill)”的用詞區別,后
文會有詳細說明。】
-----------------------------------------------------------------------------------------------------
你也可以用一種統一的辦法來刪除緩沖區里的任何一部分:首先把光標移動到你
想要刪除的區域的一端,然后按 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 指定一個正的或負的參數。
|