2010-10-21 36 views
7

有時我需要在一個文件中插入一些相似的行,這些文件只有一個序列號。例如,如何在vim中插入相似的行時儘量減少擊鍵次數?

print "func 1"; 
print "func 2"; 
print "func 3"; 
print "func 4"; 
print "func 5"; 

使用VIM,我最終拷貝粘貼使用[yypppp]的第一行,然後改變最後四行。如果你有更多的插入行,這真的很慢。

在vim中有更快的方法嗎?


這樣的一個例子是:

初始狀態

boot(); 
format(); 
parse(); 
compare(); 
results(); 
clean(); 

最終狀態

print "func 1"; 
format(); 
print "func 2"; 
parse(); 
print "func 3"; 
compare(); 
print "func 4"; 
results(); 
print "func 5"; 
clean(); 

回答

12

記錄一個宏。以下是您特定示例的工作流程:

複製粘貼第一行。然後,

qa  : Start recording macro to register a 
yy  : Yank current line 
p  : Paste current line in line below 
/\d  : Search for start of number (you can skip this command, the next command automagically moves the cursor to the number) 
C-A  : Control-A increments the number 
q  : Stop recording macro 
[email protected]  : Replay macro 3 times 

您可以用任何數量的替代3到不斷產生新的print線與遞增的數字。

對於你的第二個例子,你可以添加

j  : Moves one line down 

yy命令後,得到交替的命令和print的線。

+3

你實際上不需要做'/ [0-9] \ +',VIM自動將光標移動到數字 – Hasturkun 2010-10-21 08:25:24

+0

@Hasturkun:哇,這很酷。 – Chetan 2010-10-21 08:40:48

+0

您可以替換'/ [0-9] \ +'有一個更好的'/ \ D'(你並不需要得到整個數量爲比賽,你只需要將光標置於一個數字,所以'\ +'在這裏是一種過度殺傷,'\ d'是'[0-9]'的快捷方式,速度更快,但這並不重要,它還可以最大限度地減少應該按下的按鍵數量。 – ZyX 2010-10-21 15:54:39

1

你有插件可以做到。例如,visincr。從視覺上選擇您的數字列,並運行:I

另一種方法是錄製一個宏。運行qx開始錄製宏註冊Xyiw猛拉字光標下,j走一條線下來,viwp到貼吧,CTRL一個遞增新號碼,q停止錄製,並然後@x重播寄存器x的內容。

0

對於這種特殊情況,您可以使用宏。關於如何在this post中完成序列號的編寫很好。

您需要更改帖子中的示例,先寫出整行,然後記錄一個複製行並更新計數器的宏。