本文件列出了在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來指定動作:
|
拷貝與搬移
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 `就可以跳到下一個有錯誤的地方,修改完成後,再按一次就可以繼續修改下一個錯誤,一直到沒有其他的錯誤為止。 |
SHELL
ESC x shell | 進入Shell mode。可以讓你在emacs的視窗中使用shell。 |
Ctrl-c Ctrl-c | 將正在執行的程式中斷 |
Ctrl-c Ctrl-z | 暫停目前的工作 |
Ctrl-c Ctrl-r | 將游標移動到最後一個命令 |
Ctrl-c Ctrl-y | 重複執行前一個命令。 |
Tags
tags是一個很有用的工具,他可以幫助您將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 | 在其他視窗顯示目錄列表 |