VIM學習曲線-a

寫在前面

這裏記錄下本身在學習vim過程當中的一些坎坷和總結吧!後面補充……html

今天看到很多同窗收藏,看樣子仍是有不少人和我同樣的初級學習菜鳥,哈哈,這裏再次申明,文章主要內容是從連接的原文做者哪裏拷貝出的,其中本身有小的修改,另外,我會參考其餘文章,將經常使用的一些東西都加入進來,後期會慢慢更新,其中一些說的不清楚的地方,我也會實驗後再詳細修改……shell

簡明vim練級攻略

文章主要內容來源於標題鏈接的原文,這裏記錄些我本身須要記憶的東西,這裏敲一遍純粹是爲了本身加深印象:vim

首先解釋下:編輯器

  • 當首次進入vim時,是處在Normal模式下的。
  • 當按下i以後會進入–insert–模式,在左下角會出現–insert–字樣,或者漢化的-插入-,這是你就能夠輸入字符了。
  • 若是你想返回 Normal 模式,請按 ESC 鍵。
  • 基本上全部的這裏提到的vim快捷鍵都是在Normal模式下的。
  • 在按下v以後是進入visual模式。這個模式在下面會提到的吧!
  • 在通常的編輯器下,當你須要copy一段文字的時候,你須要使用 Ctrl
    鍵,好比:Ctrl-C。也就是說,Ctrl鍵就好像功能鍵同樣,當你按下了功能鍵Ctrl後,C就不在是C了,並且就是一個命令或是一個快鍵鍵了,在VIM的Normal模式下,全部的鍵就是功能鍵了。
  • 下面的文字中,若是是 Ctrl-λ我會寫成 <C-λ>
  • 以 : 開始的命令你須要輸入<enter>回車,例如 — 若是我寫成 :q 也就是說你要輸入 :q<enter>.

第一級-存活

  • i → Insert 模式,按 ESC 回到 Normal 模式.
  • x → 刪當前光標所在的一個字符。
  • :wq → 存盤 + 退出 (:w 存盤, :q 退出) (陳皓注::w 後能夠跟文件名)
  • dd → 刪除當前行,並把刪除的行存到剪貼板裏
  • p → 粘貼剪貼板 推薦:
  • hjkl (強例推薦使用其移動光標,但沒必要需) →你也可使用光標鍵 (←↓↑→). 注: j 就像下箭頭。
  • :help <command> → 顯示相關命令的幫助。你也能夠就輸入 :help 而不跟命令。(陳皓注:退出幫助須要輸入:q)

第二級-感受良好

1.各類插入模式ide

  • a → 在光標後插入
  • o → 在當前行後插入一個新行
  • O → 在當前行前插入一個新行
  • cw → 替換從光標所在位置後到一個單詞結尾的字符【準確的說是刪除從光標位置到一個單詞結尾的字符並進入插入模式】

2.簡單的移動光標學習

  • 0 → 數字零,到行頭
  • ^ → 到本行第一個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等)
  • $ → 到本行行尾
  • g_ → 到本行最後一個不是blank字符的位置。
  • /pattern → 搜索 pattern 的字符串(陳皓注:若是搜索出多個匹配,可按n鍵到下一個,shift-n上一個)

3.拷貝/粘貼 (陳皓注:p/P均可以,p是表示在當前位置以後,P表示在當前位置以前)spa

  • p 粘貼
  • yy → 拷貝當前行當行於 ddP(dd刪除當前行,再粘貼)
  • 在輸入v以後的視圖模式下,能夠在選中多行的狀況下複製和粘貼(後面作詳細的總結)

4.Undo/Redo
撤銷和恢復,這個應該必定會用的到code

  • u → undo
  • <C-r> → redo

5.打開/保存/退出/改變文件(Buffer)orm

  • :e path/to/file → 打開一個文件
  • :w → 存盤
  • :saveas path/to/file → 另存爲 path/to/file
  • :x, ZZ 或 :wq → 保存並退出 (:x 表示僅在須要時保存,ZZ不須要輸入冒號並回車)
  • :q! → 退出不保存 :qa! 強行退出全部的正在編輯的文件,就算別的文件有更改。
  • :bn 和 :bp → 你能夠同時打開不少文件,使用這兩個命令來切換下一個或上一個文件。(陳皓注:我喜歡使用:n到下一個文件)
  • 能夠用:tabe filename打開新的文件,文件之間的切換能夠用gt到下一個文件,Gt上一個文件,下面詳細講下

第三級-更好、更強、更快

更好
下面,讓咱們看一下vim是怎麼重複本身的:htm

  • . → (小數點) 能夠重複上一次的命令
  • N<command> → 重複某個命令N次

下面是一個示例,找開一個文件你能夠試試下面的命令:

  • 2dd → 刪除2行
  • 3p → 粘貼文本3次
  • 10idesu [ESC] → 會寫下 「desu desu desu desu desu desu desu desu desu
    desu「
    > 注意數字後面有i表示插入,其實說白了,就是先輸入個數字,表示你要重複後面的命令都少次。下面再看一條命令:
    100ovar[ESC] → 會寫下100行的var,不行你試試!
  • . → 重複上一個命令—— 100 「desu 「。
  • 3.→ 重複 3 次 「desu」 (注意:不是 300,你看,VIM多聰明啊).

更強
你要讓你的光標移動更有效率,你必定要了解下面的這些命令,千萬別跳過。

  • NG → 到第 N 行 (陳皓注:注意命令中的G是大寫的,另我通常使用 : N 到第N行,如 :137 到第137行)
  • gg → 到第一行。(陳皓注:至關於1G,或 :1)
  • G 到最後一行
  • 按單詞移動:
    w → 到下一個單詞的開頭。
    e → 到下一個單詞的結尾。
    b → 到前一個單詞的開頭

若是你認爲單詞是由默認方式,那麼就用小寫的e和w。默認上來講,一個單詞由字母,數字和下劃線組成(陳皓注:程序變量)
若是你認爲單詞是由blank字符分隔符,那麼你須要使用大寫的E和W。(陳皓注:程序語句)
圖片描述

下面,讓我來講說最強的光標移動:

  • % : 匹配括號移動,包括 (, {, [. (陳皓注:你須要把光標先移到括號上)
  • *和# : 匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)

更快
你必定要記住光標的移動,由於不少命令均可以和這些移動光標的命令連動。不少命令均可以以下來幹:

<start position><command><end position>

例如 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>

在visual 模式下,這些命令很強大,其命令格式爲:
<action>a<object><action>i<object>

  • 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 <C-v> <C-d> I-- [ESC]
^ → 到行頭
<C-v> → 開始塊操做
<C-d> → 向下移動 (你也可使用hjkl來移動光標,或是使用%,或是別的)
I-- [ESC] → I是插入,插入「--」,按ESC鍵來爲每一行生效(注意:這裏的I是大寫哦,小寫不行的)。
圖片描述

在Windows下的vim,你須要使用 而不是 , 是拷貝剪貼板。


自動提示: <C-n><C-p>

在 Insert 模式下,你能夠輸入一個詞的開頭,而後按 或是,自動補齊功能就出現了……

圖片描述


宏錄製: qa 操做序列 q, @a, @@

  • qa 把你的操做記錄在寄存器 a。
  • 因而 @a 會replay被錄製的宏。
  • @@ 是一個快捷鍵用來replay最新錄製的宏。

示例
在一個只有一行且這一行只有「1」的文本中,鍵入以下命令:

- qaYp<C-a>q→
 - qa 開始錄製
 - Yp 複製行.
 - <C-a> 增長1.
 - q 中止錄製.
- @a → 在1下面寫下 2
- @@ → 在2 正面寫下3
- 如今作 100@@ 會建立新的100行,並把數據增長到 103.

圖片描述


可視化選擇: v,V,<C-v>

前面,咱們看到了 <C-v>的示例 (在Windows下應該是<C-q>),咱們可使用 v 和 V。一但被選好了,你能夠作下面的事:

  • J → 把全部的行鏈接起來(變成一行)
  • < 或 > → 左右縮進
  • = → 自動給縮進 (陳皓注:這個功能至關強大,我太喜歡了)
    圖片描述

在全部被選擇的行後加上點東西:

  • <C-v>
  • 選中相關的行 (可以使用 j 或 <C-d> 或是 /pattern 或是 % 等……)
  • $ 到行最後
  • A, 輸入字符串,按 ESC。

圖片描述

分屏: :split 和 vsplit.

下面是主要的命令,你可使用VIM的幫助 :help split. 你能夠參考本站之前的一篇文章VIM分屏

  • :split → 建立分屏 (:vsplit建立垂直分屏)
  • <C-w><dir> : dir就是方向,能夠是 hjkl 或是 ←↓↑→ 中的一個,其用來切換分屏。
  • <C-w>_ (或 <C-w>|) : 最大化尺寸 (<C-w>| 垂直分屏)
  • <C-w>+ (或 <C-w>-) : 增長尺寸

圖片描述

相關文章
相關標籤/搜索