Vim 是從 vi 發展出來的一個文本編輯器。它類似於vi但又存在區別,因為它功能強大且高度可配置,在vi的基礎上進行了很多的改進。代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用,還可以創建和更改任何類型的文本,效率非常高。

而從 vi 發展出來的 Vim 具有很多模式,這種獨特的設計容易使初學者產生混淆。

Vim 具有6中基本模式和5中派生模式

基本模式

普通模式

在普通模式中,用的編輯器命令,比如移動游標,刪除文本等等。這也是Vim 啟動後的默認模式。Vim 強大的編輯能力來自於其普通模式命令。普通模式命令往往需要一個操作符結尾。例如普通模式命令"dd"刪除當前行,但是第一個"d"的後面可以跟另外的移動命令來代替第二個"d",比如用移動到下一行的"j"鍵就可以刪除當前行和下一行。另外還可以指定命令重複次數,"2dd"(重複"dd"兩次),和"dj"的效果是一樣的。在普通模式中,有很多方法可以進入插入模式。比較普通的方式是按"a"(append/追加)鍵或者"i"(insert/插入)鍵。

插入模式

在這個模式中,大多數按鍵都會向文本緩衝區中插入文本。大多數新用戶希望文本編輯器編輯過程中一直保持這個模式。在插入模式中,可以按ESC 鍵回到普通模式。

可視模式

這個模式與普通模式比較相似。但是移動命令會擴大高亮的文本區域。高亮區域可以是字元、行或者是一塊文本。當執行一個非移動命令時,命令會被執行到這塊高亮的區域上。Vim 的"文本對象"也能和移動命令一樣用在這個模式中。

選擇模式

這個模式和無模式編輯器的行為比較相似。這個模式中,可以用滑鼠或者游標鍵高亮選擇文本,不過輸入任何字元的話,Vim 會用這個字元替換選擇的高亮文本塊,並且自動進入插入模式。

命令行模式

在命令行模式中可以輸入會被解釋成並執行的文本。例如執行命令(":"鍵),搜索("/"和"?"鍵)或者過濾命令("!"鍵)。在命令執行之後,Vim 返回到命令行模式之前的模式,通常是普通模式。

Ex模式

這和命令行模式比較相似,在使用":visual"命令離開 Ex 模式前,可以一次執行多條命令。

派生模式

操作符等待模式

這個派生模式指普通模式中,執行一個操作命令後 Vim 等待一個"動作"來完成這個命令。Vim 也支持在操作符等待模式中使用"文本對象"作為動作,包括"aw"一個單詞(a word)、"as"一個句子(a sentence)、"ap"一個段落(a paragraph)等等。比如,在普通模式下"d2as"刪除當前和下一個句子。在可視模式下"apU"把當前段落所有字母大寫。

插入普通模式

這個模式是在插入模式下按下 ctrl+o 鍵的時候進入。這個時候暫時進入普通模式,執行完一個命令之後,Vim 返回插入模式

插入可視模式

這個模式是在插入模式下按下 ctrl+o 鍵並且開始一個可視選擇的時候開始。在可視區域選擇取消的時候,Vim 返回插入模式。

插入選擇模式

通常這個模式由插入模式下滑鼠拖拽或者 shift 方向鍵來進入。當選擇區域取消的時候,Vim返回插入模式。

替換模式

這是一個特殊的插入模式,在這個模式中可以做和插入模式一樣的操作,但是每個輸入的字元都會覆蓋文本緩衝中已經存在的字元。在普通模式下按"R"鍵進入。

其他

Evim (Easy Vim)

Evim(Easy Vim)是一個特殊的GUI模式用來盡量的表現的和"無模式"編輯器一樣。編輯器自動進入並且停留在插入模式,用戶只能通過菜單、滑鼠和鍵盤控制鍵來對文本進行操作。可以在命令行下輸入"evim"或者"vim -y"進入。在 Windows 下,通常也可以點擊桌面上 Evim(Easy Vim)的圖標。

Vim 的正確學習方式

在正式接觸到 Vim 之前,你一定從別人那裡聽說過 Vim 是多麼多麼的強無敵,雖然它的命令的確非常方便,但是要正確的入門卻不是一件容易的事。一不小心就會弄成《Vim——從入門到放棄》。

 

要學習這個工具,首先得明白以下幾點:

1,學習Vim在開始是痛苦的

2,不要希望你3天就能精通,實際上你可能需要2周甚至更久。

3,需要不斷的練習。

學習順序:

1,在 Insert/Normal 模式下編輯文檔(五個命令:i,x,:wq,dd,p)

2,學習更多的命令(插入模式,移動游標,拷貝/粘貼,Undo/Redo,打開/保存/退出/改變文件)

3,學習技巧型命令(如何更好,更快,更強)

4,學習超能力(超能力級功能)

Vim的常用命令

Vim中的命令數不勝數,它可以讓你只需要看你的鍵盤就可以完成所有的事情,但是其中並不是所有的命令都那麼常用,這裡就列舉那些最有用的命令。

這些命令也可以分為以下四級

1,在 Insert/Normal 模式下編輯文檔(五個命令:i,x,:wq,dd,p)

2,學習更多的命令(插入模式,移動游標,拷貝/粘貼,Undo/Redo,打開/保存/退出/改變文件)

3,學習技巧型命令(如何更好,更快,更強)

4,學習超能力(殺手級功能)

在 Insert/Normal 模式下編輯文檔

打開vim之後默認是Normal模式。Normal模式下你可以操作你的游標,接下來是Normal模式中的一些簡單命令,在Normal模式下,幾乎所有的鍵都是功能鍵。

 

i —— 插入模式,這個模式讓你你可以像記事本一樣的輸入文本,如果已經輸入完了,按ESC返回Normal模式。

x —— 刪除當前游標所在處的字元

:w —— 存檔

:q —— 退出,你可以使用 :wq來同時進行這兩個操作

dd —— 剪切當前行

p —— 粘貼

hjkl —— 效果等同於←↓↑→,用於移動游標

:help<command> —— 顯示相關命令的幫助

學習更多的命令

除了i之外,還有別的插入模式可以選擇

a —— 在游標後插入

o —— 在當前行後插入新行

O —— 在當前行前插入新行

一些快速移動游標的指令

0 —— 數字零,到行頭

^ —— 到本行第一個不是空字元的位置

$ —— 到行尾

g_ —— 到行尾最後一個不是空字元的位置

/pa —— 搜索 pa 這個字元串,按n查找下一個

關於文件的指令

:e <path/to/file> —— 打開一個文件

:saveas <path/to/file> —— 另存為

:q! —— 不保存退出 :qa!可以退出所有編輯中的文件

:bn :bp ——當你打開了很多文件,用這個切換到下一個/上一個

其他的指令

u —— 撤銷

ctrl+r —— 重做

學習技巧型命令

Vim重複自己的方法

. —— 小數點,重複上次命令

N<command> —— 重複一個命令N次

 

下面是一個特殊的例子

100imeow[ESC] —— 寫下100個「meow」

. —— 重複上一個命令 也就是再寫100個「meow」

3. —— 重複3次命令 寫下3個(而不是300個)「meow」

進階級移動游標的命令

NG —— 移動到第N行 ,:N也可以

gg —— 到第一行

g —— 到最後一行

w —— 到下一個單詞開頭

e —— 到下一個單詞結尾

% —— 當游標在括弧上時,可以移動到與之對應的另一個括弧

*和# —— 移動到下一個/上一個游標所在的單詞上

 

實際上這些命令都可以組合輸入,格式為:<start position><command><end position> 舉個簡單的例子

0y$ —— 0和 $ 是位置,y是指令,這個指令的意思就是從行頭拷貝到本行最後一個字元。

 

除了 y,還有不少命令可以這麼做,比如

d  —— 刪除

gU/gu —— 變為大寫/小寫

v ——可視化選擇

學習超能力

更高級的移動游標

Fa/fa —— 移動到上一個/下一個a字元,a可以換成其他字元

T,/t, —— 移動到逗號後/前的那一個字元,逗號可以換成其他字元

3fa ——到第三個a字元處

dt」 —— 在遇到」前刪除所有內容

區域選擇

區域選擇的命令格式一般為<action>a<object> 和 <action>i<object>

用一個簡單的例子來區別a和i

假如說有這樣一個字元串——[123((abcd))],你的游標在b上

vi)——會選擇abcd

va)——會選擇(abcd)

v2i)——會選擇(abcd)

v2a)——會選擇((abcd))

自動補齊

在 insert 模式下輸入一個詞的開頭,然後按ctrl+p或+n,就可以使用自動補齊了

qa——開始錄製宏,並把你的操作記錄在a

@a—— replay你在a錄製的宏

@@—— replay最新的宏