天天看點

簡明Vim練級攻略

簡明Vim練級攻略

來源:酷殼網

關鍵詞:Vim,練級攻略 |作者:陳皓

導讀:本文來自《Learn Vim Progressively》,譯文來自酷殼網陳皓整理編譯的《簡明Vim練級攻略》。這是一篇給新手最好的VIM的更新教程了,沒有列舉所有的指令,隻是列舉了那些最有用的指令。非常不錯。

文章内容如下:

Vim的學習曲線相當的大(參看各種文本編輯器的學習曲線),是以,如果你一開始看到的是一大堆VIM的指令分類,你一定會對這個編輯器失去興趣的。你想以最快的速度學習人類史上最好的文本編輯器VIM嗎?你先得懂得如何在VIM幸存下來,然後一點一點地學習各種戲法。

Vim the Six Billion Dollar editor

Better, Stronger, Faster.

學習vim并且其會成為你最後一個使用的文本編輯器。沒有比這個更好的文本編輯器了,非常地難學,但是卻不可思議地好用。

我建議下面這四個步驟:

  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.簡單的移動光标

  • → 數字零,到行頭
  • ^

    → 到本行第一個不是blank字元的位置(所謂blank字元就是空格,tab,換行,回車等)
  • $

    → 到本行行尾
  • g_

    → 到本行最後一個不是blank字元的位置。
  • /pattern

    → 搜尋 

    pattern

    的字元串(陳皓注:如果搜尋出多個比對,可按n鍵到下一個)

3.拷貝/粘貼 (陳皓注:下面的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.N

G

→到第N行(注:注意指令中的G是大寫的,另我一般使用:N到第N行,如:137到第137行)

2.gg

→到第一行。(注:相當于1G,或:1)

3.G

→到最後一行。

4.按單詞移動:

w

→到下一個單詞的開頭。

e

→到下一個單詞的結尾。

如果你認為單詞是由預設方式,那麼就用小寫的e和w。預設上來說,一個單詞由字母,數字和下劃線組成(陳皓注:程式變量)

如果你認為單詞是由blank字元分隔符,那麼你需要使用大寫的E和W。(陳皓注:程式語句)

簡明Vim練級攻略

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

  • %

     : 比對括号移動,包括 

    (

    ,

    {

    ,

    [

    . (陳皓注:你需要把光标先移到括号上)
  • *

     和 

    #

    :比對光标目前所在的單詞,移動光标到下一個(或上一個)比對單詞(*是下一個,#是上一個)

相信我,上面這三個指令對程式員來說是相當強大的。

更快

你一定要記住光标的移動,因為很多指令都可以和這些移動光标的指令連動。很多指令都可以如下來幹:

<start position><command><end position>

例如 

0y$

指令意味着:

  • → 先到行頭
  • y

    → 從這裡開始拷貝
  • $

    → 拷貝到本行最後一個字元

你可可以輸入 

ye

,從目前位置拷貝到本單詞的最後一個字元。

你也可以輸入 

y2/foo

 來拷貝2個“foo”之間的字元串。

還有很多時間并不一定你就一定要按y才會拷貝,下面的指令也會被拷貝:

  • d

    (删除 )
  • v

    (可視化的選擇)
  • gU

    (變大寫)
  • gu

    (變小寫)
  • 等等

(注:可視化選擇是一個很有意思的指令,你可以先按v,然後移動光标,你就會看到文本被選擇,然後,你可能d,也可y,也可以變大寫等)

第四級 Vim 超能力

你隻需要掌握前面的指令,你就可以很舒服的使用VIM了。但是,現在,我們向你介紹的是VIM殺手級的功能。下面這些功能是我隻用vim的原因。

在目前行上移動光标:

^

$

f

F

t

T

,

;

  • →到行頭
  • ^

    →到本行的第一個非blank字元
  • $

    →到行尾
  • g_

     →到本行最後一個不是blank字元的位置。
  • fa

    →到下一個為a的字元處,你也可以fs到下一個為s的字元。
  • t,

    →逗号前的第一個字元。逗号可以變成其它字元。
  • 3fa

    →在目前行查找第三個出現的a。
  • F

     和 

    T

    →和 

    f

     和 

    t

     一樣,隻不過是相反方向。
    簡明Vim練級攻略

還有一個很有用的指令是 

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"))

簡明Vim練級攻略

塊操作:

<C-v>

塊操作,典型的操作: 

0 <C-v> <C-d> I-- [ESC]

  • ^

    →到行頭
  • <C-v>

    →開始塊操作
  • <C-d>

    →向下移動 (你也可以使用hjkl來移動光标,或是使用%,或是别的)
  • I-- [ESC]

    →I是插入,插入“

    --

    ”,按ESC鍵來為每一行生效。
簡明Vim練級攻略

在Windows下的vim,你需要使用 

<C-q>

而不是 

<C-v>

 ,

<C-v>

 是拷貝剪貼闆。

自動提示: 

<C-n>

 和 

<C-p>

在Insert模式下,你可以輸入一個詞的開頭,然後按 

<C-p>或是<C-n>,自動補齊功能就出現了……

簡明Vim練級攻略

宏錄制:

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.
簡明Vim練級攻略

可視化選擇: 

v

,

V

,

<C-v>

前面,我們看到了 

<C-v>

的示例(在Windows下應該是<C-q>),我們可以使用 

v

V。一但被選了,你可以做下面的事:

Once the selection made, you can:

  • J

    →把所有的行連接配接起來(變成一行)
  • <

    >

    →左右縮進
  • =

    →自動給縮進(注:這個功能相當強大,我太喜歡了)
簡明Vim練級攻略

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

  • <C-v>

  • 選中相關的行(可使用 

    j

     或 

    <C-d>

     或是 

    /pattern

     或是 

    %

     等……)
  • $

    到行最後
  • A,

    輸入字元串,按

    ESC。

簡明Vim練級攻略

分屏:

:split

vsplit

.

下面是主要的指令,你可以使用VIM的幫助 

:help split

. 你可以參考本站以前的一篇文章VIM分屏。

  • :split

    → 建立分屏 (

    :vsplit

    建立垂直分屏)
  • <C-w><dir>

     : dir就是方向,可以是 

    hjkl

    或是 ←↓↑→ 中的一個,其用來切換分屏。
  • <C-w>_

    (或 

    <C-w>|

    ) :最大化尺寸 (<C-w>| 垂直分屏)
  • <C-w>+

    (或

    <C-w>-

    ):增加尺寸
簡明Vim練級攻略

結束語

  • 上面是作者最常用的90%的指令。
  • 我建議你每天都學1到2個新的指令。
  • 在兩到三周後,你會感到vim的強大的。
  • 有時候,學習VIM就像是在死背一些東西。
  • 幸運的是,vim有很多很不錯的工具和優秀的文檔。
  • 運作vimtutor直到你熟悉了那些基本指令。
  • 其線上幫助文檔中你應該要仔細閱讀的是 

    :help usr_02.txt

    .
  • 你會學習到諸如  

    !,

     目錄,寄存器,插件等很多其它的功能。

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

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

文章出自:酷殼網

繼續閱讀