天天看點

Vim 學習指南Vim 學習指南

Vim 學習指南

[日期:2013-08-20] 來源:oschina.net  作者:Lesus, Garfielt, szkiti, 耀耀 [字型:大 中 小]

你想盡可能快地自學 vim (為大家所熟知的最好的編輯器) 。這是我學習的方法:從細處入手然後慢慢掌握所有技巧。

Vim 六十億美元的編輯器

設計優良,強壯,快速。

學習 vim 并把它作為你的下一個文本編輯器,據我所知沒有比它更好的編輯器,學起來難但出奇的好用。

我建議你按下附 4 個步驟學習 Vim:

  1. 适應
  2. 感覺舒适
  3. 感覺很好,強壯,快速
  4. 使用 vim 的進階技能

本課程結束時你将成為一個 vim 高手。

但在我們開始之前,先提醒一下。剛開始學習 vim 會有點痛苦,它很費時間,有點像玩樂器一樣。不要指望能像其他編輯器一樣花 3 天以内的時間便能很好的使用它,事實上,這肯定要花 2 周而不是 3 天。

推薦閱讀:

  • 快速學會 Vi 編輯器 http://www.linuxidc.com/Linux/2013-08/88586.htm
  • 強大的 Vim 編輯器 http://www.linuxidc.com/Linux/2013-07/87544.htm
  • 在 CentOS 6.2 上搭建 Vim 開發環境 http://www.linuxidc.com/Linux/2013-07/87363.htm
  • Vim 7.4a 釋出,全新更快的正規表達式引擎 http://www.linuxidc.com/Linux/2013-07/87035.htm
  • CentOS 5.4 安裝高亮 Vim 編輯工具 http://www.linuxidc.com/Linux/2013-06/86508.htm
  • Vim 技巧分享:C 語言設定 http://www.linuxidc.com/Linux/2012-12/77124.htm
  • Ubuntu 中設定 Vim 的行号 http://www.linuxidc.com/Linux/2012-12/75485.htm

第一層次 – 适應

  1. 安裝 vim
  2. 運作 vim
  3. 什麼也别做,讀!

在标準的編輯器裡,寫一些東西到螢幕上隻需要在鍵盤上輸入就足夠了,在 Vim 中不是這樣。Vim 在普通模式裡,讓我們轉到插入模式,鍵入字元 i。

你應該感覺好一點了,能像在标準編輯器裡輸入了,回到普通模式隻需按 ESC 鍵即可。

你現在知道了如何在插入和普通模式之間轉換,下面是你在普通模式下需要記住的指令:

  • i→ 插入模式。按 ESC 鍵傳回普通模式
  • x→ 删除光标所在的字元
  • :wq→ 儲存退出 (:w 儲存,:q 退出)
  • dd→ 删除 (拷貝) 目前行
  • p→ 粘貼
推薦:
  • hjkl (高度推薦) → 基本的光标移動 (←↓↑→), hj 按行移動。
  • :help <command>→ 顯示關于 < command > 的幫助,可以使用 help 不帶 < command > 獲得正常幫助。

隻有 5 個指令,一開始隻需掌握這些,當适應了這些指令後(大概需要一天或更多的詩句),你可以轉到第二層級了。

但首先,稍回顧一下普通模式。在标準編輯器裡,要複制的話你需要使用 ctrl 鍵(Ctrl-c)。實際上,當你按下 ctrl 鍵時所有的按鍵的意義都改變了。在 vim 普通模式下就像在 ctrl 鍵自動按下的情況下使用編輯器。

最後的補充:

  • 我使用 <C-λ> 代替 Ctrl-λ
  • 指令後附帶回車,比如我若是寫:q,我是指:q<enter>

第二層 - 爽一把

你知道,指令是由需求所定。是時候學習更多指令了。下面這些是我的建議:

  1. 插入模式變種指令:
    • a→ 在光标後插入
    • o→ 在目前行之後插入新行
    • O→ 在目前行之前插入新行
    • cw→ 替換從光标到單詞結束
  2. 基本移動指令
    • 0→ 跳到第一列
    • ^→ 跳到本行第一個非空字元
    • $→ 跳到本行末尾
    • g_→ 跳到本行最後一個非空字元
    • /pattern→ 搜尋 pattern
  3. 複制 / 粘貼
    • P→ 在目前位置之前粘貼,記住 p 是在目前位置之前粘貼.
    • yy→ 複制目前行,與 dd 和 P 指令相比更簡單。
  4. 取消 / 恢複
    • u→ 取消
    • <C-r>→ 恢複
  5. 加載 / 儲存 / 退出 / 修改 檔案 (緩存)
    • :e <檔案路徑>→ 打開
    • :w→ 儲存
    • :saveas <檔案路徑>→ 儲存到這個檔案
    • :x,ZZ 或者:wq→ 儲存和退出 (:x 如果可能的話,隻儲存)
    • :q!→ 退出但不儲存,使用:qa!,即使在緩存中還有已經修改的也會退出。
    • :bn (對比:bp) → 顯示下一個 (上一個) 檔案緩存

花些時間學習所有這些指令。一旦完成後,你應該就能完成在像在其它編輯器中所有事情。也許,你可能還會覺得有點笨手笨腳。但是跟着我進入下一個層次,你就會發現為什麼 vim 值得你額外付出的努力。

第三層次 —— 更好,更強,更快

為達到這一步表示祝賀!現在我們可以開始這有趣的東西。在第三層次,我們将隻讨論指令,它相容舊的 vi 編輯器。

更好

讓我們看看 vim 是怎麼幫你做重複事情的。

1. .→(點)可以重複最後一個指令,

2. N <指令> 會重複指令 N 次。

一些例子,打開一個檔案然後寫入下面内容:

• 2dd→ will delete 2 lines • 3p→ will paste the text 3 times • 100idesu [ESC]→ will write “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” •.→ Just after the last command will write again the 100 “desu”. •3.→ Will write 3 “desu” (and not 300, how clever).

更強

知道怎麼有效的移動對 vim 是非常重要的。請不要跳過這一節。

1. NG→定位到第 N 行

2. gg→1G 的快捷方式 —— 定位到第一行

3. G→定位到最後一行

4. 單詞移動:

1. w→定位到目前單詞的開始位置,

2. e→ 定位到目前單詞的最後位置。預設情況下,單詞有字元和下劃線組成。我們稱一句話是由一組被空格符号分隔的單詞組成。如果你想定位一句話,那麼就用大寫字元:

1. W→ 定位到目前句子的開始位置,

2. E→ 定位到目前這句話的最後位置.

Vim 學習指南Vim 學習指南

現在讓我們來談談幾個非常有效率的移動:

%: Go to the corresponding(,{,[.

• *(resp.#) : go to next (resp. previous) occurrence of the word under the cursor

相信我,最後的三行指令是精華。

更快

記住了 vi 移動的重要性?這裡就是原因。大多數指令使用下面這種通用格式:

<開始位置>< 指令 >< 結束位置 >

例如: 0y$ 意味着

  • 0→ 跳到本行開頭
  • y→ 從這裡開始複制
  • $→ 直到本行結束

我們也可以使用 ye,從目前位置複制到單詞的末尾。但是 y2/foo 會一直複制到第二個 foo 出現的地方。

但對于 y(複制), d (删除), v (visual 選擇), gU (大寫), gu (小寫) 等等指令都是真實的。

第四層次 – Vim 超能量

使用上述的指令,你就覺得很爽了。但是現在,這裡才是殺手锏。正因為其中有些特性,我才使用 vim 的。

在目前行移動:0^$g_fFtT,;

  • 0→ 跳到第一列
  • ^→ 跳到目前行的第一個字元
  • $→ 跳到最後一列
  • g_→ 跳到這行的最後一個字元
  • fa→ 跳到這行 a 字母的下一個出現的地方。(對比;)會查找下一個(上一個)地方
  • t,→ 跳到,字元的前一個字元.
  • 3fa→ 在這行中查找 a 出現的第三個位置.
  • F 和 T→ 與 f 和 t 相似, 但是方向相反.
  • Vim 學習指南Vim 學習指南

一個有用的提示:dt"→删除所有的直到”。

區域選擇 : <指令> a < 對象 > 或 < 指令 > i < 對象 >

這些指令僅僅能用在可視化模式的一個操作後。但是他們相當的有用。他們的主要模式有:

<指令> a < 對象 > 和 < 指令 > i < 對象 >

指令可以是任何指令,例如 , d (删除),y (拉取),v (進入可視化模式)。對象可以是: w 一個單詞,W 一個單詞 (擴充的),s 一個句子,p 一個段落。而且也可以是普通的字元, 例如 ",',),},]。

假設現在光标在 (map (+) ("foo")) 這個字元串的第一個 o 上。

  • vi"→ 将會選擇 foo
  • va"→ 将會選擇 "foo"
  • vi)→ 将會選擇 "foo"
  • va)→ 将會選擇 ("foo")
  • v2i)→ 将會選擇 map (+) ("foo")
  • v2a)→ 将會選擇 (map (+) ("foo"))
Vim 學習指南Vim 學習指南

矩形選擇塊:<C-v>

矩形選擇塊能夠友善的對多行代碼進行注釋。 如:0<C-v><C-d>I-- [ESC]

  • ^→ 将光标定位到這行第一個非空格字元
  • <C-v>→ 選擇開始位置
  • <C-d>→ 向下移動 (也可使用 jjj 或者 % , 其他…)
  • I-- [ESC]→ 用 -- 來注釋每一行
Vim 學習指南Vim 學習指南

提示:如果你的剪貼闆在 Windows 中是非空的話,那麼你就不得不使用 <C-q> 來代替 < C-v>。

實作:<C-n> 和 < C-p>.

在插入模式中:隻要打出單詞的首字母,然後按 <C-p>,神奇的事情就發生了...

Vim 學習指南Vim 學習指南

宏指令 : qa 做的一些事,@a,@@

qa 把你的動作記錄在了寄存器 a 中。然後 @a 就會将存在寄存器中的動作重制,就好像你從新打了一邊。@@是将你最後一次執行的宏指令再次執行的快捷鍵。

事例

在隻有數字 1 的一行上, 像這樣鍵入指令:

  • qaYp<C-a>q→
    • qa 開始記錄。
    • Yp 記錄這一行。
    • <C-a> 增加數字大小。
    • q 停止記錄。
  • @a→ 在 1 下面寫 2
  • @@→ 在 2 下面寫 3
  • 現在鍵入 100@@ 就将會産生一個到 103 的自增列。
Vim 學習指南Vim 學習指南
Vim 學習指南Vim 學習指南

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

我們已經看到過 <C-v> 例子,這裡還有 v 和 V。一旦已經選擇好了,你可以:

  • J→ 讓所有行連接配接在一起
  • <(對比>) → 向左(右)對齊.
  • =→ 自動對齊
Vim 學習指南Vim 學習指南

在可視化模式所選擇的行的末尾添加一些東西:

  • <C-v>
  • 跳到目的行 (jjj 或者 <C-d> 或者 /patternor% 等等…)
  • $ 跳到行末尾
  • A, 寫入一些文本,[按] ESC 鍵.
Vim 學習指南Vim 學習指南

分割:: split 和 vsplit

這些是很重要的指令,是以你應該在:help split 看看。

  • :split→ 建立一個水準分割視窗 t (:vsplit 建立一個豎直分割視窗)
  • <C-w><dir>: dir 是 hjklor←↓↑→中任何一個。用來切換分割視窗。
  • <C-w>_(對比 < C-w>|) : 用來最大化水準(豎直)分割視窗的大小
  • <C-w>+(對比 < C-w>-) : 增加 (減小) 分割視窗
Vim 學習指南Vim 學習指南

小結

這些是我經常使用的 90% 的指令。我建議你每天學習一到兩個指令。在兩到三周之後,你将會感覺到 vim 在你手上使用的是如此的強大。

學習 vim 更多的是記憶訓練。值得高興的是 vim 誕生了一些非常好的工具和優秀的文檔。當你非常熟悉大部分基本指令之後就可以使用 vimtutor 了。另外,你應該仔細的閱讀這頁 ::help usr_02.txt.

然後,你要去學習了解寄存器,插件已經其它的功能。學習 vim 就像學鋼琴一樣,所有的都要掌握好。