前言:最近使用Emacs,因此整理了官方中文教程中的一些知識點和常用的命令,方便查閱使用。
對於用習慣Windows的人來說,想要入門Emacs不是一件特別容易的事,但好在Emacs提供了官方的教程文檔,比較清晰和詳盡的講述了Emacs的基本使用方法。
首先是Emacs的基本布局,如圖:
C-h-h查看幫助窗格
Emacs提供了大量幫助信息,可以在幫助窗格中查看。
C-h t 官方教程
C-h t可以打開官方的使用教程,本文檔基於此進行整理。
首先需要理解Emacs命令(快捷鍵)的構成:
值得注意的是,Emacs的命令提示中短橫線-表示組合鍵同時按下
例如C-h-h,就是在按下CONTROL鍵之后,按兩次h;而C-h h,則是在按下CONTROL鍵之后按一次h,松開CONTROL鍵再按一次h。
根據官方教程介紹:META 系列組合鍵用來操作“由語言定義的單位(比如詞、句子、段落)”,而 CONTROL
系列組合鍵用來操作“與語言無關的基本單位(比如字符、行等等),后面的快捷鍵可以體會到這一點。
Emacs各種基礎常用命令介紹:
命令 | 作用 | |
---|---|---|
常用控制命令 | C-x C-c | 退出Emacs |
C-z | 掛起Emacs,回到shell但不殺死Emacs進程。在常用的 shell 中,通常可以用“fg”或者“%emacs”命令再次回到 Emacs 中 | |
C-g | 退出正在運行的命令(包括C-u命令) | |
C-/ 或 C-_ 或 C-x u | 撤銷 Undo,可用C-u命令指定次數 | |
幫助命令 | C-h-h 或 C-h ? | 打開幫助,可以查看與幫助相關的命令有哪些 |
C-h b | 列出當前模式下的所有組合鍵命令及其效果 | |
C-h c | 其后接某個命令,用於在小緩沖區查看其作用,例如 C-h c C-p | |
C-h k | 其后接某個命令,用於打開一個新窗格顯示更多幫助信息 | |
C-h f | 其后接函數名,解釋一個函數,例如C-h f previous-line | |
C-h a | 相關命令搜索,用於列出與關鍵字相關的所有長命令名稱(可用M-x執行的命令),例如C-h a file | |
C-h i | 打開名為“*info*”的特殊緩沖區,可以閱讀安裝的軟件包使用手冊 | |
ESC ESC ESC | 通用的“離開”命令,可以用於關掉多余窗格、離開小緩沖區,或者退出“遞歸編輯”模式(狀態欄的編輯模式小括號外出現大括號表示進入遞歸編輯,例如【比如在用 M-% 進行交互式替換的時候你又用了 C-s 進行搜索,這時替換模式並沒有結束,但你又進入了搜索模式,這就是所謂的遞歸編輯。不能用 C-g 退出遞歸編輯,因為 C-g 的作用是取消“本層遞歸編輯之內”的命令和其參數(arguments)】 | |
移動光標命令 | C-v | 移動到下一屏,相當於PageDn |
M-v | 移動到上一屏,相當於PageUp | |
C-l | 重繪屏幕,將光標所在行置於屏幕中央 | |
C-p | 上一行,p代表previous | |
C-n | 下一行,n代表next | |
C-b | 向左移,b代表backward | |
C-f | 向右移,f代表forward | |
M-b | 向左移動一個“語言單位”(英文移動一個單詞,中文移動到標點符號) | |
M-f | 向右移動一個“語言單位”(同上) | |
C-a | 移動到一行的頭部 | |
C-e | 移動到一行的尾部 | |
M-a | 移動到句子的頭部 | |
M-e | 移動到句子的尾部 | |
M-< | 移動到所有文字(文檔)的最開始 | |
M-> | 移動到所有文字(文檔)的最末尾 | |
數字參數命令 | C-u (或按住META不放) | 指定數字作為其后命令的參數,如C-u 8 C-f 會向前移動8個字符,C-u 8 * 會輸入8個* |
窗格命令 | C-x 1 | 關閉其他窗格,保留光標所在窗格,注意是數字1不是小寫字母l |
C-x 2 | 分隔出兩個垂直窗格,水平分隔線 | |
C-x 3 | 分隔出兩個水平窗格,垂直分隔線,可以和C-x 2混合使用,例如:![]() |
|
C-x 0 | 關閉當前光標所在窗格,注意是數字0 | |
C-x o | 將光標移動到下一個窗格,注意是小寫字幕o | |
窗口命令 | M-x make-frame | 窗口由多個窗格及其菜單、滾動條、回顯區等組成。只有在圖形界面下能夠顯示多個窗口,文本終端中只能顯示一個窗口。該命令用於創建一個新的窗口(相當於Emacs多開)。 |
M-x delete-frame | 刪除選中的窗口 | |
插入刪除命令 | 對應Backspace鍵,刪除(Delete)光標前的一個字符 | |
C-d | 相當於Delete鍵,刪除(Delete)光標后的一個字符 | |
M- |
移除(Kill)光標前的一個詞,可粘貼 | |
M-d | 移除(Kill)光標后的一個詞,可粘貼 | |
C-k | 移除(Kill)光標到行尾的字符,可粘貼。其后所有的行都向上移動。單獨的 C-k 會把一行的內容移除,而第二個 C-k 則會移除換行符,但如果同時使用C-u命令,則會將多行連同其后的換行符一起移除,而不僅僅是重復 C-k 而已。比如 C-u 2 C-k 會把兩行以及它們的換行符移除 | |
M-k | 移除(Kill)光標到句尾的字符,可粘貼 | |
C-
|
![]() |
|
C-w | 剪切 Cut(Kill),w代表wipe | |
M-w | 復制 Copy | |
C-y | 粘貼 Paste,y代表召回(yank),用於召回前一次移除(Kill)的內容,通過同一個命令移除的內容可以被一次性召回(yank) | |
M-y | 召回上一次之前移除(Kill)的內容,需要先使用C-y命令,再使用該命令。不斷重復該命令直到找到想要召回的內容,用C-u可為其指定正或負數參數,表示執行次數和方向 | |
文件命令 | C-x C-f | 尋找一個文件,輸入的文件名出現在底部小緩沖區中(minibuffer)。該命令用於尋找不存在文件時,會創建一個新文件(並在保存文件時最終寫入硬盤) |
C-x C-s | 保存文件,如圖: ![]() |
|
C-x C-w | 寫入文件,類似於Save as,另存為 | |
緩沖區命令 | C-x C-b | Emacs將每個編輯中的文件存儲在緩沖區(buffer)中,每打開到一個文件,就開辟一個緩沖區。該命令用於列出所有緩沖區(注意緩沖區名稱與文件名並不總是相同)。例如:![]() |
C-x b | 該命令加緩沖區名稱,切換緩沖區 | |
C-x s | 保存多個緩沖區 | |
命令集擴展 | 擴展命令風格 | 由於Emacs命令眾多,不能都對應到CONTROL和META組合鍵上,所以采用擴展命令的方式來解決,包含兩種風格。C-x 字符擴展:在其后輸入另一個字符或組合鍵;M-x 命令名擴展:在其后輸入一個命令名。 |
C-x 擴展 | C-x擴展很常見,不贅述 | |
M-x擴展 | M-x擴展不常用,例如使用M-x replace-string進行字符串替換,會將光標之后的所有符合條件的文本進行替換:![]() |
|
自動保存的恢復 | M-x recover file | Emacs會定期將編輯的文件寫入”自動保存“文件,文件名首尾帶有”#“字符,該文件會在正常存盤后被刪除。可以使用該命令恢復自動保存的文件。 |
切換主模式 | M-x NAME-mode | 命令中的NAME表示主模式的名稱,例如fundamental-mode切換到缺省模式,python-mode切換到python模式等 |
切換Emacs外觀主題 | M-x customize-themes | 用於更換Emacs的外觀主題 |
擴展包查詢 | M-x list-packages | 列出可用的Emacs擴展包 |
搜索命令 | C-s | 向前搜索,輸入該命令進入“I-search”狀態。Emacs搜索命令屬於漸進式(incremental)的搜索,搜索與輸入同時進行 |
C-r | 向后搜索,輸入該命令進入“I-search backward”狀態 | |
替換命令 | M-x replace-string | 在前述M-x擴展部分提到過,用於替換光標之后符合條件的所有文本 |
M-% | 交互式替換,根據用戶的輸入查詢文本,詢問並替換 |
Emacs狀態欄介紹:
Emacs回顯區上方的一行是狀態欄包含當前緩沖區的一些信息,如下圖:
(1)編碼類型:狀態欄第一項為當前緩沖區所編輯文字的編碼類型,例如這里的U表示utf-8,c表示中文gbk等。
(2)文本換行方式:編碼類型后面是換行符表示方式,主要是三種類型,Unix、Mac和\,分別代表:
- Unix系統(如linux和近幾年的MacOS等)風格,每行以LF結尾,即"\n"
- Mac系統風格,每行以CR結尾,即“\r”
- Dos(包括Dox系統和Windows系統)風格,每行以CRLF結尾,即“\r\n”
(3)文本寫入權限:第一個*的位置,表示文本是否可以寫入,“*”表示可寫入,“-”表示只讀
(4)文本是否被修改:第二個*的位置,表示緩沖區文本是否被修改,“*"表示已被修改,”-“表示未被修改
(5)當前文件夾:圖中-所在位置,表示本地的當前文件夾(工作區)
(6)當前文件名:TUTORIAL.cn位置是當前緩沖區的文件名
(7)光標位置百分比:55%位置表示當前光標位置占全文的百分比,如光標在開頭則顯示--Top--,在結尾則顯示--Bot--。若文件很小,一屏就能顯示全部內容,則顯示--ALL--
(8)光標所在行:L之后給出光標所在行數
(9)主模式:最后的括號表示當前使用的編輯模式,類似於在VScode中選擇使用什么語言。Fundamental表示缺省模式,可用M-x fundamental-mode切換。C-h m命令可以查看主模式。主模式只能有一個。
(10)輔模式:與主模式對應,輔模式提供一些輔助功能,可以獨立開啟和關閉,如自動折行(Auto Fill)輔模式,使用M-x auto-fill-mode命令開啟,啟用之后Emacs會在打字超出一行邊界(通常為70個英文字符,可用C-x f命令重新設定,例如C-u 20 C-x f)時自動換行,同時,如果在段落中間進行修改,可用M-q手動折行。開啟輔模式之后,會在狀態欄主模式后方顯示。
寫在最后:因為Emacs可擴展性非常強,有很多擴展包可以使用,同時也帶來了一些組合命令的擴展,例如Standard ML語言編輯模式(sml-mode)下,C-c C-s 命令后輸入sml可用於開啟sml語言的命令行模式(交互模式)。所以Emacs只是一個工具,具體到各種語言的使用時,還有非常多需要學習的地方。