本文件列出了在Emacs C mode下面常見的指令及所謂的C mode就是在Emacs下面撰寫C語言程式的模式。在這個模式下面Emacs會提供一些針對C語言所增加的特性及功能。對於C的程式設計師而言是相當好用的。雖然這篇文章著重在C mode之下,但是大部分的指令對於其他的模式依舊適用。
避免被其他的設定所影響Emacs本身是一個非常有彈性的編輯器,因此經過相當的設定之後,原本預設的設定可能會被修改掉了。為了讓您的Emacs能夠符合本文件所列出的熱鍵及弁遄C建議您在home directory的.emacs檔案中加入下面的設定。
(setq inhibit-default-init t) ; 避免被系統預設的設定所影響
(keyboard-translate ?C-h ?C-?) ; 可以避免backspace變成help hot-key的問題
(keyboard-translate ?C- ?C-h) ; 將help hot-key由Ctrl-h轉成Ctrl-
;; 以下的設定是讓C mode具有 K&R 所建議的樣式
(setq c-mode-hook '(lambda () (auto-fill-mode 1)))
(setq c-indent-level 5)
(setq c-continued-statement-offset 5)
(setq c-argdecl-indent 0)
(setq c-brace-offset -5)
(setq c-label-offset -5)
進入及離開Emacs如果您的系統上面已經安裝好emacs,只要在shell下面執行emacs xxx.c就可以以C mode進入emacs中。如果您要離開emacs,則需要在emacs中鍵入:Ctrl-x-c。
檔案控制及存取Ctrl-x Ctrl-s
儲存目前正在編輯視窗內的檔案
Ctrl-x s
儲存所有目前在編輯的檔案
Ctrl-x k
關閉目前正在編輯視窗的檔案,但是不存檔
Ctrl-x Ctrl-c
跳出emacs
Ctrl-x Ctrl-w
另存新檔
Ctrl-x Ctrl-f
開啟檔案
Ctrl-x Ctrl-r
以唯讀模式開啟檔案
Ctrl-x Ctrl-q
將原本是唯讀的檔案變成可寫入
游標的移動Ctrl-b
往回移一個字元
Ctrl-f
往後移一個字元
Ctrl-p
往上移動一行
Ctrl-n
往下移動一行
Ctrl-a
移到行首
Ctrl-e
移到行末
Esc b
往前移一個英文字
Esc f
往後移一個英文字
Esc v
往上移一頁
Ctrl-v
往下移一頁
Esc <
移到檔案最前面
Esc >
移到檔案最後面
Esc a
移到敘述(statement)最前面
Esc e
移到敘述最後面
Esc Ctrl-a
移到Function最前面
Esc Ctrl-e
移到Function最後面
Ctrl-u
重複前一個指令四次
刪除與回復DEL
刪除游標左邊的字元
Ctrl-d
刪除游標所在位置的字元
ESC DEL
刪除游標左邊的英文字
ESC d
刪除游標右邊的英文字
Ctrl-k
刪除所有在游標右邊的字元
ESC Shift-2
設定Region的Mark
Ctrl-w
從設定Region Mark到目前游標之間的字元全部刪除
Ctrl-y
將被Ctrl-w指令所刪除的字元回復
ESC y
將被Ctrl-y所回復的字元再刪除
Ctrl-u
重複前一個命令四次
Ctrl-x u
回復前一個命令所造成的影響(Undo)
搜尋與置換Ctrl-r
向上搜尋
ESC
在搜尋模式中按ESC可以離開搜尋模式
ESC %
啟動置換模式。在置換模式中,首先要輸入將被置換掉的字串,然後輸入新字串。接下來游標會移到需要被置換的地方。你需要用下面的key來指定動作: y:置換目前游標所在的字串,並且移到下一個可被置換的字串。 n:跳過目前游標所在的字串。移到下一個可被置換的字串。 !:將整個檔案一次置換完畢,不進行任何詢問。 ESC:結束置換模式。 .:將目前的字串置換後,即離開置換模式。 ^:回到前一個符合置換的地方。
拷貝與搬移Ctrl-@
設定標記起始點
Ctrl-w
剪下標記起始點至目前游標所在位置的文字。
Alt-w
複製標記起始點至目前游標所在位置的文字。
Ctrl-y
貼上之前所剪下或複製的文字至目前游標所在的位置。
多重視窗控制Ctrl-x 0
刪除目前的視窗(不會關閉正在編輯的檔案)
Ctrl-x 1
刪除其他的視窗(不會關閉正在編輯的檔案)
Ctrl-x 2
水平分割視窗
Ctrl-x 3
垂直分割視窗
Ctrl-x b
將目前視窗內的檔案切換成其他的檔案
Ctrl-x o
將游標移動到其他視窗之內
加入註解ESC ;
在Emacs的C mode中按下'ESC ;'就會出現註解符號/* 及*/。並且在編輯時會自動幫你換行。
編譯程式ESC x compile
在C mode中輸入ESC x compile就可以在不離開Emacs的狀況下進行程式的編譯。此時,emacs會顯示預設的編譯命令是make -k。compile之後,所有訊息都會出現在另一個視窗。
Ctrl-x `
編譯完成後,如果有錯誤發生,按下Ctrl-x `就可以跳到下一個有錯誤的地方,修改完成後,再按一次就可以繼續修改下一個錯誤,一直到沒有其他的錯誤為止。
SHELLESC x shell
進入Shell mode。可以讓你在emacs的視窗中使用shell。
Ctrl-c Ctrl-c
將正在執行的程式中斷
Ctrl-c Ctrl-z
暫停目前的工作
Ctrl-c Ctrl-r
將游標移動到最後一個命令
Ctrl-c Ctrl-y
重複執行前一個命令。
Tagstags是一個很有用的工具,他可以幫助您將source檔案中所有function定義,及 typedef的定義,全部收集成為一個資料庫,讓你可以很輕易的跳到您要的函數定義。在使用emacs的tags機制之前,您需要先將有關的tag的資料庫建構出來。建構的方法如下:
% etags -tlist_of_source_file
list_of_source_file就是您要做紀錄的原始程式檔案。您可以指定很多個檔案。例如:
% etags -t *.[ch]
其中,-t的參數主要是要求etags將typedef的宣告一併放入資料中。
在Emacs中,如果要使用tags的機制,可以使用下表的命令:
ESC .
尋找函數的定義。你可以透過這個命令來找尋你要的函數。輸入此命令後,emacs會提示訊息,要求你輸入要找尋的函數名稱。或是typedef的定義。
Ctrl-x 4 .
功能同ESC .。但是會把找到的函數定義顯示在另外一個視窗。
ESC x visit-tags-table
使用其他的TAGS檔案
ESC x tags-search
以regular expression的方式來找尋函數名稱。
ESC ,
輸入ESC x tags-search之後,可以用這個來進行尋找下一個的動作。
ESC x tags-query-replace
以regular expression的方式來置換函數名稱。
其他Ctrl-x Ctrl-b
目前正在處理的檔案列表
Ctrl-x b
將目前視窗內的檔案切換成其他的檔案
Ctrl-x d
會在目前的視窗中顯示目錄列表
Ctrl-x 4 d
在其他視窗顯示目錄列表