emacs keyboard shortcut

符號    

C-  意思是按住 Ctrol 鍵

M-   意指 Meta 鍵 (鍵盤上若無Meta 鍵,則可以ALT ESC 鍵來取而代之)
DEL  意指退格鍵 (不是 刪除(Delete) key)
RET  意指回車鍵
SPC  意指空格鍵
ESC  意指Escape鍵
TAB  意指Tab鍵

像 “C-M-” (or “M-C”) 這樣連在一起的意味着同時按住 Control 和 Meta 鍵不放.


用方向鍵
   C-p 、 C-b 、 C-f 和 C-n 這四個命令。它們的功能和方向鍵是一樣的,如下圖所示:

            上一行 C-p (Prev line)
                          .
                          .
                          .                              
  向左移 C-b …. 。…. 向右移 C-f (Forward  character)
 (Backward )     . 
                          .
                          .
              下一行 C-n (Next line)

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


進入Emacs
要進入GNU Emacs,只需鍵入它的名字             emacs
離開Emacs
掛起Emacs:                                    C-z
永久離開Emacs                                  C-x C-c

文件
讀取文件到Emacs                                C-x C-f
保存文件到磁盤                                  C-x C-s
保存所有文件                                    C-x s
插入其它文件的內容到當前緩衝                    C-x i
用將要讀取的文件替換當前文件                    C-x C-v
將當前緩衝寫入指定的文件                        C-x C-w
Version control checkin/checkout                     C-x C-q

取得幫助
進入幫助系統很簡單,只需要輸入C-h(或F1)並跟隨要獲取幫助的對象,初次使用Emacs的用戶可以輸入C-h t進入使用手冊
離開幫助窗口                                    C-x 1
滾動幫助窗口                                    C-M-v
匹配:顯示與字符a串匹配的命令                   C-h a
顯示一個鍵的功能                                C-h c
詳細描述一個功能                                C-h f
取得詳細模式的信息                              C-h m

錯誤恢復
取消當前要執行的命令                            C-g
恢復系統崩潰後丟失的文件                        M-x recover-file
撤銷更新                                        C-x u或C-_
使緩衝回覆到初始內容                            M-x revert-buffer
Redraw garbaged scree   n                         C-l

增量查找(Incremental Search)
向前查找                                        C-s
向後查找                                        C-r
規則表達式查找                                  C-M-s
反向規則表達式查找                              C-M-r
選擇前一個查找字符串                            M-p
選擇下一個查找字符串                            M-n
退出增量查找                                    RET
取消上一個字符的作用                            DEL(Backspace)
退出當前查找模式                                C-g
在查找的過程中可重複使用C-s和C-r來改變查找方向

移動(Motion)
向前一個字符                                    C-f
向後一個字符                                    C-b
向前一個字                                      M-f
向後一個字                                      M-b
向上一行                                        C-p
向下一行                                        C-n
到行首                                          C-a
到行尾                                          C-e
到句首                                          M-a
到句尾                                          M-e
到段首                                          M-{
到段尾                                          M-}
到頁首                                          C-x [
到頁尾                                          C-x ]
到表達式首部                                    C-M-f
到表達式尾部                                    C-M-b
到函數首部                                      C-M-a
到函數尾部                                      C-M-e
到緩衝首部                                      M-<
到緩衝尾部                                      M->
滾動到下一屏                                    C-v
滾動到上一屏                                    M-v
滾動到右邊一屏(內容向左移動)                  C-x <
滾動到左邊一屏(內容向右移動)                  C-x >
滾動當前行到屏幕中央                            C-u C-l

Killing和Deleting
向前delete字符                                  C-d
向後delete字符                                  DEL(Backspace)
向前delete到字首                                M-d
向後delete到字尾                                M-DEL(Backspace)
向前delete到行首                                M-0 C-k
向後delete到行尾                                C-k
向前delete到句首                                C-x DEL(Backspace)
向後delete到句尾                                M-k
向前delete到表達式首部                          M– C-M-k
向後delete到表達式尾部                          C-M-k
Kill區域                                        C-w
拷貝區域到Kill Ring                              M-w
Kill到下一個給定字符出現的位置                  M-z <char>
拉回(yank)上次kill的內容                      C-y
用更早kill的內容取代拉回的上次kill的內容        M-y

標記(Marking)
標記當前位置                                    C-SPC或C-@
以字符爲單位使用移動命令動態標記區域            C-x C-x
以字爲單位使用移動命令動態標記區域              M-@
標記一段                                        M-h
標記一頁                                        C-x C-p
標記一個表達式                                  C-M-@
標記一個函數                                    C-M-h
標記整個緩衝區                                  C-x h

Query Replace
交互式地替換一個文本串                          M-%
交互式地替換一個規則表達式                      M-x query-replace-regexp
替換當前的並移動到下一處                        SPE
替換當前的但不移動到下一處                      ,
不替換當前的並移動到下一處                      L(Backspace)
替換所有剩下的符合條件的文本                    !
退出替換模式                                    RET
進入遞歸的編輯模式                              C-r
退出遞歸的編輯模式                              C-M-c

多窗口(Multiple Windows)
(When two commands are shown,the second is for “other frame”)
刪除所有其它窗口                                C-x 1
上下分割當前窗口                                C-x 2 C-x 5 2
左右分割當前窗口                                C-x 3
刪除當前窗口                                    C-x 0 C-x 5 0
滾動其它窗口                                    C-M-v
切換光標到另一個窗口                            C-x o
選擇另一個窗口中的緩衝                          C-x 4 b C-x 5 b
顯示另一個窗口中的緩衝                          C-x 4 C-o C-x 5 C-o
在另一窗口中查找並打開文件                      C-x 4 f C-x 5 f
在另一窗口中以只讀方式打開文件                  C-x 4 r C-x 5 r
在另一窗口中運行dired命令                       C-x 4 d C-x 5 d
在另一窗口中查找tag                             C-x 4 . C-x 5 .
增加窗口高度                                    C-x ^
減小窗口寬度                                    C-x {
增加窗口寬度                                    C-x }
格式(Formatting)
縮進當前行(與模式相關)                        TAB
縮進區域(與模式相關)                          C-M-
縮進表達式(與模式相關)                        C-M-q
Indent region rigidly arg. Columns                    C-x TAB
在光標後插入一個新的行                          C-o
靜態地將一行下移                                C-M-o
刪除光標附近的空行(留下一行)                  C-x C-o
與上一行合併成一行                              M-^
刪除光標附近的所有空格                          M-
刪除光標附近的空格(留下一格)                  M-SPC
Fill paragraph                                     M-q
Set fill column                                    C-x f
設置每一行開始的前綴                            C-x .
設置字體                                        M-g

Case Change
將一個字設置爲大寫                              M-u
將一個字設置爲小寫                              M-l
將一個字首字母設置爲大寫                        M-c
將一個區域設置爲大寫                            C-x C-u
將一個區域設置爲小寫                            C-x C-l

The Minibuffer
(the following keys are defined in the minibuffer)
最大程度地補全命令                              TAB
補全命令中的一個字                              SPC
完成並執行一個命令                              RET
列出命令所有可能的後續部分                      ?
列出在當前命令之前輸入的命令                    M-p
列出在當前命令之後輸入的命令                    M-n
用規則表達式在命令歷史記錄中向後搜尋            M-r
用規則表達式在命令歷史記錄中向前搜尋            M-s
重複執行上一條命令                              C-x ESC ESC

緩衝(Buffer)
選擇另一個緩衝                                  C-x b
列出所有的緩衝                                  C-x C-b
Kill一個緩衝                                     C-x k

置換(Transposing)
字符置換                                        C-t
字置換                                          M-t
行置換                                          C-x C-t
表達式置換                                      C-M-t

拼寫檢查(Spelling Check)
對當前的字進行拼寫檢查                          M-<br>檢查區域內所有的字&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x ispell-origin<br>檢查緩衝內所有的字&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x ispell-buffer<br><br><span style="font-weight:bold;">標記 (Tags)</span><br>查找標記&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-.<br>查找標記下一次出現的位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-u M-.<br>指定一個新的標記文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x visit-tags-table<br>Regexp search on all files in tabs table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x tags-search<br>在所有文件中執行查詢-替換&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x tags-query-replace<br>繼續進行上一次標記查找或查詢-替換&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-,<br><br><span style="font-weight:bold;">Shells</span><br>執行一個shell命令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-!<br>在一個區域上執行sheel命令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-|<br>通過shell命令過濾區域&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-u M-|<br>在窗口中啓動一個shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x shell<br><br><span style="font-weight:bold;">矩形(Rectangles)</span><br>拷貝一個矩形到寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r r<br>Kill矩形&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r k<br>拉回矩形&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r y<br>打開一個矩形, 將文本移動至右邊&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r o<br>清空矩形&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r c<br>爲矩形中每一行加上一個字符串前綴&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r t<br><br><span style="font-weight:bold;">規則表達式(Regular Expressions)</span><br>除換行符外的所有單個字符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br>零個或多個重複&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>一個以上的重複&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +<br>零個或一個重複&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?<br>轉譯字符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>選擇(or)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>分組&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (…)<br>與第n個組相同的文本&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n<br>At work break&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<br>Not at work break&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<br><br><span style="font-weight:bold;">寄存器(Register)</span><br>存儲區域到寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r s<br>插入矩形內容到緩衝&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r i<br>存儲光標位置到寄存器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r SPC &lt;num&gt;<br>跳躍到寄存器中存儲的光標位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x r j &lt;num&gt;<br><br><span style="font-weight:bold;">鍵盤宏(Keyboard Macros)</span><br>開始定義一個鍵盤宏&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x (<br>結束鍵盤宏的定義&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x )<br>執行上一次定義的鍵盤宏&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x e<br>追加到上一個鍵盤宏&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-u C-x (<br>爲上一個鍵盤宏命名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x name-last-kbd-macro<br>在緩衝中插入Lisp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x insert-kbd-macro<br><br><br><span style="font-weight:bold;">Tags</span><br>&nbsp;&nbsp;&nbsp; Tags 是一個顯爲人知的功能? 所以我想提一下. 這不是emacs發明的, 而是vi 原本的特異功能. emacs只是發揚光大而已.<br><br>假設你有一個目錄, 裏面是一個程式的原始碼, 比如說, tin 的原始碼, 放在 ~/tin-1.3beta 下面. 你想看它們.<br><br><span style="font-weight:bold;">首先,</span>&nbsp;叫emacs cd到該目錄:  M-x cd<br><br><span style="font-weight:bold;">然後,&nbsp;</span>建立tag table. tag table 就是一張對照表, 記錄哪個符號(variable/function call) 對映到哪個檔案的哪個地方. 有這張表, emacs可以讓我們快速的在程式碼內遊走. 一般這張表是一個檔案, 叫作TAGS (大寫)<br><br>  M-! etags *.c<br><br>M-! 是執行external shell command的意思. etags就是emacs的建表程式. 你只要告訴它你的source code在那裏即可.<br><br>vi的話是使用ctags這個程式, 它建出來的檔名叫tags (小寫). 因爲我們介紹emacs, 所以不管它.<br><br>然 後, 怎麼看程式? 你知道所有的C 程式都是由main()開始, 所以你想找到main()在哪個檔案. 這時只要按 M-. 然後emacs會問你tag table在哪裏. 因爲我們已經cd到該目錄, 直接按enter就好了. 然後輸入main, emacs就會把你帶到main(){ ... }去.<br><br>如果 你看到某個程式片斷呼叫一個你沒看過的函式, 你可以把遊標移到該函式的名字上, M-. ENTER 就搞定了.<br><br>如果 emacs找錯了 (比如有變數和函式同名, emacs跳到變數去), 那你可以用 C-u M-. 找下一個.<br><br>在編輯程式碼的時候, M-SPC 很有用, 它會把遊標附近的空白縮成一個. 在其它地方也有效.<br><br><span style="font-weight:bold;">拼寫檢查</span><br><br>當然只是針對英文。<br><br>Ispell<br><br>選中一塊區域,或者對整個編輯緩衝區進行拼寫檢查: M-x ispell-buffer RET, 這時會打開ispell緩衝區,C-h可以查看一些拼寫檢查的幫助信息。<br><br>檢查單詞。在一個單詞上執行M- ,會對這個單詞進行拼寫檢查。

單詞拼寫補全。在一個未拼完的單詞後執行ESC TAB(M-TAB)。

只要啓用過Ispell, 他就將一直在後臺運行。M-x ispell-kill-ispell,可以殺死這個進程。

感覺很好用。

flyspell

一個擴展,可以在編輯的時候直接進行拼寫檢查,也就是spell-check on the fly。它也是利用Ispell。

M-x flyspell-mode RET
Tips

改變buffer的只讀屬性

M-x toggle-read-only

在C模式下輸入tab

C-q TAB : 對TAB不做解釋,直接輸

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

C和C++模式

===指定爲C++模式的方法===

一般根據擴展名自動設定,不用指定,不過有時候若希望.h文件是C++模式的(缺省是C模式),在文件第一行(或其末尾)上加入

// -*- C++ -*-

===語法高亮===

不是C模式專有,M-x global-font-lock-mode RET 或在.emacs中加入(global-font-lock-mode t)。

===子模式===

auto-state 輸入時自動縮進,自動換行

hungry-state Backspace時,自動刪除儘可能多的空白和空行

C-c C-t 同時轉換(開/關)auto-state和hungry-state子模式

C-c C-a 轉換 auto-state 子模式

C-c C-d 轉換 hungry-state 子模式

===編輯命令===

C-c . 設置縮進風格(按TAB鍵可列出可用的風格,缺省的爲gnu,其縮進爲2個字符;linux爲8個;k&r爲5個,java爲4個)

TAB 重新縮進當前行

M-/ 自動補齊(緩衝區中能找得到的串)

M-; 行尾加入註釋

C-c C-e 擴展宏

C-c C-c 註釋掉整個區域

C-u C-c C-c 取消註釋

C-c C-/ 將區域中的每一行結尾都加入一個’/’字符

M-x c-beginning-of-defun
M-x c-end-of-defun  跳到函數的開頭或結尾

C-c C-u    跳轉到前面的一個#ifdef 

C-c C-p

C-c C-n   跳轉到宏的開頭或結尾

C-M-h   選中整個函數區域

C-c C-/   在所選區域的每一行後面添加” / “

C-M-p   跳轉到}或)匹配的括號

C-M-n   跳轉到(或{匹配的括號

M-x auto-insert 自動添加

   #ifndef TEST_H
   #define TEST_H
   #endif


M-@  把光標移動到單詞開頭,選中整個單詞區域

C-M-h  選中當前行


C-u, C-@   回到上次標籤的位置


===編譯和調試===

M-x compile RET 編譯

M-x gdb RET 調試

C-x ` (出錯信息中)下一個錯誤,一個窗口顯示錯誤信息,另一個顯示源碼的出錯位置

C-c C-c 轉到出錯位置

啓動gdb調試器後,光標在源碼文件緩衝區中時:

C-x SPC 在當前行設置斷點

C-x C-a C-s step

C-x C-a C-n next

C-x C-a C-t tbreak

C-x C-a C-r continue

Dired模式

參考文檔

常用命令:

m : mark

u : unmark

d : mark delete

D : 立即刪除

x : 執行刪除

g : refresh

C : copy

R : move

+ : 創建目錄

Hideshow minor mode

編程時可以隱藏函數的實現。M-x hs-minor-mode

(setq hs-minor-mode-prefix [(contrl o)]) 可以改變複雜的命令前綴.

用法:

`C-c @ C-h’ : Hide the current block (`hs-hide-block’).

`C-c @ C-s’ : Show the current block (`hs-show-block’).

`C-c @ C-c’ : Either hide or show the current block (`hs-toggle-hiding’)

`C-c @ C-M-h’ : Hide all top-level blocks (`hs-hide-all’).

`C-c @ C-M-s’ : Show everything in the buffer (`hs-show-all’).

十六進制模式

查看文本的十六進制編碼

M-x hexl-mode

            </div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章