Emacs詳細教程

iam笨笨發表於2020-12-26

轉自: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 tM-x help-with-tutorial進入 《Emacs 快速指南》
C-h rM-x info-emacs-manualEmacs使用手冊
C-h iM-x info《Emacs說明》
C-h aM-x apropos-command搜尋命令》
C-h vM-x describe-variable檢視變數說明》
C-h fM-x describe-function檢視函式說明》
C-h mM-x describe-mode檢視當前mode的相關文件,包含mode中的命令、快捷鍵等》
C-h k KEYSM-x describe-key KEYS檢視快捷鍵對應的命令及其簡要說明,比如C-h k C-x C-c,會告訴你C-x C-c是做什麼的》
C-h c KEYSM-x describe-key-briefly檢視鍵繫結說明》
C-h wM-x where-is檢視某個命令對應的快捷鍵》
C-h bM-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上升到一種信仰。

相關文章