vim的學習曲線相當的大(參看各種文本編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。非常不錯。
——————————正文開始——————————
你想以最快的速度學習人類史上最好的文本編輯器VIM嗎?你先得懂得如何在VIM倖存下來,然後一點一點地學習各種戲法。
Vim the Six Billion Dollar editor
Better, Stronger, Faster.學習 vim 並且其會成為你最後一個使用的文本編輯器。沒有比這個更好的文本編輯器了,非常地難學,但是卻不可思議地好用。
我建議下面這四個步驟:
存活感覺良好覺得更好,更強,更快使用VIM的超能力當你走完這篇文章,你會成為一個vim的 superstar。
在開始學習以前,我需要給你一些警告:
學習vim在開始時是痛苦的。需要時間需要不斷地練習,就像你學習一個樂器一樣。不要期望你能在3天內把vim練得比別的編輯器更有效率。事實上,你需要2周時間的苦練,而不是3天。第一級 – 存活
安裝 vim啟動 vim什麼也別幹!請先閱讀當你安裝好一個編輯器後,你一定會想在其中輸入點什麼東西,然後看看這個編輯器是什麼樣子。但vim不是這樣的,請按照下面的命令操作:
啟 動Vim後,vim在 Normal 模式下。讓我們進入 Insert 模式,請按下鍵 i 。(陳皓注:你會看到vim左下角有一個–insert–字樣,表示,你可以以插入的方式輸入了)此時,你可以輸入文本了,就像你用“記事本”一樣。如果你想返回 Normal 模式,請按 ESC 鍵。現在,你知道如何在 Insert 和 Normal 模式下切換了。下面是一些命令,可以讓你在 Normal 模式下倖存下來:
i → Insert 模式,按 ESC 回到 Normal 模式.x → 刪當前光標所在的一個字符。:wq → 存盤 + 退出 (:w 存盤, :q 退出) (陳皓注::w 後可以跟文件名)dd → 刪除當前行,並把刪除的行存到剪貼板裡p → 粘貼剪貼板推薦:hjkl (強例推薦使用其移動光標,但不必需) →你也可以使用光標鍵 (←↓↑→). 注: j 就像下箭頭。:help <command> → 顯示相關命令的幫助。你也可以就輸入 :help 而不跟命令。(陳皓注:退出幫助需要輸入:q)/<command>你能在vim倖存下來只需要上述的那5個命令,你就可以編輯文本了,你一定要把這些命令練成一種下意識的狀態。於是你就可以開始進階到第二級了。
當是,在你進入第二級時,需要再說一下 Normal 模式。在一般的編輯器下,當你需要copy一段文字的時候,你需要使用 Ctrl 鍵,比如:Ctrl-C。也就是說,Ctrl鍵就好像功能鍵一樣,當你按下了功能鍵Ctrl後,C就不在是C了,而且就是一個命令或是一個快鍵鍵了,
標記:
下面的文字中,如果是 Ctrl-λ我會寫成 .以 : 開始的命令你需要輸入 <enter>回車,例如 — 如果我寫成 :q 也就是說你要輸入 :q<enter>./<enter>/<enter>第二級 – 感覺良好
上面的那些命令只能讓你存活下來,現在是時候學習一些更多的命令了,下面是我的建議:(陳皓注:所有的命令都需要在Normal模式下使用,如果你不知道現在在什麼樣的模式,你就狂按幾次ESC鍵)
各種插入模式a → 在光標後插入o → 在當前行後插入一個新行O → 在當前行前插入一個新行cw → 替換從光標所在位置後到一個單詞結尾的字符簡單的移動光標0 → 數字零,到行頭^ → 到本行第一個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等)$ → 到本行行尾g_ → 到本行最後一個不是blank字符的位置。/pattern → 搜索 pattern 的字符串(陳皓注:如果搜索出多個匹配,可按n鍵到下一個)拷貝/粘貼 (陳皓注:p/P都可以,p是表示在當前位置之後,P表示在當前位置之前)P → 粘貼yy → 拷貝當前行當行於 ddP花點時間熟悉一下上面的命令,一旦你掌握他們了,你就幾乎可以幹其它編輯器都能幹的事了。但是到現在為止,你還是覺得使用vim還是有點笨拙,不過沒關係,你可以進階到第三級了。
第三級 – 更好,更強,更快
先恭喜你!你乾的很不錯。我們可以開始一些更為有趣的事了。在第三級,我們只談那些和vi可以兼容的命令。
更好
下面,讓我們看一下vim是怎麼重複自己的:
. → (小數點) 可以重複上一次的命令N<command> → 重複某個命令N次/<command>下面是一個示例,找開一個文件你可以試試下面的命令:
更強
你要讓你的光標移動更有效率,你一定要了解下面的這些命令,千萬別跳過。
NG → 到第 N 行 (陳皓注:注意命令中的G是大寫的,另我一般使用 : N 到第N行,如 :137 到第137行)gg → 到第一行。(陳皓注:相當於1G,或 :1)G → 到最後一行。按單詞移動:w → 到下一個單詞的開頭。e → 到下一個單詞的結尾。> 如果你認為單詞是由默認方式,那麼就用小寫的e和w。默認上來說,一個單詞由字母,數字和下劃線組成(陳皓注:程序變量)> 如果你認為單詞是由blank字符分隔符,那麼你需要使用大寫的E和W。(陳皓注:程序語句)下面,讓我來說說最強的光標移動:
% : 匹配括號移動,包括 (, {, [. (陳皓注:你需要把光標先移到括號上)* 和 #: 匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)相信我,上面這三個命令對程序員來說是相當強大的。
更快
你一定要記住光標的移動,因為很多命令都可以和這些移動光標的命令連動。很多命令都可以如下來幹:
<start><command>/<command>/<start>
例如 0y$ 命令意味著:
0 → 先到行頭y → 從這裡開始拷貝$ → 拷貝到本行最後一個字符你可可以輸入 ye,從當前位置拷貝到本單詞的最後一個字符。
你也可以輸入 y2/foo 來拷貝2個 “foo” 之間的字符串。
還有很多時間並不一定你就一定要按y才會拷貝,下面的命令也會被拷貝:
d (刪除 )v (可視化的選擇)gU (變大寫)gu (變小寫)等等(陳皓注:可視化選擇是一個很有意思的命令,你可以先按v,然後移動光標,你就會看到文本被選擇,然後,你可能d,也可y,也可以變大寫等)
第四級 – Vim 超能力
你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,現在,我們向你介紹的是VIM殺手級的功能。下面這些功能是我只用vim的原因。
在當前行上移動光標: 0 ^ $ f F t T , ;
0 → 到行頭^ → 到本行的第一個非blank字符$ → 到行尾g_ → 到本行最後一個不是blank字符的位置。fa → 到下一個為a的字符處,你也可以fs到下一個為s的字符。t, → 到逗號前的第一個字符。逗號可以變成其它字符。3fa → 在當前行查找第三個出現的a。F 和 T → 和 f 和 t 一樣,只不過是相反方向。還有一個很有用的命令是 dt" → 刪除所有的內容,直到遇到雙引號—— "。
區域選擇 <action>a<object> 或 <action>i<object>/<action>/<object>/<action>
在visual 模式下,這些命令很強大,其命令格式為
<action>a<object> 和 <action>i<object>/<action>/<object>/<action>
action可以是任何的命令,如 d (刪除), y (拷貝), v (可以視模式選擇)。object 可能是: w 一個單詞, W 一個以空格為分隔的單詞, s 一個句字, p 一個段落。也可以是一個特別的字符:"、 '、 )、 }、 ]。假設你有一個字符串 (map (+) ("foo")).而光標鍵在第一個 o 的位置。
vi" → 會選擇 foo.va" → 會選擇 "foo".vi) → 會選擇 "foo".va) → 會選擇("foo").v2i) → 會選擇 map (+) ("foo")v2a) → 會選擇 (map (+) ("foo"))
塊操作:
塊操作,典型的操作: 0 I-- [ESC]
^ → 到行頭 → 開始塊操作 → 向下移動 (你也可以使用hjkl來移動光標,或是使用%,或是別的)I-- [ESC] → I是插入,插入“--”,按ESC鍵來為每一行生效。在Windows下的vim,你需要使用 而不是 , 是拷貝剪貼板。
自動提示: 和
在 Insert 模式下,你可以輸入一個詞的開頭,然後按 或是,自動補齊功能就出現了……
宏錄製: qa 操作序列 q, @a, @@
qa 把你的操作記錄在寄存器 a。於是 @a 會replay被錄製的宏。@@ 是一個快捷鍵用來replay最新錄製的宏。示例在一個只有一行且這一行只有“1”的文本中,鍵入如下命令:qaYpq→qa 開始錄製Yp 複製行. 增加1.q 停止錄製.@a → 在1下面寫下 2@@ → 在2 正面寫下3現在做 100@@ 會創建新的100行,並把數據增加到 103.可視化選擇: v,V,
前面,我們看到了 的示例 (在Windows下應該是),我們可以使用 v 和 V。一但被選好了,你可以做下面的事:
J → 把所有的行連接起來(變成一行)< 或 > → 左右縮進= → 自動給縮進 (陳皓注:這個功能相當強大,我太喜歡了)在所有被選擇的行後加上點東西:
選中相關的行 (可使用 j 或 或是 /pattern 或是 % 等……)$ 到行最後A, 輸入字符串,按 ESC。分屏: :split 和 vsplit.
下面是主要的命令,你可以使用VIM的幫助 :help split. 你可以參考本站以前的一篇文章VIM分屏。
:split → 創建分屏 (:vsplit創建垂直分屏) : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一個,其用來切換分屏。_ (或 |) : 最大化尺寸 (| 垂直分屏)+ (或 -) : 增加尺寸結束語
學習vim就像學彈鋼琴一樣,一旦學會,受益無窮。