Emacs詳細教程

轉自:http://www.cnblogs.com/holbrook/archive/2012/02/15/2357335.html

內容提要

1.Emacs是什麼

2. Emacs能做什麼

3. Emacs的界面

4.基本概念--命令

5. 基本概念--快捷鍵

6. 基本概念--模式

Emacs學習筆記2: 初識Emacs

1.Emacs是什麼

其實很難給Emacs下一個定義。正統的說法也許是"Emacs即Editor MACroS(宏編輯器),是一種文本編輯器"。

最初人們認爲Emacs是一個編輯器(Editor),與Vim一起並稱爲兩大神器,據說Vim是編輯器之神而Emacs是神之編輯器,又據說世界上的程序員分三種,一種使用Emacs,一種使用vim,剩餘的是其它。

也有人認爲Emacs是一個架構在編輯器上的集成環境,除了最基本的編輯功能,還可以完成文件管理、終端模擬、瀏覽網頁、收發郵件、編譯程序等工作,以及煮咖啡。

更有人說Emacs是僞裝成編輯器的操作系統,甚至說Emacs是一種信仰

Emacs最初由RichardStallman在1975年開發,之後產生了衆多的衍生版本,而目前使用得最多的兩個版本是RichardStallman在1984年開發的GNUEmacs和1991年由JamieZawinski寫成的XEmacs。Emacs可謂歷史悠久,目前的GNU Emacs的版本是23.4。一部Emacs的歷史,等於一部計算機史,一部世界黑客史。本文不想將編輯器大戰的戰火燒到這裏,所以還是就此打住,來看看Emacs能做什麼。

2. Emacs能做什麼

王垠師兄如是說:

據我所知,Emacs 的能力包括:
1.    編輯文本
2.    編輯程序
3.    作爲其它程序的界面
4.    作爲操作系統
5.    煮咖啡


Emacs是一個具有超強擴展性,超強定製性的操作平臺,它能做什麼取決於你對它的定製和擴展。Emacs之所以強大,就來源於其近乎無限的可定製性和可擴展性。

3. Emacs的界面

未定製的Emacs如下圖所示:

0 1329317327v33B

整個窗口在Emacs中叫做frame,圖形界面下的Emacs可以打開多個frame。每個frame從上到下分成3部分,分別是緩衝區,狀態欄和回顯區。

緩衝區是編輯的主區域,但是在這裏操作的還不是真正的文件,而是文件的一個緩存(buffer)。只有執行寫入操作時,纔會將buffer的內容寫入到文件。緩衝區可以分成多個區域,緩衝不同的內容。這些區域在Emacs中成爲"窗口"。

緩衝區之下是狀態欄,顯示當前的一些狀態信息,比如圖中從左至右依次爲:
U: 當前的文件編碼是UTF-8, 如果是GBK會顯示c
**: 文件狀態,**表示未保存,--表示可寫,%%表示只讀
Emacs1: 是當前編輯的文件的名稱
All: 表示當前緩衝區已經顯示文件的所有內容,否則會顯示比如Bot,表示處於文件的末尾處
L23: 當前光標所在的行數
fundamental: 當前的模式
等等,不同發行版的Emacs顯示的狀態欄內容可能會有所不同。

最下面是回顯區,提示當前正在進行的操作。比如"文件已保存"之類的信息。如果一個命令沒有輸入完,這裏還會顯示已經輸入的指令,提示用戶。

4.基本概念--命令

對Emacs所有的操作都是通過調用命令實現的。對於一些常用的命令,會定義快捷鍵以便快速使用。
不管是否有快捷鍵,都可以通過M-x command 的方式執行命令。(M-x即Alt+x,是一種快捷鍵,後面會有介紹)比如輸入回車,相當於:
M-x newline
通過M-x執行命令時,可以使用 TAB 補全,使用 M-p 上翻, M-n 下翻。
Emacs中的取消通常是連按三下ESC:
ESC ESC ESC (M-x keyboard-escape-quit)
但是在命令執行過程中,有可能該命令無法使用(比如有些命令是交互式的,需要輸入一些參數),所以中止一條命令的執行最好使用C-g (M-x keyboard-quit)。

5. 基本概念--快捷鍵

本質上,快捷鍵只是一種發送命令的方法!
Emacs的快捷鍵通常以組合鍵的方式定義。如M-x 表示Alt+x。前面的字母M代表修飾符,Emacs定義的修飾符如下:
C-:Control
M-: Alt(應該是Meta,在 PC 上,Meta鍵 通常對應 Alt 鍵)
C-M-: 同時按住 Ctrl 和 Alt 
S-:Shift
RET:Return
TAB:Tab
ESC:Esc,等價於M-。比如,C-M-r ,等價於ESC C-r
SPC:空格鍵
DEL:退格鍵
Delete:刪除鍵

上面提到了ESC C-r。這是一種組合方式,表示先按ESC,再按C-r。Emacs中的很多快捷鍵定義成組合的方式。如 C-x C-c(M-x save-buffers-kill-emacs)
此外還有些命令可以傳遞參數,在Emacs的表示法中用 (#) 代表。如:
C-u (#) C-f 代表重複#次C-f

6.基本概念--模式

Emacs是一種“有模式”的編輯器。如果用過Vim就很容易理解。不過Emacs中的模式分成主要模式(major mode)和次要模式(minor mode)兩種。
主要模式由文件類型決定,每個buffer打開文件時會根據文件類型決定其主要模式。常見的主要模式有:

fundamental-mode:缺省的 Emacs 模式,擁有最少設置和綁定
text-mode:編輯文本的基本模式
c-mode:用於編輯 C 程序源代碼
lisp-interaction-mode:用於編輯和編譯 Lisp 代碼
ptex-mode:用於編輯 TeX 文檔



次要模式可以組合到主要模式中,常見的次要模式比如:

abbrev-mode:用於生成和使用縮寫
auto-fill-mode:用於自動文字迴繞、填充較長的行和段落
line-number-mode:顯示當前行號
overwrite-mode:覆蓋模式,代替默認的插入模式



可以通過命令來指定模式:M-x  mode_name
對於一個buffer來說,當前的主要模式只能有一種,當指定主要模式時,原來的主要模式會被替換;而當前的次要模式可以有多種。
如果輸入的模式包含在當前模式中,對於主要模式,會清空所有的次要模式;對於次要模式,會關閉這個次要模式。
模式的變化在狀態欄中可以看到。

Emacs學習筆記(3):幫助系統

GNU的軟件大多有豐富的幫助系統,學習GNU的軟件時,首先學習如何使用其幫助系統,往往事半功倍。Emacs的幫助文檔很多,並大部分都在C-h開頭的組合鍵中。

首先是C-h ?,關於幫助系統的“幫助”。改命令會打開一個新的Frame,如下圖:

0 1329368000o9y4

從該文檔中摘錄常用的幫助功能如下:

快捷鍵 命令 說明
C-h ?   關於幫助系統的幫助,可以通過SPC和DEL鍵滾動,通過ESC退出
C-h t M-x help-with-tutorial 進入 《Emacs 快速指南》
C-h r M-x info-emacs-manual Emacs使用手冊
C-h i M-x info 《Emacs說明》
C-h a M-x apropos-command 搜索命令》
C-h v M-x describe-variable 查看變量說明》
C-h f M-x describe-function 查看函數說明》
C-h m M-x describe-mode 查看當前mode的相關文檔,包含mode中的命令、快捷鍵等》
C-h k KEYS M-x describe-key KEYS 查看快捷鍵對應的命令及其簡要說明,比如C-h k C-x C-c,會告訴你C-x C-c是做什麼的》
C-h c KEYS M-x describe-key-briefly 查看鍵綁定說明》
C-h w M-x where-is 查看某個命令對應的快捷鍵》
C-h b M-x describe-bindings 查看當前buffer所有的快捷鍵列表》
KEYS C-h   查看當前buffer中以某個快捷鍵序列開頭的快捷鍵列表,比如C-c C-h》
  M-x apropos 查看匹配某個關鍵詞的任何東西,如函數,變量,命令,模式等》


1. C-h t 《Emacs快速指南》是迅速上手最好的文檔。

2. 使用幫助時,可能會分割出其它Frame,可以通過 C-x 1 關閉。


Emacs學習筆記(4):基本的編輯功能

掌握了Emacs的幫助系統,就可以自己隨時學習了。但是還是應該有一個主線。儘管Emacs能做的事情很多,但首先Emacs是一個編輯器。所以還是應該從文本編輯的功能開始。完成本節的內容後,可以應付日常的大部分編輯工作。

內容提要

  • 文件操作
  • 光標定位
  • 輸入刪除
  • 複製粘貼
  • 撤銷重做

 

1.文件操作

文件操作的快捷鍵都集中在C-x"菜單"中:

快捷鍵(C-x)     命令(M-x)                                          說明
C-x C-f              find-file                                              打開文件或錄
C-x C-c             save-buffers-kill-emacs                 保存退出
C-x C-z             iconify-or-deiconify-frame             掛起(最小化)
C-x C-f              find-file                                              打開文件、目錄
C-x C-r             find-file-read-only                            以只讀模式打開
C-x i                  insert-file                                           插入文件
C-x C-s             save-buffer                                       保存
C-x s                 save-some-buffers                          保存所有未保存的緩衝區
C-x C-w            write-file                                            另存爲文件
C-x RET r         revert-buffer-with-coding-system  以指定編碼讀取文件
C-x RET f         set-buffer-file-coding-system         以指定編碼保存文件
revert-buffer                                      恢復到原始狀態
C-x d                dired                                                   進入目錄列表模式
C-x C-d            list-directory                                      獲取文件列表(簡潔)

 

2. 光標定位

向前    向後    向下    向上        
翻頁                           C-v    M-v
字符        C-f       C-b     C-n    C-p
單詞        M-f       M-b
句           M-a      M-e
行           C-a       C-e
段落       M-{        M-}
緩衝區   M-<      M->

其它:
M-g M-g     (goto-line)                      跳轉到某行
M-x              (goto-char)                    跳轉到字符位置:     
C-M-l          (reposition-window)    將當前行卷至頁面中部
C-l               (recenter)                       刷新頁面,將將當前行卷至頁面中部 (使用數字參數指定行)
M-r M-x      (move-to-window-line) 移動光標至頁面中間的行 (使用數字參數指定行)

3.輸入刪除

輸入很簡單,在緩衝區直接敲鍵盤就OK了(這個不像Vim)

刪除:

向前        向後
字符     C-d         DEL
單詞     M-d        M-DEL 
行         C-k(刪除至行尾)
整行                   C-S-backspace
按表達式刪除    C-M-k
區塊     C-w
刪除連續空格     M-x delete-horizontal-space

注1:在PC中,用Backspace代替DEL
注2:單詞、行、區塊的刪除是kill,相當於剪切,會被放入kill-ring,字符及空格的刪除是delete

4.複製粘貼

複製前要先選擇:C-@開始區塊選擇,然後移動光標,選中的區域會高亮
剪切:前面"刪除"的部分包括了一些剪切操作,對區塊的剪切用C-w
複製:區塊複製用M-w,至於複製1行,複製1個單詞之類的功能,自己想辦法吧:(
粘貼: C-y:粘貼kill-ring堆棧的最後一次的內容
C-y 之後可以繼續M-y, 對Kill-ring中的內容依次召回

5.撤銷重做

撤銷: C-/  (每插入20個字符,視爲一個 undo 的單位)
重做: C-/ 後,依次輸入C-g C-/ 就可以redo


Emacs學習筆記(5):更有效率的編輯

前面學習了Emacs的基本編輯功能。爲了讓編輯更有效率,還需要了解:

  • 窗口管理
  • 緩衝區管理
  • 搜索和替換
  • 批量處理

 

窗口管理

C-x 2           split-window-vertically           水平分割
C-x 3           split-window-horizontally       豎直分割
C-x 1           delete-other-window             只保留當前窗格
C-x 0           delete-window                      關閉當前窗格
C-x o           other-window                        切換窗格
C-M-v           scroll-other-window             滾動下一個窗格

緩衝區管理

Emacs中,打開新的buffer,不會關閉原有buffer,而是需要手工操作:
C-x C-b          list-buffers               查看緩衝區列表
C-x b              switch-to-buffer       切換緩衝區
C-x k               kill-buffer                關閉緩衝區
其他:可以參考ibuffer.el擴展

搜索和替換

Emacs中的搜索包括增量搜索和一般搜索。增加搜索是每次在前一次搜索的結果基礎上繼續搜索。在增量搜索時,如果上一次搜索之後進行了其他操作,則需要連續按兩次快捷鍵才能召回關鍵詞。
可以選中區塊後在區塊內進行搜索

增量搜索

C-s M-x         isearch-forward                向前增量搜索 
C-r M-x          isearch-backward            向後增量搜索 
C-M-s M-x     isearch-forward-regexp    正則表達式向前增量搜索 
C-M-r M-x     isearch-backward-regexp 正則表達式向後增量搜索

一般搜索

M-x               search-forward                 向前搜索   
M-x               search-backward              向後搜索  
M-x               search-forward-regexp     正則表達式向前搜索  
M-x               search-backward-regexp 正則表達式向後搜索

替換

M-x                replace-string                  替換   
M-x                replace-regexp                正則表達式替換

詢問替換

M-% M-x       query-replace              詢問替換 
C-M-% M-x   query-replace-regexp 正則表達式詢問替換

取消搜索

C-g 取消搜索,光標返回搜索前的位置
RET結束搜索,光標停留在當前位置。

批量處理

批量處理的命令應該有很多,這裏列出2個:
選中區域, M-x untabify:將 TAB 字符轉換爲空格
選中區域, M-x indent-region:對齊文本塊


Emacs學習筆記(6):常用命令備忘(打印版)

博客搬家,加上換辦公區,Emacs的學習計劃就耽擱了。

可能是因爲年紀大了,記性大不如以前,新學的很多Emacs快捷鍵/命令都記不住。所以要整理一個常用命令清單(與當初學習Vim一樣),並且打印出來貼在電腦邊。

剛開始不可貪多,所以只整理了:
Key Mapping, Important, Help, File, Cursor,  Cut/Del/Copy/Paste, Buffer, Window, Undo/Redo, Search/Replace幾個部分,控制在2頁A4紙之內。

附圖如下:

不知道誰能告訴我,博客園可以上傳附件嗎?


macs學習筆記(7):簡單的配置

繼續Emacs學習計劃。這是“初學者”階段的最後一篇。完成本節的內容,就可以向“中級計劃”進軍了 : )

經過一段時間的使用,已經大體適應了Emacs的快捷鍵,不過還是要參考命令備忘表

Emacser通常要對Emacs進行定製,使用起來纔會爽。據說Vimer嘲笑Emacser的一個理由就是:

Emacser如果丟了配置文件就什麼都幹不了。

好吧好吧,這些爭論和我沒什麼關係,我只是恰好原來用Vim現在喜歡上了Emacs。還是回到Emacs的簡單定製吧。

1. 配置文件

Emacs的配置文件在~/.emacs。現在就用Emacs打開這個文件吧,如果沒有就創建一個。首先改一下顏色配置,讓Emacs看起來更酷一些:

(set-background-color "black") ;; 使用黑色背景
(set-foreground-color "white") ;; 使用白色前景
(set-face-foreground 'region "green")  ;; 區域前景顏色設爲綠色
(set-face-background 'region "blue") ;; 區域背景色設爲藍色


儘管可以重啓Emacs使配置生效,但更快捷的方式是在打開~/.emacs的時候執行命令M-x eval-buffer,就可以使配置文件立即生效。

2. 安裝插件

Emacs和Vim都有大量的插件,一些經久不衰、廣泛使用的插件組合起來,就體現出一種"集體智慧"。

Emacs的插件一般都是一個以el爲後綴名的文件。首先要指定一個插件目錄,比如~/.emacs.d/lisps然後在~/.emacs中指定插件目錄和要使用的插件:

(add-to-list 'load-path "~/.emacs.d/lisp/")
(require 'pluginname')

還是玩一下顏色設置。前面的方法只是進行了一些簡單的顏色設置,但是有熱心人寫了插件,配置好了很多方案,不僅僅是前景背景色,還包括語法高亮等。從這裏下載,解壓後將color-theme.el文件和themes文件夾複製到插件目錄,然後修改配置文件:

(add-to-list 'load-path "~/.emacs.d/lisp/")

(require 'color-theme)

(color-theme-initialize)

M-x eval-buffer使配置生效後,可以執行插件提供的命令:M-x color-theme-select RET進入配色方案選擇界面。我選擇的是Classic

Screenshot


選好之後,你可能希望將配色方案設成默認,還是修改配置文件。在配色方案選擇界面中選擇主題後按d,會出現該配置的提示信息,比如:

color-theme-classic is an interactive Lisp function in
`color-theme-library.el'.

(color-theme-classic)

Color theme by Frederic Giroud, created 2001-01-18.
AntiqueWhite on darkslategrey scheme.  Based on Gnome 2, with my favorit
color foreground-color and fontlock color.

將類似(color-theme-classic)的內容添加到.emacs中,就可以每次啓動Emacs時自動選擇配色方案了。

3. 進階

不要迷信自己,不要一開始就嘗試自己定製Emacs。一定要參考甚至抄襲大牛們的設置。比如Steve Purcell。學習他們的配置,不僅能讓你直接學會“最佳實踐”,更能加深你對Emacs的理解。

最後再回顧一下《Emacs初學者的學習計劃》:

1. 要學習必須有一個計劃

2. 認識Emacs,Emacs不僅僅是一個編輯器

3. 使用Emacs的幫助系統,隨用隨學

4. 掌握了基本的功能,就可以開始用,而且要多用

5. 其實你可以更快地編輯

6. 命令太多記不住,可以打印出來隨時查閱

7. 瞭解如何定製Emacs,並參考大師的配置

完成這些內容,可以說是對Emacs入門了,接下來可以學習如何用Emacs寫代碼,GTD,發郵件,瀏覽網頁等等,在實現這些目標的同時提高自己的Emacs水平,最終將Emacs上升到一種信仰。


發佈了19 篇原創文章 · 獲贊 6 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章