一、emacs編輯器簡介
emacs編輯器是由C語言和LISP語言編寫的。LISP(鏈表處理語言)是由約翰·麥卡錫在1960年左右創造的一種基于λ演算的函數式編程語言。 我們可以使用LISP來擴展emacs,從而為emacs添加更多的命令。(補:emacs -nw:以命令行的方式來運行emacs,而不啟動GUI界面)
* 自動保存功能
如果你已經修改了一個文件,但是還沒來得及存盤你的計算機就罷工了,那么你所做的修改就很可能會丟失。為了避免這樣的不幸發生,Emacs 會定期將正在編輯的文件寫入一個“自動保存”文件中。自動保存文件的文件名的頭尾各有一個“#”字符,比如你正在編輯的文件叫“hello.c”,那么它 的自動保存文件就叫“#hello.c#”。這個文件會在正常存盤之后被 Emacs 刪除。
所以,假如不幸真的發生了,你大可以從容地打開原來的文件(注意不是自動保存文件)然后輸入 M-x recover file<Return> 來恢復你的自動保存文件。在提示確認的時候,輸入 yes<Return>。
* 其他
- 當emacs失去響應時,C-g命令可用來結束紙條命令的執行。其功能相當于Shell中的Ctrl+C
- 有一些 Emacs 命令被“禁用”了,以避免初學者在不了解其確切功能的情況下誤用而造成麻煩。如果你用到了一個被禁用的命令,Emacs 會顯示一個提示消息,告訴你這個命令到底是干什么的,詢問你是否要繼續,并在得到你的肯定之后再執行這命令
二、emacs編輯器的界面
1. 編輯區
用來進行文本編輯的區域。
2. 回顯區
如果 Emacs 發現你輸入多字符命令的節奏很慢,它會在窗格的下方稱為“回顯區”的地方給你提示。回顯區位于屏幕的最下面一行。
3. 狀態欄
- 位于回顯區正上方的一行被稱為“狀態欄”。狀態欄最開頭的星號(*)表示你已經對文字做過改動。剛剛打開的文件肯定沒有被改動過,所以狀態欄上顯示的不是星號而是短線(-)。
- 狀態欄中的小括號用來指明當前使用的編輯模式,默認是fundamental(主模式),emacs的主模式包括了文本模式以及編輯程序源碼的Lisp模式等。
三、emacs所能提供的工作環境
- emacs可以執行Shell命令
- emacs可以作為Directory Editor(Dired)
- emacs可以編輯、編譯以及調試程序
- emacs可以編輯其它主機上的文檔
- emacs可以打印文件
- emacs具有年歷(Calendar)以及日記功能
- emacs可以用來閱讀man page和info文檔
- emacs可以收發電子郵件
- emacs可以閱讀網絡上的電子布告欄(GNUS)
- emacs具有版本控制的功能(CVS)
- emacs可以提供娛樂環境(游戲功能)
emacs所提供的這些功能,都是先喚起代表此功能的模式(mode)。emacs的模式,分成主要模式(major mode)與次要模式(minor mode)。每一次只能使用一個主模式,而且主模式是必須要的。在一個主模式下,俄可以搭配一個以上的次要模式。使用次要模式相當于啟用了該次要模式所對應的插件。
四、emacs命令
- emacs中的每一個命令都有一個命令名,命令名就是該命令所對應的LISP函數的函數名。在emacs中,我們可以為這些命令配置快捷鍵,從而達到快速調用命令的目的。
- .使用emacs來執行命令的方法有兩種:(1).使用Ctrl鍵 (2).使用Meta鍵。所有emacs命令都可以用Meta鍵表示出來,鍵盤上如果沒有Meta鍵,則可以用Alt鍵或ESC鍵來代替。常用的emacs命令通常會有一個快捷鍵與之相連。快捷鍵通常是以Ctrl來開頭(C-x C-c)。如果要使用Meta鍵來表達與“Ctrl-x Ctrl-c”相同的效果,則使用“M-x save-buffers-kill-emacs”。使用Meta鍵,可以利用emacs的completion功能。使用emacs的completion功能的方法是將部分字符串鍵入后,再按下TAB、SPACE或?鍵即可。
(1).TAB鍵:盡可能將其的字填滿。
(2).SPACE鍵:將分隔符(-)之前的字填滿。
(3).?:將所有可能的completion選擇都列出來。
- 由于emacs中所有的命令都有一個命令名(LISP函數的函數名),因此,我們可以使用“M-x 命令名”來調用emacs中的所有的命令。
* 基本光標控制
- C-v:向下翻屏,與PageDown效果相同(v-> vertical)
- M-v:向上翻屏,與PageUp效果相同
- C-l:重繪屏幕,并將光標所在行置于屏幕的中央
- C-b:光標向前移動一格(b->backward)
- C-f:光標向后移動一格(f->forward)
- C-p:光標向前移動一行(p->previous)
- C-n:光標向后移動一行(n->next)
- M-b:光標向前移動一個單詞
- M-f:光標向后移動一個單詞
- C-a:光標移動到行首
- C-e:光標移動到行尾
- M-<:光標移動到文章的開頭(注意:“<”的輸入要shift鍵,實際為Alt+Shift+<)
- M->:光標移動到文章的結尾
- C-u:給命令傳遞參數。例如:“C-u 2 C-d”表示刪除兩個字符
- M-x goto-line n RET:調到第n行
* 編輯命令
- C-d:刪除光標后的一個字符
- C-k:刪除從光標到行尾的字符(k->killl)
- C-x u:Undo(想要redo,隨便輸入一個字符,在Undo)
- C-SPC、C-@、M-x set-mark-command:設置mark
- C-x h:將整個緩沖區設置為區域
- C-w:將區域的文本刪除,并放入yanking ring中。區域指的是從mark到point(光標所處的位置稱為point)之間的文本
- M-w:復制區域到yanking ring中
- C-y:將yanking ring中最后一個區域插入當前緩沖區
- M-j:回車并且到下一行產生適當的縮進
- M-m:將光標移動到當前行的第一個非空白字符上
- M-;:產生通用注釋
- M-x comment-region:把塊注釋掉
- M-x kill-comment:消除注釋
* 查找與替換
- C-s:向后搜索,光標將停在第一個匹配的字符串處。再按一次C-s將繼續搜索下一個匹配的字符串。如果要停止搜索,則使用C-g,此時光標將會回到搜索開始的位置
- C-r:向前搜索
- M-x replace-string:替換
* 文件操作
- C-x c-f:打開文件,如果文件不存在則創建
- C-x C-s:保存文件。第一次存盤時,emacs會將文件重命名來備份。重命令的規則通常是在原文件名后加上一個“~”字符。如果要關閉emacs的自動備份功能,使用 M-x customize-variable <Return> make-backup-files <Return>
- C-x C-w:將文件“另存為”
- C-x C-v:打開一個新文件,并關閉當前緩沖區
- C-x C-r:以只讀的方式打開文件
- C-x i:將文件插入光標當前位置
* 緩沖區
- Emacs 把每個編輯中的文件都放在一個稱為“緩沖區(buffer)”的地方。每打開一個文件,Emacs 就在其內部開辟一個緩沖區用來保存打開的文件的數據。ESC ESC ESC命令可以用來退出打開的小緩沖區,比如:命令提示窗格等
- C-x C-b 列出當前所有的緩沖區(b->buffer)
- C-x b 緩沖區名:切換到指定的緩沖區(例如:C-x b M<tab>:切換到以M開頭的緩沖區)
- C-x s:保存emacs中所有的緩沖區(s->save)
- C-x right:切換到下一個緩沖區
- C-x left:切換到前一個緩沖區
- C-x C-c:退出emacs,并詢問用戶是否保存
- C-x k:關閉緩沖區
- C-z:將emacs掛起,然后回到Shell中,并不退出emacs。之后,我們可以使用%emacs或fg命令來回到emacs
* 窗口
Emacs 可以有多個窗格,每個窗格顯示不同的文字。
- C-x 0:關閉光標所在的窗口
- C-x 1:保留光標所在的窗格,并將其擴大到整個屏幕,同時關掉所有其它的窗格
- C-x 2:水平分割當前窗口
- C-x 3:垂直分割當前窗口
- C-x o:在emacs的窗格中進行切換(o->other)
- C-M-v:滾動下方的窗格。一般在我們使用下方的窗格進行參考,而又不想將光標切換到下一個窗格時使用
* 使用幫助
- C-h c 快捷鍵:顯示快捷鍵的簡要說明
- C-h k 快捷鍵:顯示快捷鍵所對應的命令名及其詳細說明
- C-h a 關鍵字:顯示包含有指定關鍵字的命令
- C-h i:查看Info文檔
* 在emacs中運行shell命令
- M-! cmd RET:打開一個名為“*Shell Command Output*“的窗口,并把該命令的執行結果顯示在其中。按下”C-x 1“組合鍵可以關閉這個窗口。由于Shell命令的輸出是在一個編輯緩沖區里,因此我們可以對它進行編輯、保存等操作。
- M-| cmd RET:運行Shell命令,并使用編輯窗口中選定的區域作為該Shell命令的輸入,然后可以選擇是否用該Shell命令的輸出來替換編輯窗口中選中的區域。
- C-u M-! cmd RET:執行一條Shell命令,并將其輸出放到編輯區中光標所在的位置處,而不將其輸出到”Shell Command Output“窗口。
- M-x shell:運行一個子Shell,該子Shell對應于emacs中的一個名為”*Shell*"的緩沖區,此后,我們就可以交互式的運行Shell命令了。
- M-x term:運行一個子Shell,該子Shell對應于emacs中的一個名為“*Terminal*”的緩沖區。使用該命令獲得的子Shell是一個完整的Shell的模擬,與我們直接在Shell中操作沒有什么差別。
- M-x eshell:運行emacs shell。該Shell為emacs自己實現的一個shell,而前面運行的shell都為系統中的shell程序(例如:/bin/csh等)。我們可以通過設置變量shell-file-name來設置emacs所使用的默認shell
* Dired功能
- emacs的Dired(Directory Editor)功能使emacs緩沖區能夠用來顯示目錄列表,并可以用來進入目錄的子目錄。Dired緩沖區是只讀的,不能夠被修改。
- C-x d:進入Dired
* emacs配置文件
emacs配置文件通常位于計算機的 $HOME 目錄,如果是 MS Windows (Windows 2000, Windows XP以上),默認是 c:\Documents and Settings\username\Application Data\,這個適用于 Emacs22 以上的版本。Emacs21 默認的 $HOME 目錄在 C:\ 。當然也可以通過環境變量 $HOME 重新設置,總之在比較大眾化的操作系統中,你都可以通過C-x C-f ~/.emacs 來編輯您的個性化配置文件。
;;顯示時間
(display-time)
;;顯示行號
(column-number-mode t)
(show-paren-mode t)
;;設置TAB寬度為4
(setq default-tab-width 4)
;;以下設置縮進
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-brace-offset -4)
(setq c-argdecl-indent 4)
(setq c-label-offset -4)
(setq c-basic-offset 4)
(global-set-key "\C-m" 'reindent-then-newline-and-indent)
(setq indent-tabs-mode nil)
(setq standard-indent 4)
;;開啟語法高亮。
(global-font-lock-mode 1)
;;設置默認工作目錄
(setq default-directory "/home/test/source/")
;; 去掉滾動條
(set-scroll-bar-mode nil)
;;關閉開啟畫面
(setq inhibit-startup-message t)
(setq indent-tabs-mode t)
;;不產生備份文件
(setq make-backup-files nil)
;;設置自定義變量
(custom-set-variables
'(column-number-mode t)
'(current-language-environment "UTF-8")
'(display-time-mode t)
'(ecb-options-version "2.32")
'(mouse-1-click-in-non-selected-windows t)
'(mouse-drag-copy-region t)
'(mouse-yank-at-point t)
'(save-place t nil (saveplace))
'(show-paren-mode t)
'(transient-mark-mode t))
(custom-set-faces
;;選擇小工具欄圖標
(tool-bar-mode -1)
rectangle(列)模式編輯 和emacs shell(摘抄)
不敢獨享,與大家分享。也可以在Emacs中用C-x C-h列出全部命令,查找C-x r c,所有列模式命令都是以C-x r開始的
C-x r C-@ point-to-register
C-x r SPC point-to-register
C-x r + increment-register
C-x r b bookmark-jump
C-x r c clear-rectangle
先用C-space或者C-@設一個mark,移動光標到另一點,使用C-x r c可以清楚mark到光標處的矩形區域,該區域留下空白。
C-x r d delete-rectangle
刪除矩形區域,不留空白,后面的字符前移
C-x r f frame-configuration-to-register
C-x r g insert-register
C-x r i insert-register
將某個寄存器的內容插入某處
C-x r j jump-to-register
C-x r k kill-rectangle
就是剪切某個選定的矩形區域,用C-x r y可以貼上
C-x r l bookmark-bmenu-list
C-x r m bookmark-set
C-x r n number-to-register
C-x r o open-rectangle
在選定的矩形區域插入空白
C-x r r copy-rectangle-to-register
將選定的矩形區域復制到某個寄存器
C-x r s copy-to-register
C-x r t string-rectangle
在選定區域所有列前插入同樣的字符
C-x r w window-configuration-to-register
C-x r x copy-to-register
C-x r y yank-rectangle
類似于矩形區域的粘貼,就是將剛用C-x r k剪切的矩形區域粘貼過來
C-x r C-SPC point-to-register
摘自:http://chandlewei.blogbus.com/logs/15583440.html
在 Emacs 里面同時打開多個 shell 會話:
通過重命名shell所在緩沖區的名字可以開啟多個shell
E-x shell
E-x rename-buffer shellA
E-x shell
這時就開啟了兩個不相干的shell:shellA 和*shell*
也可以通過其他方式來開啟shell,例如:
1. M-x eshell 開啟Emacs Shell
2. M-x term 開啟linux終端,可以指定你要的終端SHELL。但是這個可能會攔截你的EMACS命令。
整理你的屏幕:
通過C-c C-o可以清除上次命令的輸出,特別是對于cat或dmesg這種產生大量輸出的命令。
詳細文章:http://www.ibm.com/developerworks/cn/aix/library/0811_yangbh_emacs2/index.html
文章來源:
http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!826.entry