常用指令
Emacs 快捷鍵是可以修改的,所以不一定要全部記住,只需要熟悉基本功能和知道有其他方便的擴充功能即可
Emacs 基本
- C → Ctrl
- M → Alt 或 esc
- S → Shift
- [Ret] → return(enter)
- 範例
- C-c → Ctrl + c
- C-c C-f → Ctrl + c, 放開 c, 按下 f,也可以分開來按,但較慢
- 「hello.c」的自動儲存檔案的檔名就是「#hello.c#」。儲存檔案後,自動儲存檔就會被刪除
- Ctrl 通常是對一個字操作, Alt 通常是對一個詞,或一個句子操作
- 每一個 Emacs 的指令都有名稱,可以用
M-x [command]
來下指令
Emacs 移動
指令
介紹
M-v, C-v
上翻 / 下翻一頁
M-b, M-f
往前 / 往後 移動一個詞
M-a, M-e
移動到一句的開始 / 結尾 (程式碼的一個段落)
C-l
移動視窗 (遊標分別在中間、最上方、最下方)
M-g M-g
跳至指定行 (= M-g g)
M-m
將游標移到該行第一個字元 (比 C-a 好用)
Emacs 編輯
指令
介紹
C-j
換行並自動縮排 (newline-and-indent)
C-SPACE
開始選取文字 (再按一次結束選取)
C-x C-x
改變選取的方向
C-x h
全選
M-h
選擇遊標所在的段落
C-w/M-w
剪下 / 複製 選取文字
C-y
貼上選取文字
M-y
改變貼上的文字 (從之前剪下 / 複製過的文字中,由新到舊出現)
C-d
同 delete
鍵 (刪除後一個字)
M-d
刪除後一個詞
M-del
刪除前一個詞
C-g
取消尚未完成的指令
C-k
: 刪除從游標到「行尾」間的字元
單獨的 C-k 會把一行的內容殺掉
而第二個 C-k 則會殺掉那一行本身 (‘\n’)。使所有其他的行向上移動
C-x u
: 還原
(1) 沒有改變文字的指令不算(移動游標和視窗等)
(2) 自行鍵入的字元 一次最多還原 20 個
重複
指令
介紹
示範
C-u [數字] [指令 or 字元]
重複執行
C-u 8 a → aaaaaaaa
M-[數字] [指令 or 字元]
重複執行
M-8 a → aaaaaaaa
Emacs 搜尋
指令
介紹
C-s
往後搜尋 (再按一次:找下一個)
C-r
往前搜尋
M-C-s
正規表示式搜尋
M-%
取代
y
或 space:置換目前游標所在的字串,並且移到下一個可被置換的字串n
:跳過目前游標所在的字串。移到下一個可被置換的字串ESC
:結束置換模式.
:置換目前的字串,並離開置換模式!
:將整個檔案一次置換完畢,不進行任何詢問^
:回到前一個符合置換的地方C-r
: 進入 recursive-edit 模式M-C-c
: 結束 recursive-edit 模式
Emacs 分割 (window)
在螢幕上顯示多個編輯區,我稱為分割
指令
介紹
C-x 0
關閉目前分割
C-x 1
關閉其他分割 (只留下目前的分割)
C-x 2
新增水平分割
C-x 3
新增垂直分割
C-x o
跳到別的分割 (在現有的分割循環)
M-C-v
捲動另一個分割
C-x 5 2
開新視窗 (frame)
Emacs 檔案
Emacs 檔案切換
指令
介紹
C-x C-b
列出檔案清單 (Buffer List)
C-x b
切換至其他開啟的檔案
C-x k
關閉目前編輯的檔案 (不存檔)
Emacs 檔案指令
指令
介紹
C-x C-f
開新檔案,開啟舊檔
C-x 4 f
在新分割開啟檔案
C-x C-s
儲存檔案
C-x s
全部檔案儲存
C-x C-w
另存新檔
C-x d
開啟資料夾 (Dired)
C-x C-v
取代目前檔案 (find-alternate-file, 開錯檔案的時候用)
Emacs 系統
指令
介紹
C-x C-c
結束 Emacs
C-z
暫時離開 Emacs (Suspend)
用 fg
或 %emacs
恢復 Emacs
Emacs 函式
指令
介紹
M-x [function]
執行名為 [function] 的指令
M-x compile
編譯 (會開啟 compilation 分割)
M-x recompile
重覆執行上次執行過的 compile 指令
C-x `
跳到下一個有編譯錯誤的地方
M-x gdb
用 gdb 除錯
M-x shell
開啟 shell 分割
需要在 Shell 下的慣用命令前加上 C-c
如 C-c C-c
為中止程式;C-c C-z
為暫停程式等
Emacs 幫助
指令
介紹
C-h ?
開啟 Help 分割
C-h c [指令]
在命令列顯示簡短解釋
C-h k [指令]
在新分割顯示詳細解釋
C-h f [函數]
在新分割顯示說明文件
C-h w [函數]
查詢此函數的快捷鍵
C-h m
瀏覽現在模式的文件 (C, C++, text…)
C-h a
列出所有「含有此關鍵字」的全部函式(Command Apropos)
C-h i
開啟 info 分割
其他
指令
介紹
M-C-\
選擇區塊自動縮排 (indent-region)
M-;
在句尾加入註解
M-^
將此行併入上一行
C-t
對調兩字元
M-t
對調兩單字
C-x C-t
對調兩行
M-c
將字的第一個字母改為大寫 (Capitalize)
M-u
將單字改為大寫 (Upper)
M-l
將單字改為小寫 (Lower)
C-x i
插入其他檔案的內容 (insert-file)
Emacs 技巧
自動完成
M-/
可重複輸入以改變
移動至定義 (goto declaration)
-
建立 tag 檔
1 2 3 4
# for c, c++ file find . | grep “.*\.\(c\|h\|cpp\)” | xargs etags -f tags # output filename “tags” # for python file find . -type f -name ‘*.py’ | xargs etags -f tags
-
在 Emacs 中用
M-.
進行搜尋 -
C-x 4 .
: 在另一個分割開啟定義
M-*
回到前一個定義的位置
回到之前的遊標位置
在搜尋或尋找定義之後很好用
C-u C-space
Emacs 作為 IDE 使用
function compile
執行編譯命令 (make, g++ …)
function recompile
重復之前的編譯命令
可將其設為快捷鍵
編譯成功後自動關閉 compilnation 分割 智慧編譯:自動偵測檔名或 makefile 並編譯
Sublime Text + Emacs 快速鍵
https://github.com/grundprinzip/sublemacspro
Emacs 巨集 (Macro)
指令
介紹
C-x (
開始定義巨集
C-x )
結束巨集定義
C-x e
執行上一個定義的巨集
M-[Num] C-x e
將上一個定義的巨集執行 Num 次
C-u C-x (
執行上一個定義的巨集,然後可以加上按鍵以重新定義巨集
C-x q
將巨集定義中插入查詢
C-u C-x q
將巨集定義中插入遞迴編輯
M-C-c
跳出遞迴編輯
name-last-kbd-macro
: 將上一個定義的巨集存檔之前予以命名
load-file
: 載入儲存的 lisp 程式碼巨集
macroname
: 執行儲存過的”macroname” 巨集
insert-kbd-macro
: 將命名過的巨集以 lisp 程式碼印出
應用:在 EmacsMacro.el
中儲存巨集程式碼,並在.emacs
中寫入
1 2
;;load my macro file (load “~/EmacsMacro”)
Emacs + Latex
安裝: sudo apt-get install texlive-full
“:插入 ```’ 或 ''' 或
“‘ 符號
M-x validate-tex-region:檢查每一段文稿是否有不平衡的大括號
或錢字號。
C-c {:插入 {}' 並將游標移至左右大括號之間 C-c }:將游標移至下一個右大括號的右端 C-c C-o:插入 LaTeX 區段標記
\begin’ 及 \end’ 並將游標移至
二者間的空行
C-c C-e:為前一個不平衡的 `\begin’ 加上 \end’
編譯
-
C-c C-f:對目前所在的檔案執行 TeX/LaTeX 的編譯
-
C-c C-r:對一段區域 (region) 執行 TeX/LaTeX 的編譯
- 不論是 TeX 或 LaTeX 都包含了一段有關全文的訊息在整篇文稿的開端,若是僅僅編譯所指定的區域而忽略了這段訊息的話,將會產生錯誤的結果。為了解決這個問題,必需在文稿中標明 header 的位置,然後在 用 C-c C-r 命令時 emacs 會自動將 header 中的訊息讀入處理。在 TeX 中標明 header 的方法是在 header 段落前後插入
%start of header' 和
%end of header}’
- 不論是 TeX 或 LaTeX 都包含了一段有關全文的訊息在整篇文稿的開端,若是僅僅編譯所指定的區域而忽略了這段訊息的話,將會產生錯誤的結果。為了解決這個問題,必需在文稿中標明 header 的位置,然後在 用 C-c C-r 命令時 emacs 會自動將 header 中的訊息讀入處理。在 TeX 中標明 header 的方法是在 header 段落前後插入
-
C-c C-b:對整個目前所在的緩衝區 (buffer) 執行 TeX/LaTeX 的編譯
-
C-c C-r 和 C-c C-b 並不會產生如 *.aux 等的附屬檔,因此無法執行 cross-reference 等工作。如果需要產生附屬檔則必需使用 C-c C-f
-
C-c TAB:對目前所在的檔案執行 BibTeX 的編譯
-
C-c C-v:預覽 C-c C-r, C-c C-b 或 C-c C-f 編譯的結果
-
C-c C-k:終結 (kill) 目前進行中的 TeX/LaTeX 程序 (process)
-
C-c C-p:列印 C-c C-r、C-c C-b 或 C-cC-f 編譯的結果
-
C-c C-q:顯示目前的 printer queue
Emacs + Git
畫簡單的 ASCII 圖
Emacs + Markdown Mode
有些指令直接輸入比較快…
指令
介紹
C-c C-t [N]
插入第 N 級的標題
C-c C-a l
插入鏈接,格式為 [text](url)
C-c C-i i
插入圖像,格式為 
C-c -
插入水平線
S-Tab
在大綱視圖、目錄視圖、及正常視圖間切換
C-c C-c m
預覽 HTML
C-c C-c p
在瀏覽器中預覽
Emacs + Screen
因為 Emacs 的快捷鍵和 Screen 重複,要自己在.screenrc
設定檔修改
- 在
.screenrc
中新增escape ^vv
即可將 所有 C-a 改為 C-v - 在
.screenrc
中新增escape ^l^l
即可將 所有C-a
改為C-l
,且在輸入C-l C-l
時可以跳脫 screen 指令 (等同在 terminal 輸入C-l
) - 修改教學
在使用 Emacs 時,適合 bind 到 screen 的 key: C-v(scroll-up-command), C-space(set-mark-command), C-t(transpose-chars), C-d(delete char), C-l(recenter-top-bottom) 其他都太常用或是不能 bind (C-z, C-q, C-m, C-i),不然就要用 C-S 系列
終端機指令 screen -list 可以列出你目前的所有 screen 會話 (同時可有多個 screen) screen -r [detached screen] 回復 detach 的 screen screen -wipe 砍掉不要的 screen
screen 內指令共同前綴 C-a C-a c - 開新分頁 C-a n - 切換到下一個分頁 C-a p - 切換到前一個分頁 C-a C-a - 切換到最近用過的分頁 C-a [N] - 跳到編號 N 的分頁 C-a w - 列出開啟的分頁 (簡短) C-a “ - 列出所有的分頁提供切換 C-a k - 關閉目前分頁
C-a S - 將螢幕水平分割 C-a - 在分割的區域之間切換焦點
C-a C - 清除目前的分頁內容 C-a H - 儲存目前分頁記錄(檔名為 screenlog.n, n 為視窗號碼) C-a x - 鎖定 screen,需要輸入使用者密碼 C-a d - Detach screen,暫時脫離 screen,程式會持續進行,你可以在重開終端機或重新登入後再連接到剛才的那個 screen (當然,重開機會不見)
C-a [- 編輯模式 (操作和 vi 相似…)
- h, j, k, l 分別為向左,向下,向上,向右移動一格(或是一行)
- ^ 與 $ 分別移到該行最左邊及最右邊的非空白字元
- w 以字為單位往前移動並移到字首
- b 以字為單位往後移動並移到字首
- e 以字為單位往前移動並移到字尾
- C-b 向上捲一頁
- C-f 向下捲一頁
- / 與?向下或向上尋找字串
- space 第一次按下到第二次按下的區域會被複製
- C-a ] 貼上
- 非指令的輸入會離開編輯模式
套件安裝
其他功能
Replacing-text-across-multiple-files
不重要的功能
- 放大字體: C-x C-+ 或 C-x C-=
- 縮小字體: C-x C-–
- 重置字體: C-x C-0
Emacs 小知識
名稱: Emacs 是 「編輯巨集」[Editing MACroS] 的簡稱
前綴
- 一些不是特別常用的函數綁定到前綴 C-x 上。例如 C-x C-c 退出 Emacs, C-x 2 水平分割當前 window
- 與某個 mode 相關的的函數被綁定到前綴 C-c 上
- 最不常用的函數根本沒有鍵綁定,而是使用 M-x 然後輸入函數名來調用他們
- 前綴 C-x 4 被保留作操作另外一個 window 用的函數,例如 C-x 4 C-f 在另 外一個 window 裡面打開文件
- 前綴 C-x 5 被綁定到操縱其他 frame 的 函數上面
殺掉
- 被殺掉的可以拉回,而被刪除的則不能
delete
,backspace
都是刪除C-k
,C-w
,M-w
等指令都是殺掉- 如果連續地做了數次 C-k,所有被殺掉的文字都會被儲存在一起,因此做一次 C-y 就會把所有這些行都拉回來
- 將被殺掉的文字回復的動作稱為「拉回( yanking )」
C-y
會把最近殺掉的拉回來,前幾次殺掉的文字可以用M-y
來回複- 可以給
M-y
正的或是負的參數來回到之前殺掉的東西
搜尋
- Emacs 搜尋指令是「漸進的( incremental )」,搜尋發生在遊標後
- 如果鍵入『u』,游標會移動到「cu」的第一次出現位置。將「u」從 s 搜尋字串中消除,游標會移回到「c」的第一次出現位置
設定檔:家目錄的.emacs
,可修改 Emacs 設定
BASH 上預設的控制模式是 Emacs,也就是說可以使用 C-a, C-f, C-b 等移動鍵,C-r 搜尋歷史指令,C-n, C-p 切換歷史指令,C-k 殺掉文字, C-j 執行指令等等。
和 Emacs 不一樣的地方有 C-h
往前刪除一字元,C-w
清除游標以前的一個單字,C-u
清除游標以前所有的字元。
快速設定
使用現成的設定檔
Reference
指令大全 Sams Teach Yourself Emacs in 24 Hours 一年成為 Emacs 高手 (有常用套件推薦)