Vim由unix系統中的vi編輯器擴充增強而來,且vim幾乎完全兼容vi。vim可以運行在linux,mac,windows系統中。但在linux及mac系統中使用較多。利用vim可以編輯各種文檔,借助于vim豐富的插件,vim可以擴展出許多功能,甚至是各種語言的IDE等等
1.為什么要用VIM
:Edit Text at the Speed of Thought
2.VIM工作模式
vim中有四種模式,分別是:Normal Mode(普通模式),Insert Mode(插入模式), Visual Mode(視圖模式), Command-Line Mode(命令行模式)
a. Normal Mode
我們通過在終端中執行vim filename
的方式打開或創建一個文件默認進入的就是此模式,在此模式下我們可以執行大多數vim命令,比如:h,j,k,l,A,i,H,等等。
b. Insert Mode
在Normal Mode下我們是不能輸入內容的,如果要編輯文檔我們需要進入Insert Mode,按i
即可進入,進入Insert Mode 后我們可以在窗口左下角看到–INSERT–
提示。這時我們就可以隨意編輯文檔了。
c. Normal 與Insert相互切換
在normal mode下一般可以通過i
進入insert mode,當我們需要執行某些normal mode
下的命令時,可以通過Esc
鍵返回到normal mode.所以vim用戶經常按Esc
鍵是一個很常見的動作,而且在normal mode下按Esc
鍵不會產生任何效果,所以當你不確定當前模式的時候,可以多按幾次Esc
鍵就一定可以回到normal mode下,然后再根據需要執行后續的其它操作。
這里建議大家記英文,因為不同的人對這幾個模式的翻譯不同,可能會造成誤解。比如我就曾見過把Normal Mode翻譯為命令模式的,當然這樣翻譯也是有道理的,因為大部分命令都是在這個模式下運行的。這里模式有四個,但我們大多情況下都是在Normal與Insert模式下工作的。這里先介紹這兩個模式。
3.VIM常用命令入門
(無特殊說明所有指令均是指normal mode下的指令)
A.光標移動指令
- h(左),j(下),k(上),l(右)
-
G
將光標移動到最后一行的行首的第一個非空白字符處 -
gg
作用與G
相反,將光標移動到行首第一個非空白字符處 -
H
將光標移動到編輯窗口頂部第一行行首位置。注意與gg
的區別 -
L
將光標移動到編輯窗口底部最后一行的行首位置。 -
$
將光標移動到行尾 -
0
將光標移動到行首 -
ngg
或nG
將光標移動到n
所代表的行首處 (其中n
代表行號)
(其實,我們完全可以通過上下左右鍵來移動光標,但是如果你熟悉了上面這些指令,將會讓你的操作更加高效。)
B.插入指令
-
i
在光標所覆蓋字符的前面插入 -
I
在行首第一個非空白字符前插入 -
o
在光標所在行下面一行插入 -
O
在光標所在行上面一行插入
(執行以上指令后vim將自動由normal mode切換到insert mode)
C.保存指令
-
:w
將當前vim編輯窗口中的內容保存到本地磁盤中,因為vim不會自動保存。為了防止數據的丟失,我們可以在每編輯一段時間后就執行一下此命令,將當前的內容保存到磁盤中,以防止意外斷電等原因造成的數據丟失。 -
:q
直接退出vim。有時候我們可能只是用vim來查看一下文件的內容,并不需要做修改,當我們查看完后,可以執行此命令直接退出。 -
:wq
保存并退出vim。此命令主要用在當我們完成編輯任務后可直接執行此命令,完成保存并退出的動作。 -
:q!
強制退出vim。當你通過vim查看某個文件并不小心作個修改后,可通過此命令直接退出,此命令將不保存修改。
D.刪除指令
-
x
刪除光標所覆蓋的字符。 -
[n]dd
刪除光標所在的一整行或者從當前行開始的n行。 -
d$
刪除從光標所在位置向后的一整行。 -
d[n]G
刪除從第n行開始,直到當前行的所有文本。若不指定n則刪除從當前行開始到文件最后一行的所有文本。 -
dw
刪除一個字。注意:此命令對于英文刪除的是一個單詞,但對于漢語刪除的是連續的一段漢字直到標點或英文字符為止。 -
de
此命令與dw
相似,但不包含字與字之間的空格。
當然,我們完全可以通過Baskspace
或del
來達到刪除的目的,但作為一個高效的編輯器vim提供的有更高效的命令。其實,在以上刪除指令前面我們可以跟上一個數字,代表此刪除操作執行的次數。比如,如果我們想連續刪除兩個字符可以這樣2x
。
E.撤銷指令
-
u
對應windows中的Ctrl-Z
,即撤消上一次的操作,可通過連續執行撤消多次。 -
U
撤消最近一次對某行的所有操作。此命令的動作只能局限在最近一次發生修改的某行內。 -
Ctrl-R
相當于windows中的Ctrl-Y
,即撤消撤消操作,也可連續執行以達到多次undo the undos的效果。
F.復制粘貼指令
-
p
相當于windows中的Ctrl-V
。但這個指令執行的前題是要先選定需要復制的文字。這就要用到下面這個指令v
. -
v
進入視圖模式。然后可以通過hjkl
移動光標來選定文字。因為只有在這個模式下,才可以通過指令選定文字(當然你也可以通過鼠標選定文字) -
y
復制。將選定的文字,復制到粘帖板。
綜上,要完成在windows下Ctrl-C
,Ctrl-V
的效果,大致需要按照下面這樣的步驟:
- 按
v
進入visual mode. - 通過
hjkl
移動光標選定需要復制的文本. - 按
y
將選定內容復制到粘貼板. - 移動光標到合適位置。
- 按
p
執行粘貼操作。
G.查找指令
-
/
正向查找。 在normal mode下按/
鍵,然后再輸入需要查尋的字符串,按Enter
鍵即可進行搜索。 -
n
若想查看下一個,只需在上一個命令的基礎上按n
,即可查看下一個匹配的字符串。 -
N
與n
作用相反。查找上一個匹配的字符串。
H.替換指令
-
:s/old/new
在光標所在行中查找old并用new來替換查找到的第一個old. -
:s/old/new/g
在光標所在行中查找old并用new替換此行中所有的old. -
:#,#s/old/new/g
在#
與#
所表示的行的范圍內查找old,并用new全部替換之。 -
:%s/old/new/g
在整個文件中查找old并用new替換。 -
:%s/old/new/gc
在整個文件中依次查找old并給用戶提示是否替換當前old。過程類似于:find next,replace?
.如果確定就替換,并跳到下一個;如果n
就直接跳到下一個,重復以上過程。
I.翻頁指令
-
Ctrl-F
向下滾動一屏 -
Ctrl-B
向上滾動一屏 -
Ctrl-D
向下流動半屏 -
Ctrl-U
向上滾動半屏
J.其它常用指令
-
C
替換當前行光標之后的所有數據。 -
[n]cc
替換當前文本行或從當前文本行開始的n行數據。 -
[n]yy
復制當前文本行或從當前文本行開始的n行數據。 -
r Enter
換行 -
:set nu
顯示行號 -
:set nonu
取消顯示行號 -
:!
執行外部命令,例如:!ls
顯示目錄。 -
:n1,n2 m n3
將從n1行開始到n2行的內容移動到n3行之后。 -
:n1,n2 co n3
將從n1行開始到n2行的內容復制到n3行之后。
4.總結
個人覺得掌握好上面這些命令,VIM入門應該是沒問題了。但要是想真正能享受到VIM編輯的高效性,除了對基本命令非常熟悉外,盲打是最低的要求了。否則,還不如用windows下面那些可視化的編輯器來的快。