2016-03-23 111 views
0

我有一個包含ids行的文件。我需要通過並將相同的模式組添加到每個ID組。這裏是我的意思的例子:如何在vim中通過視覺選擇運行多行宏?

randomstring#morerandom 
randomstring#morerandom 
randomstring#morerandom 

randomstring#morerandom 
randomstring#morerandom 
randomstring#morerandom 

# pattern to add 
thingA; 
thingB; 
thingC; 

假設randomstrings實際上是隨機的,可能有數百個這樣的線,且各組都是平等的尺寸,但也可以大於3行。我想在每組行的#號之後插入三個東西。這是輸出應該是什麼樣子:

randomstring#thingA;morerandom 
randomstring#thingB;morerandom 
randomstring#thingC;morerandom 

randomstring#thingA;morerandom 
randomstring#thingB;morerandom 
randomstring#thingC;morerandom 

我最初的計劃是猛拉東西添加到寄存器A,B,C和創建開始於一個組的開頭宏,插入每一件事在#之後,結束於下一組的乞討。 ^f#"apj^f#"bpj^f#"cpjj^

我試着運行這個宏,突出顯示我想運行的區域,然後做一個:normal @q。然而,這是奇怪的事情,似乎每行添加多件事情。

只是用一個數字運行我的宏,並猜測文件的長度是最好的方法來做到這一點?即[email protected]

另外,是否有更好的方法來將事物插入連續的寄存器中,而不是手動拉開每個寄存器?

+0

如果你在每組有100行,你如何分配「_three things_」來分配?或者如果你有100條線,那麼你也有100條東西? – zdim

+0

@zdim事物的數量總是等於每組的行數。 –

回答

0

確保每個塊(包括最後一個塊)下面都有一個空行,就像在你的示例中一樣;那麼你可以運行這個:

:'<,'>g/\n\n/normal [email protected] 

這應該在每個塊的第一行上運行你的宏,只限於視覺選擇。

或者,刪除你的視覺塊,將其粘貼到一個新的緩衝區,然後只需要使用普通微距環(通過視覺選擇無限制)改造的東西,然後把它放回原來的緩衝區:

d:enew<CR>[email protected]@[email protected]:bd!<CR>P 

(如果我沒有搞錯地方)

+0

你能解釋一下:'<,'> g/\ n \ n/normal 2k @ q部分? 2k在做什麼? –

+0

'2k'上升兩行,因爲搜索'\ n \ n'會將您置於該塊的最後一行。 – Amadan