Vim 練級攻略

如下的文章翻譯自《Learn Vim Progressively》,我認爲這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,僅僅是列舉了那些最實用的命令。html

很不錯。shell

——————————正文開始——————————vim

你想以最快的速度學習人類史上最好的文本編輯器VIM嗎?你先得懂得怎樣在VIM倖存下來,而後一點一點地學習各類戲法。編輯器

Vim the Six Billion Dollar editoride

Better, Stronger, Faster.工具

學習 vim 並且其會成爲你最後一個使用的文本編輯器。沒有比這個更好的文本編輯器了,很地難學,但是卻難以想象地好用。學習

我建議如下這四個步驟:spa

  1. 存活
  2. 感受良好
  3. 認爲更好,更強。更快
  4. 使用VIM的超能力

當你走完這篇文章,你會成爲一個vim的 superstar。插件

在開始學習曾經,我需要給你一些警告:翻譯

  • 學習vim在開始時是痛苦的。
  • 需要時間
  • 需要不斷地練習。就像你學習一個樂器同樣。
  • 不要指望你能在3天內把vim練得比別的編輯器更有效率。
  • 其實,你需要2周時間的苦練。而不是3天。

第一級 – 存活

  1. 安裝 vim
  2. 啓動 vim
  3. 什麼也別幹!請先閱讀

當你安裝好一個編輯器後,你必定會想在當中輸入點什麼東西,而後看看這個編輯器是什麼樣子。但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)

你能在vim倖存下來僅僅需要上述的那5個命令,你就可以編輯文本了,你必定要把這些命令練成一種下意識的狀態。因而你就可以開始進階到第二級了。

當是,在你進入第二級時,需要再說一下 Normal 模式。在通常的編輯器下,當你需要copy一段文字的時候,你需要使用 Ctrl 鍵,比方:Ctrl-C。也就是說。Ctrl鍵就好像功能鍵同樣。當你按下了功能鍵Ctrl後,C就不在是C了。而且就是一個命令或是一個快鍵鍵了,在VIM的Normal模式下。所有的鍵就是功能鍵了

這個你需要知道。

標記:

  • 如下的文字中。假設是 Ctrl-λ我會寫成 <C-λ>.
  • 以 : 開始的命令你需要輸入 <enter>回車。好比 — 假設我寫成 :q 也就是說你要輸入 :q<enter>.

第二級 – 感受良好

上面的那些命令僅僅能讓你存活下來,現在是時候學習一些不少其它的命令了,如下是個人建議:(陳皓注:所有的命令都需要在Normal模式下使用。假設你不知道現在在什麼樣的模式,你就狂按幾回ESC鍵)

  1. 各類插入模式
    • a → 在光標後插入
    • o → 在當前行後插入一個新行
    • O → 在當前行前插入一個新行
    • cw → 替換從光標所在位置後到一個單詞結尾的字符
  2. 簡單的移動光標
    • 0 → 數字零,到行頭
    • ^ → 到本行第一個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等)
    • $ → 到本行行尾
    • g_ → 到本行最後一個不是blank字符的位置。
    • /pattern → 搜索 pattern 的字符串(陳皓注:假設搜索出多個匹配。可按n鍵到下一個)
  3. 拷貝/粘貼 (陳皓注:p/P都可以,p是表示在當前位置以後。P表示在當前位置以前)
    • P → 粘貼
    • yy → 拷貝當前行當行於 ddP
  4. Undo/Redo
    • u → undo
    • <C-r> → redo
  5. 打開/保存/退出/改變文件(Buffer)
    • :e <path/to/file> → 打開一個文件
    • :w → 存盤
    • :saveas <path/to/file> → 另存爲 <path/to/file>
    • :x, ZZ 或 :wq → 保存並退出 (:x 表示僅在需要時保存。ZZ不需要輸入冒號並回車)
    • :q! → 退出不保存 :qa! 強行退出所有的正在編輯的文件,就算別的文件有更改。
    • :bn 和 :bp → 你可以同一時候打開很是多文件,使用這兩個命令來切換下一個或上一個文件。(陳皓注:我喜歡使用:n到下一個文件)

花點時間熟悉一下上面的命令。一旦你掌握他們了,你就差點兒可以幹其餘編輯器都能幹的事了。

但是到現在爲止,你仍是認爲使用vim仍是有點笨拙。只是不要緊。你可以進階到第三級了。

第三級 – 更好,更強,更快

先恭喜你!你乾的很是不錯。咱們可以開始一些更爲有趣的事了。在第三級,咱們僅僅談那些和vi可以兼容的命令。

更好

如下,讓咱們看一下vim是怎麼反覆本身的:

  1. . → (小數點) 可以反覆上一次的命令
  2. N<command> → 反覆某個命令N次

如下是一個演示樣例。找開一個文件你可以試試如下的命令:

  • 2dd → 刪除2行
  • 3p → 粘貼文本3次
  • 100idesu [ESC] → 會寫下 「desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu 「
  • . → 反覆上一個命令—— 100 「desu 「.
  • 3. → 反覆 3 次 「desu」 (注意:不是 300,你看,VIM多聰明啊).
更強

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

  1. NG → 到第 N 行 (陳皓注:注意命令中的G是大寫的。另我通常使用 : N 到第N行。如 :137 到第137行)
  2. gg → 到第一行。(陳皓注:至關於1G。或 :1)
  3. G → 到最後一行。

  4. 按單詞移動:
    1. w → 到下一個單詞的開頭。

    2. e → 到下一個單詞的結尾。

    > 假設你以爲單詞是由默認方式。那麼就用小寫的e和w。默認上來講。一個單詞由字母,數字和下劃線組成(陳皓注:程序變量)

    > 假設你以爲單詞是由blank字符分隔符,那麼你需要使用大寫的E和W。(陳皓注:程序語句)

    Word moves example

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

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

相信我,上面這三個命令對程序猿來講是至關強大的。

更快

你必定要記住光標的移動,因爲很是多命令都可以和這些移動光標的命令連動。

很是多命令都可以例如如下來幹:

<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 同樣。僅僅只是是相反方向。
    Line moves

另外一個很是實用的命令是 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")).而光標鍵在第一個 的位置。

  • vi" → 會選擇 foo.
  • va" → 會選擇 "foo".
  • vi) → 會選擇 "foo".
  • va) → 會選擇("foo").
  • v2i) → 會選擇 map (+) ("foo")
  • v2a) → 會選擇 (map (+) ("foo"))

Text objects selection

塊操做: <C-v>

塊操做,典型的操做: 0 <C-v> <C-d> I-- [ESC]

  • ^ → 到行頭
  • <C-v> → 開始塊操做
  • <C-d> → 向下移動 (你也可以使用hjkl來移動光標,或是使用%,或是別的)
  • I-- [ESC] → I是插入,插入「--」,按ESC鍵來爲每一行生效。

Rectangular blocks

在Windows下的vim,你需要使用 <C-q> 而不是 <C-v> ,<C-v> 是拷貝剪貼板。

本身主動提示: <C-n> 和 <C-p>

在 Insert 模式下,你可以輸入一個詞的開頭,而後按 <C-p>或是<C-n>,本身主動補齊功能就出現了……

Completion

宏錄製: 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.

Macros

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

前面,咱們看到了 <C-v>的演示樣例 (在Windows下應該是<C-q>),咱們可以使用 v 和 V

一但被選好了,你可以作如下的事:

  • J → 把所有的行鏈接起來(變成一行)
  • < 或 > → 左右縮進
  • = → 本身主動給縮進 (陳皓注:這個功能至關強大。我太喜歡了)

Autoindent

在所有被選擇的行後加上點東西:

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

Append to many lines

分屏: :split 和 vsplit.

如下是基本的命令,你可以使用VIM的幫助 :help split. 你可以參考本站曾經的一篇文章VIM分屏

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

Split

結束語

  • 上面是做者最常用的90%的命令。

  • 我建議你天天都學1到2個新的命令。

  • 在兩到三週後。你會感到vim的強大的。
  • 有時候,學習VIM就像是在死背一些東西。

  • 幸運的是,vim有很是多很是不錯的工具和優秀的文檔。

  • 執行vimtutor直到你熟悉了那些基本命令。
  • 其在線幫助文檔中你應該要細緻閱讀的是 :help usr_02.txt.
  • 你會學習到諸如  !, 文件夾,寄存器,插件等很是多其餘的功能。

學習vim就像學彈鋼琴同樣。一旦學會。受益無窮。

——————————正文結束——————————

對於vi/vim僅僅是點評一點:這是一個你不需要使用鼠標,不需使用小鍵盤,僅僅需要使用大鍵盤就可以完畢很是多複雜功能文本編輯的編輯器。否則,Visual Studio也不就會有vim的插件了

(全文完)

相關文章
相關標籤/搜索