Vim 的縱向編輯模式

啓動方法

在 Vim 命令模式下,移動遊標定位於某一個位置,鍵入 ctrl-v後狀態欄上出現 VISUAL BLOCK 字樣,即進入縱向編輯模式。移動遊標以按需選擇待編輯的區域。注意:在 Windows 版本的 Vim 中,鍵組合 ctrl-v通常被映射爲文本粘貼,所以 Window 版的 Vim 的縱向編輯模式由 ctrl-q啓動。當然靈活的 Vim 也可以由用戶自行定義組合鍵。

示例 1:縱向編輯在批量修改代碼的應用演示

將數列:

 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

這是一個將 IP 數列修改成可執行的 ping 命令序列的過程。

第一步:修改

將 IP 數列中第二段所有數字“1” 修改爲“5”:

將遊標定位第一個行 IP 地址第二段的“1”

ctrl-v    進入縱向編輯模式

G          移動遊標到最後一行,可視塊覆蓋所要修改的列

r         進入修改模式

5         輸入數字“5”

ESC     退出縱向編輯模式,同時所有被選中的數字都被改成了“5”,並回到命令模式

結果如下:

 10.5.5.214 
 10.5.5.212 
 10.5.5.210

第二步:前添加

在所有行之前添加“ping – c 4 ”:

將遊標定位到第一行第一列

ctrl-v            進入縱向編輯模式

G                     移動遊標到最後一行第一列,可視塊覆蓋了第一列

I                        進入行首插入模式

ping -c 4    輸入所要求字符“ping – c 4 ”

ESC                退出縱向編輯模式的同時所有選中的字符前都添加了“ping – c 4 ”,回到命令模式

結果如下:

 ping -c 4 10.5.5.214 
 ping -c 4 10.5.5.212 
 ping -c 4 10.5.5.210

第三步:後添加

在所有行之後添加“>> result0”:

將遊標定位到第一行最後一列

ctrl-v   進入縱向編輯模式

G        移動遊標到最後一行最後一列,VISUAL   BLOCK  覆蓋了最後一列

A        進入行尾插入模式

>> result 輸入所要求字符“>> result0”

ESC    退出縱向編輯模式的同時所有選中的字符後都添加了“ >> result0”,回到命令模式

結果如下:

 ping -c 4 10.5.5.214 >> result0 
 ping -c 4 10.5.5.212 >> result0 
 ping -c 4 10.5.5.210 >> result0

以上三個步驟有一個共同特點,就是都縱向爲編輯方向。以上由三行代碼爲例的方法同樣也可以適用於更多的行。

VisIncr 安裝與操作

以上例子中所演示的對代碼的縱向編輯,通過一般的代碼重構功能或者結合正則表達式的查找替換也可以實現。然而 Vim 的縱向編輯模式還可以通過插件 VisIncr 的擴展,實現更豐富的功能,如縱向的生成數列。

Vim 的官方網站上搜索找到 VisIncr 插件的安裝文件,並下載到 Vim 工作目錄。執行以下命令即可安裝該插件:

 vim visincr.vba.gz 
 :so % 
 :q

操作方法以示例 1 的代碼爲例:

使用 ctrl-v和移動光標選擇最後都爲數字“0”的一列

:鍵入冒號觸發 Vim 進入命令行模式

:I以第一個數字爲出發點,縱向生成增量數列,幅度爲 1

ENTER 鍵入駕車鍵執行命令

結果如下:

 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 在生成測試數據的應用演示

在應用程序開發過程中經常要生成一個簡單有規律的測試數據。比如對一張表:

 testTable (”ipaddr” ,”filename”, ”owner”)

生成如下 SQL 語句:

 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”);

這個縱向有規律的語句序列,可以藉助 VinIncr 應用縱向編輯功能來構造。

第一步:準備

打開一個新的 Vim 編輯頁面,在命令模式下先輸入一個“3”,然後鍵入“i”進入編輯模式。數字“3”代表本次輸入的內容會重複輸 3 遍。

在 VIM 中先輸入第一行:

 insert into test values(”10.5.5.214”,”result0”,”testa”);

以回車結束行輸入並新開一行,按 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”);

第二步:構造遞減數列

對於 ipaddr 列,使用 ctrl-v和移動光標選擇 IP 地址最後一段以 2 爲幅度遞減的部分:

:                 鍵入冒號觸發 Vim 進入命令行模式

:I -2 以第一個數字爲出發點,縱向生成遞減數列,幅度爲 2

ENTER       鍵入駕車鍵執行命令

結果如下:

 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”);

第三步:構造遞增數列

對於 filename 列,使用上一節介紹的方式,結果如下:

 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”);

第四步:構造字母遞增數列

對於 owner 列,使用 ctrl-v和移動光標選擇英文字母將要遞增的部分。

:  鍵入冒號觸發 Vim 進入命令行模式

:IA 以第一個字母爲出發點,縱向生成按字母表排序的序列

ENTER 鍵入回車鍵執行命令

結果如下:

 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 對代碼的縱向編輯,生成在縱向有邏輯規律的數列。

總結

Vim 不僅是一個編輯工具還是一套思考方法,Vim 有很多引導思維方向的技巧,讓 Vim 在這個各種編輯器層出不窮的時候歷久彌新。本文從縱向編輯爲切入點,結合 VisIncr 演示了開發、測試過程中可以使用的實例


轉:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章