Monday, July 16, 2012

Vim基本心法 - 移動系

你聽說Vim的學習曲線很高而卻步嗎?

你正在學習Vim,但卻因指令難以記憶而苦惱嗎?

Vim和Emacs是電腦高手的唯二選擇。其實Vim的指令設計是很合理的。只要了解一個大觀念:
Vim是上古神器,那時會用電腦的人都會寫程式。
另外一個小觀念是:懶惰是程序員的美德,若可以的話,手盡量不移動位置,用右手去拿滑鼠這件事更是萬萬不可。

第一問: 為什麼Vim預設會進入命令模式而非編輯模式呢? 為什麼我不能夠一開始就打字呢?
試想你打開程式時,大多的時間在閱讀,編程的時間相對的少,所以一開始進入移動模式會比較有效率。

復述一遍:懶惰是程序員的美德,因此在命令模式下通常只需要一個按鍵就可以自在的移動。

用Vim打開你的一個檔案吧,如果沒有可供練習的檔案,可以打開Vim的求助檔案
:help<enter>

移動系四招共21個指令
左下上右 h j k l
移動游標是基本,而上下左右則是中的基本,所以就用右手最容易按的四個鍵hjkl。那為什麼j是下一行呢? 想想我們最常按的鍵就是"下一行",所以跟最容易按的右手食指j配對正好。決定j代表下一行之後,右邊的k就當作"上一行",再來就用左邊的h表示向左和右邊的l表示向右。

螢幕頂中底 H M L
除了上下移動,你有時會想移動游標到螢幕的頂部,中間,或是底部。這時就可以用按鍵H (High)移到頂部,M(middle)到中間,以及L(low)到底部。至於為什麼是大寫呢? 因為h和l已經被當成左右了呀。

到指定行 G

xG
x是行號。這指令很簡單,G就是go。

那要如何回到第一行呢? 可以用1G,但是可以用gg更為簡短。

在句子中遊走 web 0^$
w 是移動到下移個word的起始
e 是移動到此word的結束
b 是移動到前移個word的起始
0 是移動到此行的開頭。為什麼是0而不是1呢?我認為這是因為C語言中陣列的開頭是第0個字元而非第1個字元。
^是移動到此行的第一個非空白字元。選用^的原因是它可以被稱為hat,而帽子就是戴在頭上的囉。
$ 是移動到此行的最末端。選用$的原因我還不清楚:p

搜尋和跳躍 /? nN *#
/ 後面加上要搜尋的字串,就會跳到該字串。使用 / 作為指令的原因我猜是因為 slash 和 search 聽起來很像
? 和 / 相似,唯一個差別在於 ? 是用於向前搜尋。使用?的理由就是因為它和/是同一個按鍵。
n和N要配合/?使用。n就是搜尋下一個符合的字串。N是搜尋前一個符合的字串。如果一開始用 / 搜尋的話,n會往文章的後面搜尋,N則會往前面搜尋。如果是用 ? 搜尋的話,方向會相反過來。

學會這21個指令後,有沒有發覺Vim比其他的編輯器更強大呢?