使用技巧:Vim 的縱向編輯模式
Vim 的縱向編輯模式功能強(qiáng)大。本文介紹了 Vim 縱向編輯模式并結(jié)合 VisIncr 這個(gè)插件在開發(fā)測(cè)試場(chǎng)景中的應(yīng)用,讓讀者更直觀了解 Vim 的縱向編輯模式這一功能。
開始之前
人類大腦對(duì)文字的處理是平面式的,所以我們?yōu)g覽文章、查找資料或者重構(gòu)代碼,要么是橫向讀,要么是縱向讀,要么使用搜索功能,將文字作為一個(gè)平面整體。而在編輯文字、編寫代碼的時(shí)候則不是橫向就是縱向。常規(guī)文本編輯器都是橫向編輯,而縱向編輯也常被作為特色功能。比如 Vim、EditPlus、UltraEdit 這些編輯器都有縱向編輯模式,或者稱為列模式。像日常文字處理工具 MicroSoft Word、OpenOffice Writer 也可以通過(guò)按下功能鍵 ALT,實(shí)現(xiàn)縱向選中文本,然后對(duì)文本進(jìn)行操作??v向編輯不僅是編輯器的一種功能,更是人們思考問(wèn)題的一種方式,項(xiàng)目符號(hào)、段落編號(hào),都是縱向編輯的體現(xiàn)。
Vim 的縱向編輯模式啟動(dòng)方便,使用靈活,還可以配合上插件實(shí)現(xiàn)很實(shí)用的高級(jí)功能。
啟動(dòng)方法
在 Vim 命令模式下,移動(dòng)游標(biāo)定位于某一個(gè)位置,鍵入 ctrl-v后狀態(tài)欄上出現(xiàn) VISUAL BLOCK 字樣,即進(jìn)入縱向編輯模式。移動(dòng)游標(biāo)以按需選擇待編輯的區(qū)域。注意:在 Windows 版本的 Vim 中,鍵組合 ctrl-v通常被映射為文本粘貼,所以 Window 版的 Vim 的縱向編輯模式由 ctrl-q啟動(dòng)。當(dāng)然靈活的 Vim 也可以由用戶自行定義組合鍵。
示例 1:縱向編輯在批量修改代碼的應(yīng)用演示
將數(shù)列:
10.1.5.214 10.1.5.212 10.1.5.210
編輯成序列:
ping -c 4 10.5.5.214 >> result0 ping -c 4 10.5.5.212 >> result0 ping -c 4 10.5.5.210 >> result0
這是一個(gè)將 IP 數(shù)列修改成可執(zhí)行的 ping 命令序列的過(guò)程。
***步:修改
將 IP 數(shù)列中第二段所有數(shù)字“1” 修改為“5”:
將游標(biāo)定位***個(gè)行 IP 地址第二段的“1”
ctrl-v 進(jìn)入縱向編輯模式
G 移動(dòng)游標(biāo)到***一行,可視塊覆蓋所要修改的列
r 進(jìn)入修改模式
5 輸入數(shù)字“5”
ESC 退出縱向編輯模式,同時(shí)所有被選中的數(shù)字都被改成了“5”,并回到命令模式
結(jié)果如下:
10.5.5.214 10.5.5.212 10.5.5.210
第二步:前添加
在所有行之前添加“ping – c 4 ”:
將游標(biāo)定位到***行***列
ctrl-v 進(jìn)入縱向編輯模式
G 移動(dòng)游標(biāo)到***一行***列,可視塊覆蓋了***列
I 進(jìn)入行首插入模式
ping -c 4 輸入所要求字符“ping – c 4 ”
ESC 退出縱向編輯模式的同時(shí)所有選中的字符前都添加了“ping – c 4 ”,回到命令模式
結(jié)果如下:
ping -c 4 10.5.5.214 ping -c 4 10.5.5.212 ping -c 4 10.5.5.210
第三步:后添加
在所有行之后添加“>> result0”:
將游標(biāo)定位到***行***一列
ctrl-v 進(jìn)入縱向編輯模式
G 移動(dòng)游標(biāo)到***一行***一列,VISUAL BLOCK 覆蓋了***一列
A 進(jìn)入行尾插入模式
>> result 輸入所要求字符“>> result0”
ESC 退出縱向編輯模式的同時(shí)所有選中的字符后都添加了“ >> result0”,回到命令模式
結(jié)果如下:
ping -c 4 10.5.5.214 >> result0 ping -c 4 10.5.5.212 >> result0 ping -c 4 10.5.5.210 >> result0
以上三個(gè)步驟有一個(gè)共同特點(diǎn),就是都縱向?yàn)榫庉嫹较?。以上由三行代碼為例的方法同樣也可以適用于更多的行。
VisIncr 安裝與操作
以上例子中所演示的對(duì)代碼的縱向編輯,通過(guò)一般的代碼重構(gòu)功能或者結(jié)合正則表達(dá)式的查找替換也可以實(shí)現(xiàn)。然而 Vim 的縱向編輯模式還可以通過(guò)插件 VisIncr 的擴(kuò)展,實(shí)現(xiàn)更豐富的功能,如縱向的生成數(shù)列。
從 Vim 的官方網(wǎng)站上搜索找到 VisIncr 插件的安裝文件,并下載到 Vim 工作目錄。執(zhí)行以下命令即可安裝該插件:
vim visincr.vba.gz :so % :q
操作方法以示例 1 的代碼為例:
使用 ctrl-v和移動(dòng)光標(biāo)選擇***都為數(shù)字“0”的一列
:鍵入冒號(hào)觸發(fā) Vim 進(jìn)入命令行模式
:I以***個(gè)數(shù)字為出發(fā)點(diǎn),縱向生成增量數(shù)列,幅度為 1
ENTER 鍵入駕車鍵執(zhí)行命令
結(jié)果如下:
ping -c 4 10.5.5.214 >> result0 ping -c 4 10.5.5.212 >> result1 ping -c 4 10.5.5.210 >> result2
示例 2:VisIncr 在生成測(cè)試數(shù)據(jù)的應(yīng)用演示
在應(yīng)用程序開發(fā)過(guò)程中經(jīng)常要生成一個(gè)簡(jiǎn)單有規(guī)律的測(cè)試數(shù)據(jù)。比如對(duì)一張表:
testTable (”ipaddr” ,”filename”, ”owner”)
生成如下 SQL 語(yǔ)句:
insert into test values("10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result1”,”testb”); insert into test values(”10.5.5.210”,”result2”,”testc”);
這個(gè)縱向有規(guī)律的語(yǔ)句序列,可以借助 VinIncr 應(yīng)用縱向編輯功能來(lái)構(gòu)造。
***步:準(zhǔn)備
打開一個(gè)新的 Vim 編輯頁(yè)面,在命令模式下先輸入一個(gè)“3”,然后鍵入“i”進(jìn)入編輯模式。數(shù)字“3”代表本次輸入的內(nèi)容會(huì)重復(fù)輸 3 遍。
在 VIM 中先輸入***行:
insert into test values(”10.5.5.214”,”result0”,”testa”);
以回車結(jié)束行輸入并新開一行,按 ESC 鍵退出編輯模式。
如果如下:
insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.214”,”result0”,”testa”);
第二步:構(gòu)造遞減數(shù)列
對(duì)于 ipaddr 列,使用 ctrl-v和移動(dòng)光標(biāo)選擇 IP 地址***一段以 2 為幅度遞減的部分:
: 鍵入冒號(hào)觸發(fā) Vim 進(jìn)入命令行模式
:I - 2 以***個(gè)數(shù)字為出發(fā)點(diǎn),縱向生成遞減數(shù)列,幅度為 2
ENTER 鍵入駕車鍵執(zhí)行命令
結(jié)果如下:
insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result0”,”testa”); insert into test values(”10.5.5.210”,”result0”,”testa”);
第三步:構(gòu)造遞增數(shù)列
對(duì)于 filename 列,使用上一節(jié)介紹的方式,結(jié)果如下:
insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result1”,”testa”); insert into test values(”10.5.5.210”,”result2”,”testa”);
第四步:構(gòu)造字母遞增數(shù)列
對(duì)于 owner 列,使用 ctrl-v和移動(dòng)光標(biāo)選擇英文字母將要遞增的部分。
: 鍵入冒號(hào)觸發(fā) Vim 進(jìn)入命令行模式
:IA 以***個(gè)字母為出發(fā)點(diǎn),縱向生成按字母表排序的序列
ENTER 鍵入回車鍵執(zhí)行命令
結(jié)果如下:
insert into test values(”10.5.5.214”,”result0”,”testa”); insert into test values(”10.5.5.212”,”result1”,”testb”); insert into test values(”10.5.5.210”,”result2”,”testc”);
以上步驟即演示了借助 Vim 插件 VisIncr 對(duì)代碼的縱向編輯,生成在縱向有邏輯規(guī)律的數(shù)列。
總結(jié)
Vim 不僅是一個(gè)編輯工具還是一套思考方法,Vim 有很多引導(dǎo)思維方向的技巧,讓 Vim 在這個(gè)各種編輯器層出不窮的時(shí)候歷久彌新。本文從縱向編輯為切入點(diǎn),結(jié)合 VisIncr 演示了開發(fā)、測(cè)試過(guò)程中可以使用的實(shí)例。
原文鏈接:http://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/index.html?ca=drs
【編輯推薦】