一、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、[email protected]、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 [email protected] 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或者[email protected]設一個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