Vim學習指南

oschina發表於2013-08-20

轉自:http://www.oschina.net/translate/learn-vim-progressively

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

Vim 六十億美元的編輯器

設計優良,強壯,快速。

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

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

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

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

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

Garfielt
Garfielt
翻譯於 1個月前

5人頂

 翻譯的不錯哦!

第一層次 – 適應

  1. 安裝vim
  2. 執行vim
  3. 什麼也別做,讀!

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

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

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

  • i→ 插入模式. 按ESC鍵返回普通模式
  • x→ 刪除游標所在的字元
  • :wq→ 儲存退出(:w 儲存,:q 退出)
  • dd→ 刪除(拷貝)當前行
  • p→ 貼上

推薦:

  • hjkl(高度推薦) → 基本的游標移動 (←↓↑→), hj按行移動。
  • :help <command>→ 顯示關於<command>的幫助,可以使用help不帶<command>獲得常規幫助。
Garfielt
Garfielt
翻譯於 1個月前

1人頂

 翻譯的不錯哦!

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

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

最後的補充:

  • 我使用<C-λ>代替Ctrl-λ
  • 命令後附帶回車,比如我若是寫:q,我是指:q<enter>
Garfielt
Garfielt
翻譯於 1個月前

1人頂

 翻譯的不錯哦!

第二層 - 爽一把

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

  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值得你額外付出的努力。

Lesus
Lesus
翻譯於 1個月前

2人頂

 翻譯的不錯哦!

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

恭喜進入第三層次!現在我們開始一些有趣的事。在第三層次中,我們只會談論那些和vi編輯器相容的命令

更好

讓我們看看vim是如何幫助我們做重複工作的:

  1. .→ (點)會重做最後一個命令,
  2. N<命令> → 會重做這個命令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個, 聰明極了).

Lesus
Lesus
翻譯於 1個月前

1人頂

 翻譯的不錯哦!

其它翻譯版本(1)

更強

掌握高效率使用vim是十分重要的。請不要跳過這節。

  1. NG→ 跳到第N行
  2. gg→ 是1G的快捷方式 - 跳到檔案的開始
  3. G→ 跳到最後一行
  4. 單詞間移動:

    1. w→ 跳到下一個單詞的開頭,
    2. e→ 跳到這個單詞的末尾.

    預設,單詞是有字母和下劃線組成。這裡我們所謂的單詞就是由空格分隔的。如果你只想考慮單詞,就使用大寫的字元吧:

    1. W→跳到下一個單詞的開頭,
    2. E→ 跳到這個單詞的末尾.
    Word moves example

現在,我們談論高效率移動:

  • %: 跳到對應的(, (, [ 處.
  • *(對比#) : 跳到當前游標的下一個(上一個) 相同單詞的地方

信我,最後3個命令價比黃金。

Lesus
Lesus
翻譯於 1個月前

2人頂

 翻譯的不錯哦!

其它翻譯版本(1)

更快

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

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

例如: 0y$意味著

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

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

但對於y(複製), d(刪除), v(visual 選擇), gU(大寫), gu(小寫)等等命令都是真實的。

Lesus
Lesus
翻譯於 1個月前

4人頂

 翻譯的不錯哦!

第四層次 – Vim 超能量

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

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

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

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

Lesus
Lesus
翻譯於 1個月前

2人頂

 翻譯的不錯哦!

區域選擇 : <命令>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"))

Text objects selection

耀耀
耀耀
翻譯於 1個月前

0人頂

 翻譯的不錯哦!

矩形選擇塊:<C-v>

矩形選擇塊能夠方便的對多行程式碼進行註釋。 如:0<C-v><C-d>I-- [ESC]

  • ^→ 將游標定位到這行第一個非空格字元
  • <C-v>→ 選擇開始位置
  • <C-d>→ 向下移動 (也可使用 jjj 或者 % , 其他…)
  • I-- [ESC]→ 用 -- 來註釋每一行  
Rectangular blocks

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

耀耀
耀耀
翻譯於 1個月前

0人頂

 翻譯的不錯哦!

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

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

Completion

巨集命令 : qa 做的一些事,@a,@@

qa 把你的動作記錄在了暫存器 a 中。然後@a 就會將存在暫存器中的動作重現,就好像你從新打了一邊。@@是將你最後一次執行的巨集命令再次執行的快捷鍵。

事例

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

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

Macros

耀耀
耀耀
翻譯於 1個月前

0人頂

 翻譯的不錯哦!

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

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

  • J→ 讓所有行連線在一起
  • <(對比>) → 向左(右)對齊.
  • =→ 自動對齊
Autoindent

在視覺化模式所選擇的行的末尾新增一些東西:

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

Append to many lines

Lesus
Lesus
翻譯於 1個月前

0人頂

 翻譯的不錯哦!

分割:: split 和 vsplit

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

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

Split

Lesus
Lesus
翻譯於 1個月前

0人頂

 翻譯的不錯哦!

小結

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

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

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


相關文章