轉自: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如下圖所示:
整個窗口在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,如下圖:
從該文檔中摘錄常用的幫助功能如下:
快捷鍵 | 命令 | 說明 |
---|---|---|
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
選好之後,你可能希望將配色方案設成默認,還是修改配置文件。在配色方案選擇界面中選擇主題後按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. 要學習必須有一個計劃
5. 其實你可以更快地編輯
完成這些內容,可以說是對Emacs入門了,接下來可以學習如何用Emacs寫代碼,GTD,發郵件,瀏覽網頁等等,在實現這些目標的同時提高自己的Emacs水平,最終將Emacs上升到一種信仰。