2009/03/10

VIM tip: 自動插入數字列號,使用巨集及VIM內建函式

在ptt上看到網友CyberFret問了一個問題:

[問題]vim如何作到ultraedit的自動插入數字列號
input  int[0]
input  int[1]
input  int[2]
input  int[3]
如上面的sample code
在ultraedit裡面, 可以用 "區塊-->插入數字列號" 來自動插入一整排的等差數列
如上面的 0 -3, 請問在vim裡面要如何辨到? 謝謝


換句話說就是只輸入上列第一行,如何快速產生下面幾行。這個問題其實google一下應該能找到相關討論,我是從這[]來的,當然也不完全是抄啦 ^^"

要達到這個功能方法有2:
  1. 使用巨集
  2. 使用VIM built-in function
先來說說第一種方法。請在輸入完第一列(到底是列還是行??)後,在數字處按造下面keyin來製作巨集:
qa
yy
p
Ctrl-a
q

上面第一個命令表開始錄製巨集a;第二,複製游標所在列;第三,貼上;第四,將游標所在處的數字加1;第五,結束巨集。其中若要改成數字減一則在第四個命令改成Ctrl-x,另外,因為在windows中Ctrl-a對應到全選,所以對於windows的vim使用者必需先下:nunmap <C-A>將全選的功能取消。

在錄製好巨集後,接著再輸入15@a便會重覆執行巨集a,15次。以上是第一個方法。

第二種方法為使用內建函式。先從一簡單的例子來看,以下命令:
:0put =range(11,15)

將輸出
11
12
13
14
15

以此類推,若要CyberFret的要求則輸入以下命令即可。
:for i in range(0,3) | put ='input int['.i.']' | endfor

No comments: