Emacs的門檻低,入門容易,但要熟練使用卻很難。雖然在用,但總是沒系統沒計劃,所以用了幾年還總是原地踏步。要熟練Emacs應該沒那么難,主要就是忘掉老習慣培養新習慣,所以決定每月從Emacs的manual中翻譯出一些,慢慢養成Emacs的鍵盤習慣。
第一個月內容多些,但很多都已經在用了,再系統的整理一下并深入點了解,應該對提高工作效率有好處。
一、光標移動
C類命令
用于以字符、行、列等物理單位度量的光標移動
- C-f:向右(前,forward)移動一字符
- C-b:向左(后,backward)移動一字符
- C-p:移動到上一行(previous)
- C-n:移動到下一行(next)
- C-a:到行首
- C-e:到行尾
M類命令
用于以詞、句、段落等文本單位度量的光標移動
- M-f:向前(forward)移動一詞
- M-b:向后(backward)移動一詞
- M-a:到句首
- M-e:到句尾
- M-{:到上一段落 (注意大括號符號要用SHIFT鍵)
- M-}:到下一段落
其他命令
- M-r:循環使用可以把光標依次放在窗口中間、最上面和最下面一行的左邊;窗口內文本不動。
- M-<:卷屏到文檔開頭 (注意要用SHIFT鍵)
- M->:卷屏到文檔最后
- C-v:相當于PAGEDOWN,向下翻一屏,但與前一屏的內容留兩行
- M-v:相當于PAGEUP,向上翻一屏,但與前一屏的內容留兩行
- M-x-goto-char n:光標定位到字符n的位置,n是從文檔開始算起的字符數
- M-g M-g n:光標定位到第n行
二、刪除、撤銷(恢復)和重復操作
字符、詞和行刪除
- C-d:刪除光標后一個字符,相當于DELETE鍵
- C-k:刪除光標到行尾的字符(不包括換行符);如果光標位于行尾則只刪除換行符
- M-d:刪除從光標到下一個詞的開始間的字符(刪除詞)
- M-DEL:刪除從光標到上一個詞結束間的字符
空格和空行刪除
- M-\:刪除光標前后所有空格和制表符
- M-SPC:刪除光標前后空格和制表符到僅剩一個
- C-x C-o:刪除光標前后的空行到僅余1行
- M-^:刪除行縮進、連接兩行文本(從后向前合并)
撤銷操作
- C-/:撤銷前一個命令的操作,不能撤銷僅有光標移動的動作(或者用C-x C-u)
重復操作
- C-x z:該命令簡單重復前面一次操作(不管是鼠標點擊還是鍵盤輸入),連續幾個z就重復幾次,直到輸入的不是z或者鼠標點擊或者C-g取消
- C-u n:重復隨后的命令n次
三、文本塊標記(選擇)
任意位置間標記
- C-@:在光標處設置標記,光標位置不動。
- M-@:在光標處設置標記,光標位置不動,光標后的一個詞被加亮
- C-x C-x:在光標處設置標記,并把光標移到上一次設置標記的位置,兩個標記之間的文本被選擇。(可連續使用在標記文本的前后切換光標)
選擇和標記一行或多行:
C-A, C-E, C-N 或 C-P:在當前位置設置標記點,光標移動和C-a, C-e, C-n 或 C-p相同,加亮標記點和光標之間的文本。搜狗輸入法會攔截C-N命令,在輸入法設置中去掉即可。
整塊標記:
- M-h:選擇光標所在段落(段落間一般以空行間隔),光標移到段首,標記點在段末。
- C-x C-p:選擇當前頁面(屏),光標移到屏首,標記點在屏尾。
- C-x h:選擇整個文檔(buffer),光標移到文檔起始點,標記點在文檔最后。
使用體會:(1)標記和選擇在Emacs被合并成了一個概念,而顏色加亮倒成了一種表面形式:不管有沒有顏色加亮,標記點和光標之間的內容都已經被選擇;(2)多用、善用 C-x C-x 命令
四、拷貝、剪切和粘貼/召回
- C-w:剪切(還不習慣Emacs的kill概念)
- M-w:復制。如果你開著QQ,復制的鍵盤命令就變成了M-W
- C-y:粘貼。Yanking,像招魂一樣,有意思。
使用體會:在其他軟件中,一般被選擇(顏色加亮)的內容才稱為塊,才能進行拷貝和剪切。但Emacs只要設置了標記點,就可以對光標和標記點間的內容進行復制、剪切等操作;如果是復制操作,Emacs會在光標所在位置和標記點之間切換一下光標,可以讓用戶進行確認。
五、搜索與替換
相關命令很多,但如果嫌麻煩,記住兩個即可:
- M-%:即M-S-5,詢問替換
- C-M-%:正則表達式詢問替換
- 以上兩個命令回車后按提示分別輸入搜索和替換字符串,替換用空格鍵,如果不替換(僅搜索)用n(下一個)或p(上一個)。
其他搜索和替換命令:
- C-s:向前搜索(增量,輸入即開始搜索)
- C-r:向后搜索(增量,…)
- 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:正則表達式替換