學習Emacs系列教程(一) :基本使用
上回開了個頭,簡單的介紹了Emacs的一些基本常識,這回繼續說基本常識,怎麼移動你的游標。可能有人會說,這上下左右鍵不是很好用嗎,還用你來講。呶,Emacs的強大在於你能夠只使用鍵盤左邊那堆鍵來完成任何事情(不包括頂上的ESC和Function),這也是Emacs的設計宗旨。
為了實驗這些按鍵,大家在進入Emacs時選擇頁面中間的Emacs Tutorial,這裡面可以隨便亂按不用擔心出什麼岔子。
一、基本導航
看下面這張圖片:
可以這麼記,p-previous,n-next,b-backward,f-forward。這裡所說的字元對於E文,就是一個字母,而中文是一個漢字,其實Emacs對中文支援還是很厚道的,後面慢慢可以看出來。不過在這兒我個人感覺這個游標移動沒有Vim方便,別人就HJKL,一個鍵就能動了,這需要兩個,Ctrl 有時還覺得按著很彆扭,不太和諧呀。
在按C-n 時,如果越過了頁尾,不像一般Windows編輯器是往下滾一行,而是往下滾半夜,當前游標會置於頁面中間。C-p 也是一樣的。
另外兩個使用較多的是C-v 往下翻頁,M-v 往上翻頁。呃,還有一個C-l 就是把當前行提到頁面中間,感覺Emacs對頁面中似乎情有獨鐘啊。
二、中級導航
按字元移的上節說了,然後說按單詞移動:
M-f 向前移動一個單詞,Emacs理解的中文單詞是兩個標點符號之間的東西,所以中文就是移到下一個標點符號的位置。往回是M-b ,向後移動一個單詞。
C-a 移動到行首,C-e 移動到行尾。
M-a 移動到句首,M-e 移動到句尾,在中文中一般就是跑到句號的位置,這裡我不得不說一下,現在很多年輕人寫文章有一逗到底的習慣,就只在文章最後加個句號,如果用Emacs來看你的文章,一個M-e 啥都不用幹了。作為一個有一定文學素養的人,在此我嚴厲反對這種寫文章的作風,不和諧。
M-} 移動到下一段, M-{ 移動到上一段。
還有兩個跑的更快的導航,M-< 移到文檔首,這裡要注意是小於符號<,不是逗號, ,所以我們是按Alt + Shift + , 切記。移到文檔尾是M->。
C-x [ 和 C-x ] ,分別是往上一頁和往下一頁。這裡頁是由分頁符控制的,在Emacs Tutorial 中是沒有分頁符的,所有這兩個鍵會跑到文檔頭和文檔尾去。
例圖:
陰影處是當前游標的位置,其它箭頭所指是按相應鍵後游標的位置。
三。進階導航
可以這麼來看基本導航是普通人用的,中級導航是高手採用的,進階導航是磚家、叫獸用的。
M-r 移動到頁面中間行首位置,holly shit,又是頁面中間,真XX陰魂不散。
M-x goto-char (n),這個比較複雜,先按M-x,然後空格輸goto-char斷行符號,另外Emacs有Tab鍵補全功能,大家可以試試,如果有多個選項會有提示,最後輸入一個整數。這個東西會移動到從頭數第n個字元的位置,我估計不會有人變態到能記住每個字是第幾個字元。
M-g M-g [n],按兩次M-g,不用斷行符號,提示輸入一個數字,移動到指定行n,兩個M-g,也可以輸M-g g 。
還有一個比較罕見的,C-x C-n, 這個是設定當前列為目標列。這是什麼意思呢,本來我們按C-n 和C-p 時,游標會往下或往上移一行,而列的位置就是當前游標列的位置,除非下一行列沒那麼多(就是字元沒那麼多),游標會到距當前列最近的列。而我們可以用這個按鍵組合重新設一個目標列,這樣在按C-n 和C-p 時,游標會跑到我們設的目標列上。如果你不幸按了,而且又不習慣,可以使用C-u C-x C-n 來取消目標列設定。補充一點,這兩個命令都是禁用命令,是Emacs考慮大家多半不會用,而且比較怪的命令,所以通常就禁用了,你不小心調出時會給出提示問你是否需要繼續。就像這個樣子:
大家按個空格稍微試下就行了。
最後還有兩個重複命令:
M-n, n是數字,意思是重複下個命令n次,比如M-3 C-f,就是向前移三個字元。
C-u n,n還是數字,也是重複下個命令n次。 如果省略n,就是4次。按兩次C-u,就是重複16次。
小結:
按鍵 |
命令 |
作用 |
C-f |
forward-char |
向前一個字元 |
C-b |
backward-char |
向後一個字元 |
C-p |
previous-line |
上移一行 |
C-n |
next-line |
下移一行 |
M-f |
forward-word |
向前一個單詞 |
M-b |
backward-word |
向後一個單詞 |
C-a |
beginning-of-line |
移到行首 |
C-e |
end-of-line |
移到行尾 |
M-e |
forward-sentence |
移到句首 |
M-a |
backward-sentence |
移到句尾 |
M-} |
forward-paragraph |
下移一段 |
M-{ |
backward-paragraph |
上移一段 |
C-v |
scroll-up |
下移一屏 |
M-v |
scroll-down |
上移一屏 |
C-x ] |
forward-page |
下移一頁 |
C-x [ |
backward-page |
上移一頁 |
M-< |
beginning-of-buffer |
移到文檔頭 |
M-> |
end-of-buffer |
移到文檔尾 |
M-g g n |
goto-line |
移到第n行 |
(none) |
goto-char |
移到第n個字元 |
C-l |
recenter |
將當前位置放到頁面中間(Emacs最喜歡的地方) |
M-n |
digit-argument |
重複下個命令n次 |
C-u n |
universal-argument |
重複下個命令n次,n預設為4 |
註:這裡命令這列就是按了M-x後輸的東東。