1991 年,來自荷蘭的一名工程師 Bram Moolenaar 為了在他的Amiga計算機上復制Vi的功能,正式發布 了Vim的第一個版本。在當時無論誰也沒想到,這款軟件未來能在技術圈爆發出那么大的威力,為千千萬萬的工程師節省了無數時間,大幅提升他們的開發效率。
從Vi衍生出來的Vim有著不同于大多數編輯器的使用方式:通過鍵盤對多種模式的相互切換,進行各項命令的執行和對文本的編寫。這種方式使得Vim可以不用進行菜單或者鼠標操作,并且最小化組合鍵的操作。對文字錄入員或者程序員可以大大增強速度和效率。
接下來我們將開始對Vim的學習。
1、Vim模式介紹
Vim具有6種基本模式和5種派生模式,我們將只簡單介紹下6種基本模式:
-
普通模式(Normal mode)(常用)
在普通模式中,用的編輯器命令,比如移動光標,刪除文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 -
插入模式(Insert mode)(常用)
在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯過程中一直保持這個模式。
在插入模式中,可以按ESC鍵回到普通模式。 -
可視模式(Visual mode)
這個模式與普通模式比較相似。但是移動命令會擴大高亮的文本區域。高亮區域可以是字符、行或者是一塊文本。當執行一個非移動命令時,命令會被執行到這塊高亮的區域上。Vim的"文本對象"也能和移動命令一樣用在這個模式中。 -
選擇模式(Select mode)
這個模式和無模式編輯器的行為比較相似(Windows標準文本控件的方式)。這個模式中,可以用鼠標或者光標鍵高亮選擇文本,不過輸入任何字符的話,Vim會用這個字符替換選擇的高亮文本塊,并且自動進入插入模式。 -
命令行模式(Command line mode)(常用)
在命令行模式中可以輸入會被解釋成并執行的文本。例如執行命令(:鍵),搜索(/和?鍵)或者過濾命令(!鍵)。在命令執行之后,Vim返回到命令行模式之前的模式,通常是普通模式。 -
Ex模式(Ex mode) 這和命令行模式比較相似,在使用:visual命令離開Ex模式前,可以一次執行多條命令。
六種基本模式中以普通、插入和命令行三種模式最為常用,因為這三種模式的相互配合即可完成基本的編輯功能(普通模式:對文本進行復制、粘貼、刪除、撤銷等操作;插入模式:編寫文本內容;命令行模式:保存、退出文檔,以及設置編輯環境)。
vim啟動進入普通模式后,可通過按i鍵(插入)或a鍵(附加)進入插入模式,通過:鍵進入命令行模式。而當Vim處于插入模式或者命令行模式,均可以用過按Esc鍵或者Ctrl+[回到普通模式。
2、Vim的進出與游標移動
2.1、Vim的打開
使用vim命令進入vim界面,命令格式如下
vim 文件名
默認條件下為當前路徑下的相應文件,如果文件不存在將新建文本后打開Vim。
2.2、游標移動與跳轉
在普通模式下,使用方向鍵或者反人類的h、j、k、l鍵可以移動游標,并通過w、b、e等鍵進行游標的跳轉,具體內容參見下表:
按鍵 | 說明 |
---|---|
nG(n Shift+g) | 游標移動到第n行(行間跳轉) |
gg | 游標移動到第一行(行間跳轉) |
G(Shift+g) | 游標移動到最后一行(行間跳轉) |
b | 到前一個單詞的開頭 |
w | 到下一個單詞的開頭 |
e | 到當前單詞的結尾 |
ge | 到前一個單詞的結尾 |
0或^ | 到行頭 |
$ | 到行尾 |
f<字母> | 向后搜索<字母>并跳轉到第一個匹配的位置(很實用) |
F<字母> | 向前搜索<字母>并跳轉到第一個匹配的位置(實用) |
t<字母> | 向后搜索<字母>并跳轉到第一個匹配的位置之前的一個字母(不常用) |
T<字母> | 向前搜索<字母>并跳轉到第一個匹配的位置之后的一個字母(不常用) |
注:在命令行模式下,可通過輸入:set nu以顯示行號
2.3、Vim的退出與保存
2.3.1命令行模式下的退出
在命令行模式下,常用輸入wq回車,保存并退出編輯,下表為具體的退出方式:
命令 | 說明 |
---|---|
:q | 退出 |
:wq | 保存并退出 |
:q! | 強制退出 |
:wq! | 強制保存并退出 |
:x | 保存并退出 |
:w<文件路徑> | 另存為 |
:saves 文件路徑 | 另存為 |
2.3.3普通模式下的退出
普通模式下用戶可以使用Shift+zz進行保存并退出操作!
3、Vim的增刪改查、復制粘貼撤銷與快速縮進
不知道為什么,一提到增刪改查我就很激動。
3.1、增刪改查
3.1.1、增加(插入)操作
Vim很直接的擁有一個插入模式進行插入操作,下表為在普通模式下進入插入模式的具體方式(不包括通過替換方式進入插入模式的方法):
按鍵 | 說明 |
---|---|
i | 在當前光標處進行編輯 |
I | 在行首插入 |
a | 在光標后插入編輯 |
A | 在行末插入 |
o | 在當前行后插入一個新行 |
O | 在當前行前插入一個新行 |
3.1.2、刪除操作
進入普通模式,使用下列命令可以進行文本快速刪除:
命令 | 說明 |
---|---|
x | 刪除游標所在的字符 |
X | 刪除游標所在前一個字符 |
Delete | 刪除游標所在的字符(同x) |
dd | 刪除整行 |
dw | 刪除一個單詞(不適用中文) |
d$或D | 刪除至行尾 |
d^ | 刪除至行首 |
dG | 刪除到文檔結尾處 |
d1G | 刪至文檔首部 |
3.1.3、修改(替換)操作
替換是針對普通模式下的操作,具體操作間下表:
命令 | 說明 |
---|---|
r+<待替換字母> | 將游標所在字母替換為指定字母 |
R | 連續替換,直到按下Esc |
cc | 替換整行,即刪除游標所在行(將進入插入模式) |
cw | 替換一個單詞,即刪除一個單詞(將進入插入模式) |
C | 替換游標以后至行末 |
~ | 反轉游標所在字母大小寫 |
3.1.4、查找操作
普通模式下輸入 / 然后鍵入需要查找的字符串 按回車后就會進行查找。 ? 與/ 功能相同,只不過 ? 是向上而 / 是向下查找。 進入查找之后,輸入n 和 N 可以繼續查找。 n是查找下一個內容,N查找上一個內容。
此外,普通模式下可以使用*(或g*)和#(或#)來向下和向上尋找游標所在處的單詞。
3.2、復制、粘貼、撤銷與快速縮進
3.2.1、復制粘貼與剪切粘貼
普通模式中使用y復制:
命令 | 說明 |
---|---|
yy | 復制游標所在的整行(5yy表示復制5行) |
y^ | 復制至行首,或y0。不含光標所在處字符 |
y$ | 復制至行尾。含光標所在處字符 |
yw | 復制一個單詞 |
y2w | 復制兩個單詞 |
yG | 復制至文本末 |
y1G | 復制至文本開頭 |
普通模式下的使用p進行粘貼:
- p(小寫)代表粘貼至光標后(下)
- P(大寫)代表粘貼至光標前(上)
此外上文提到的dd刪除操作也是剪切,刪除后可以使用p進行粘貼的。
3.2.2、撤銷(Undo)操作
- Vim使用u或者u{n}進行撤銷一次或者n次的操作;
- 使用U(大寫) 撤銷當前行的所有修改;
- 此外,Vim使用Ctrl+r進行Redo(復原)操作,進行對undo操作的插銷。
3.3.3、快速縮進與文本調整
以下是常用的縮進和文本調整方式:
命令 | 說明 |
---|---|
<< | 整行向左回退 |
>> | 整行將向右縮進(非常好用) |
:set shiftwidth? | 命令行模式下,獲取縮進設定值 |
:set shiftwidth?=n | 命令行模式下,設定縮進值為n |
:ce(center) | 使本行內容居中 |
:ri(right) | 使本行文本靠右 |
:le(left) | 使本行內容靠左 |
4、Vim的高級功能
高級功能剩下的內容有時間再更新吧。。。
5、總結
VIM 如果不是經常使用,很容易忘記它的使用技巧,需要經常復盤,久而久之也就養成了手指記憶。
為了更好的解決這個問題,讓各大開發者可以快速掌握 Vim 的常用快捷鍵,一位開發者做了一款游戲:Vim Adventures。在這個游戲中,你需要配合各種常用的 Vim 快捷鍵,來移動光標,與 NPC 進行對話,尋找線索,獲取鑰匙,打開寶箱。當你一次次通關后,便會慢慢發現自己已成功掌握大量 Vim 使用技巧。
PS:這個游戲只有前三關是免費的!!!
如果文章有表述不當的地方可以留言指正,互相學習 。