每種工具都有它的設計理念,在接觸Vim的前後,我們會接觸大量的相關知識。
有幾個觀念與原則能幫助我們貫穿各個Vim的模式與命令操作,分別是:
底下我們分別詳述這四點。
日常的程式開發中,開發者花費大量時間瀏覽專案裡的檔案與相關程式,並在需要時透過滑鼠移動游標,移動游標以輸入新程式的頻率則相對比較低。Vim針對這種情況進行了優化,設計出了普通模式(Normal Mode)。此模式提供了許多命令,幫助我們有效將游標移動到目標位置,滾動頁面、搜尋文件等輔助閱讀與尋找的命令主要也都在此模式使用。
想像一下自己是一隻正在尋找獵物的老鷹。此時此刻正在天空翱翔,與此同時,我們保持開放的視野,俯瞰大地。一旦發現並鎖定目標,軀體便向下飛行至大地,一擊必殺,精準且不失優雅。同樣的,在普通模式裡面,我們先使用命令將游標移動至要修改的位置,之後我們進行相關操作。進入插入模式輸入一段新文字、使用c
、d
等相關命令修改、刪除內容,或是r
命令進行替換,視需要而定。
在《Practical Vim》一書裡,作者使用畫家作畫來比喻這些過程,畫家花時間構思整體畫作的佈局、光線、色彩,而後或使用鉛筆素描、或塗上特製的顏料、或用潑的、或用刻刀、或用其它工具,沒有說一定會使用畫筆。休息時,畫筆不會放在畫布上,這點與Vim的操作是相同的。
普通模式就是沒有對畫布進行操作時的自然狀態,在此狀態中我們放鬆地閱讀,想法與靈感在此階段自然浮現。而後選定目標,使用對應的方法修改畫布,實現想法。
在Unix哲學裡,「Do one thing well」是被奉為圭臬的原則。Unix的shell提供各命令解決不同問題,Vim的各個模式與命令分別處理不同職責的操作,完美體現此原則。
各別的shell命令能夠被pipe語法組合起來,處理更大的任務與需求。同樣的,在Vim 裡面我們可以組合各個命令,處理不同情境。
舉個例子,當我們要刪除底下a
到g
的文字,用單個命令是做不到的。
這時我們可以組合f
(find)與d
(delete)兩個命令。
Vim 裡面有f
${目標字元}
命令,用於搜尋(find)目標字元,並將游標移至找到的第一個字元上。ㄌ
普通模式下,當我們對圖文字使用f
、g
(find g
),游標就會移動同一行的g
上面。
f
(find)與 d
(delete)兩個命令接著,回到行首。我們在fg
命令的前面加上d
命令,也就是輸入d
、f
、g
,就會刪除a
到g
的字。結果如下圖所示。
很直覺地達成需求,是不是很方便呢?Vim有各種組合小功能解決大問題的方式,無法也不用急著一次學完。掌握心法,觸類旁通,是精通Vim的不二法門。