相對于IDE苛茂,vim的學(xué)習(xí)成本較高之宿,但一旦熟悉vim后族操,開發(fā)效率是非常高的。vim的命令非常多比被,但在工作中常用的卻比較少色难,本著實用主義泼舱,參考Learn Vim Progressively,整理最有用的命令枷莉,也便自己以后查閱娇昙。下面涉及到ctrl
鍵的組合操作,如ctrl
和r
組合依沮,用<C-r>
表示
1. 模式
vim有三種模式:普通(normal)模式涯贞、插入(insert)模式和命令(command)模式。剛進(jìn)入vim時默認(rèn)進(jìn)入普通模式危喉,下面看下各模式的轉(zhuǎn)換:
普通模式下鍵入
i
進(jìn)行插入模式
普通模式下鍵入:
進(jìn)入命令模式
按ESC
退出插入模式和命令模式
vim的文檔非常全宋渔,在命令模式下,我們可以鍵入h
或help
打開幫忙文檔辜限,也可以直接鍵入help <command>
皇拣,查看指定命令的幫助文檔,如help i
薄嫡。
在普通模式下通過hjkl
(左下上右)移動光標(biāo)氧急,插入模式下可以鍵入任意字符,命令模式下可以輸入命令毫深,回車鍵執(zhí)行命令吩坝。如何退出呢,進(jìn)入命令模式哑蔫,鍵入q就可以退出了钉寝,如果有更新會提示你保存,鍵入w
進(jìn)行保存闸迷。也可以同時鍵入wq
保存退出嵌纲。
2. 移動
上面講了hjkl
可以在普通模式下對光標(biāo)進(jìn)行移動。如果只支持光標(biāo)按字符移動腥沽,那就太沒效率了逮走,下面這些命令可以快速將光標(biāo)移動到目標(biāo)位置。
先來看看光標(biāo)在當(dāng)前行中的移動:
0:數(shù)字零今阳,將光標(biāo)移動到行首
^:將光標(biāo)移動到當(dāng)前行第一個不是blank的位置师溅,所謂blank,是指空格盾舌、tab险胰、換行、回車等不可見字符)
$:將光標(biāo)移動到行尾
g_:將光標(biāo)移動到當(dāng)前行最后一個不是blank的位置
gg:將光標(biāo)移動第一行
G:將光標(biāo)移動第最后一行
NG:N是行號矿筝,即將光標(biāo)移動了第N行,如3G棚贾,表示將光標(biāo)移動到第三行
w/W:移動到下一個單詞的開頭
e/E:移動到下一個單詞的結(jié)尾
b/B:移動到上一個單詞的開頭
其中單詞間的移動大小寫的區(qū)別是單詞劃分規(guī)則不同窖维,小寫w榆综、e、b
的單詞是由字母铸史、數(shù)據(jù)加下劃線組成的單詞鼻疮,而大寫W、E琳轿、B
的單詞是由字符組成判沟,已空格區(qū)分。如下所示:
再來看下更強大的一些移動操作:
%:匹配括號移動崭篡,包括 `(, {, [ `
f/F:如`fa`挪哄,移動到下一個為a的字符處,也可以是fs琉闪,移動到下一個為s的字符迹炼,大寫F表示反向移動,也可以使用3fa颠毙,表示移動到第三個為a的字符處
t/T:如`t;`斯入,移動到分號`;`前的一個字符,大寫T表示反向移動蛀蜜,也可以使用`3t;`,表示移動到第三個分號`;`前的一個字符
下圖更直觀展示各種移動操作:
3. 常用操作
x:刪除光標(biāo)所處字符刻两,也可以在前面指定數(shù)字N,表示刪除從當(dāng)前光標(biāo)開始后的N個字符滴某,如`4N`磅摹,刪除光標(biāo)后的4個字符(包含光標(biāo)所處字符)
dd:刪除當(dāng)前光標(biāo)所處行偏瓤,也可以在前面指定數(shù)字N
yy或Y:復(fù)制當(dāng)前行橙依,也可以在前面指定數(shù)據(jù)N
p:粘貼剪切板
a:在光標(biāo)之后插入
o:在當(dāng)前行后插入一個新行
O:在當(dāng)前行前插入一個新行
cw:替換從光標(biāo)所處位置到單詞結(jié)尾的字符
u:撤銷
<C-r>:反撤銷
<C-n>或<C-p>:自動提示
.:重復(fù)上一個命令
=:將光標(biāo)所處行及之后的行自動縮進(jìn),通用使用`gg=`,對整個文件進(jìn)行自動縮進(jìn)刷喜。
<,>:左右縮進(jìn)
另外說兩個時常用的比較多的命令co
和mo
初茶,需要在命令模塊下執(zhí)行搁宾,
如將1到10的行拷貝插入到100行:
:1,10 co 100
又如將1到10行剪切插入到100行:
:1,10 mo 100
4. 查找替換
/pattern:搜索 pattern 的字符串奸忽,如果搜索出多個匹配,可按n鍵到下一個,按N鍵到上一個
*和#:匹配光標(biāo)當(dāng)前所在的單詞暴备,移動光標(biāo)到下一個(或上一個)匹配單詞
:%s/this/that/g:全局將`this`替換為`that`
5. 可視化選擇
在普通模式下鍵入v
或V
后,vim左下角會出現(xiàn)-- 可視 --
狀態(tài)提示凌外,此時移動光標(biāo)可以進(jìn)行行選擇或?qū)π兄械木植孔址x擇,如:
v$U:表示將光標(biāo)所處的行全部轉(zhuǎn)化為大寫涛浙,分解如下:
v -> 進(jìn)入可視化選擇
$ -> 將光標(biāo)移動到行尾康辑,即選擇了當(dāng)前行
U -> 將選擇的內(nèi)容轉(zhuǎn)化為大寫
也可以使用<C-v>
進(jìn)行塊選擇摄欲,此時vim左下角會出現(xiàn)-- 可視 塊 --
,來看兩個常用操作疮薇,下面是對指定行進(jìn)行注釋:
<C-v>GI# ESC:將當(dāng)前行到最后一行的進(jìn)行注釋蒿涎,命令分解如下:
<C-v> -> 進(jìn)行可視塊
G ->將光標(biāo)跳轉(zhuǎn)到最后一行
I -> 進(jìn)入可視化編輯
# -> 在行前添加`# `
ESC -> 退出可視化及可視化編輯
又如在每行后添加注釋:
<C-v>G$A# your comment ESC:從當(dāng)前行到最后一行的所有行末加上`# your comment`,命令分解如下:
<C-v> -> 進(jìn)行可視塊
G -> 將光標(biāo)跳轉(zhuǎn)到最后一行
$ -> 將光標(biāo)跳轉(zhuǎn)到行末
A -> 在行末進(jìn)行可視化編輯
# your comment -> 添加注釋內(nèi)容
ESC -> 退出可視化及可視化編輯
6. 分屏與多文件操作
常用分屏命令惦辛,以下命令需要在命令模式下執(zhí)行:
sp:水平分屏
vs:垂直分屏
<C-w><dir>:dir是方向,可以是 hjkl 或是 ←↓↑→ 中的一個仓手,其用來切換分屏
<C-w>[N]+:增加當(dāng)前分屏間的尺寸胖齐,N可選,表示增加的尺寸個數(shù)
<C-w>[N]-:減少當(dāng)前分屏的尺寸嗽冒,N可選呀伙,表示減少的尺寸個數(shù)
<C-w>=:均分分屏
<C-w>|:最大化當(dāng)前分屏
我看代碼時,經(jīng)常會打開多個文件添坊,vim支持打開多個文件以及在各個文件之間跳轉(zhuǎn)剿另。在命令模式下,使用e
命令打開文件:
:e file.txt
使用ls
命令查看當(dāng)前打開的文件贬蛙,如:
命令模式下雨女,使用bn
打開下一個文件,使用bp
打開上一個文件阳准,也可以使用buffer 文件序號
打開指定序號的文件氛堕,如下圖中打開序號為3的文件3.txt
:
:buffer 3
7. 錄制宏
對于vim的宏來講,可以簡單理解為是將一串命令存儲到寄存器中野蝇。用下面例子說明宏的使用方法讼稚,在數(shù)據(jù)庫我們經(jīng)常需要進(jìn)行分表處理中,通常會寫下面這樣的SQL命令:
CREATE TABLE LIKE your_table_0;
假設(shè)我們要分64張表绕沈,如果一個個的粘貼復(fù)制锐想,再修改表象,就太麻煩了乍狐,我們可以使用宏來幫我們完成這個任務(wù)赠摇,將光標(biāo)移到上面行中,執(zhí)行如下命令:
qaYp$T_<C-a>q
上面命令是什么意思澜躺,其它比較簡單蝉稳,分解如下:
qa -> 開始錄制宏,并存到寄存器a中
Yp -> 復(fù)制當(dāng)面光桿所在行
$ -> 將光桿移動到行末尾
T_ -> 向后移動光桿直到出現(xiàn)_為止(即將光標(biāo)移動到數(shù)字上)
<C-a> -> ctrl + a對光標(biāo)所處的數(shù)字+1
q -> 停止錄制宏
執(zhí)行完上面命令后掘鄙,實際上已經(jīng)完成了創(chuàng)建your_table_1表的SQL語句耘戚,此時,只需要將光標(biāo)放到這條sql命令所處行中操漠,利用@a
可以將寄存器a中的宏進(jìn)行重放收津,同時可以在前面指定重放次數(shù)饿这,如執(zhí)行以下命令創(chuàng)建后續(xù)62張表:
62@a
這便完成了對your_table進(jìn)行64分表的SQL語句,合理利用錄制宏命令撞秋,可以極大提高效率长捧。
小結(jié)
剛開始學(xué)習(xí)vim有點痛苦分井,因為這些命令更多的是要先記住谒拴,最好的辦法是不斷的實踐,熟能生巧跪妥,最終你會喜歡上vim舅列。
參考
[1] http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively