2014-09-04 74 views
1

我的工作nand2tetris增加當前行的整數,和我結了大量的文件爲此這樣看:如何通過1

Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[1], load=load, out=out]1]); 
... 
Bit(in=in[15], load=load, out=out[15]); 

所以我一直在唬弄第一行,然後使用15p,然後做:s/0/i/g 15次(其中i是我需要的索引)。我注意到,我可以用:s/\[\d\]/\[i\]/g替換它,但是即使在這裏,我每次運行該命令時都會手動設置值i。有沒有一個命令我可以運行,以便i自動計算爲\d+1,我可以重複每條命令的命令,而無需手動指定值?

+0

我也想得到答案。但我恐怕只有正則表達式才能實現它。 – HuStmpHrrr 2014-09-04 17:35:31

+0

你可以使用替代,但你需要使用'\ ='。例如':S/\ d \ +/\ = str2nr(子匹配(0))+ 1 /'。有關更多信息,請參閱':h:s \ ='。 – 2014-09-04 18:01:06

+0

@PeterRincker我不相信str2nr是必要的。 – FDinoff 2014-09-05 00:06:19

回答

2

我會做像彼得Rincker(上即時宏真棒),但這裏是另一種解決方案,只是爲了它的緣故:

yy       " yank current line 
15p      " paste 15 times 
:,']s/0/\=line('.')-1/g " substitute every 0 from cursor to last 
          pasted line with the current line number 
+0

+1總是有好的選擇!應該注意,如果代碼塊在文件中較低,可能需要將'-1'調整爲其他數字。或者你可以做更多的技巧,比如':,'] s/0/\ = line('。') - line(「'[」)/ g'。 – 2014-09-04 20:05:17

+0

@PeterRincker,謝謝,你提出了一個很好的觀點。 – romainl 2014-09-04 20:15:11

6

一種方法是使用Vim宏。

概述

複製該行,然後粘貼行。增加兩個數字。

qqyyp<c-a>l<c-a>q 

注意這個保存宏到寄存器q

通過@q執行宏或通過[email protected]一起執行此操作。

如需更多幫助,請參見:

:h q 
:h ctrl-a 
0

如果我理解你想要正確地做什麼,你應該能夠在vim使用increment包。把你的首行文字,並將其粘貼使用15p 15次:

Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 
Bit(in=in[0], load=load, out=out[0]); 

您可以在第一行中選擇「0」,並用Ctrl-V進入可視塊模式。在視覺模塊模式下高亮顯示底部,以便所有0都高亮顯示。然後你可以輸入:Inc<CR>。這將增加的數字,基本上是編號的行文字:

Bit(in=in[ 0], load=load, out=out[0]); 
Bit(in=in[ 1], load=load, out=out[0]); 
Bit(in=in[ 2], load=load, out=out[0]); 
Bit(in=in[ 3], load=load, out=out[0]); 
Bit(in=in[ 4], load=load, out=out[0]); 
Bit(in=in[ 5], load=load, out=out[0]); 
Bit(in=in[ 6], load=load, out=out[0]); 
Bit(in=in[ 7], load=load, out=out[0]); 
Bit(in=in[ 8], load=load, out=out[0]); 
Bit(in=in[ 9], load=load, out=out[0]); 
Bit(in=in[10], load=load, out=out[0]); 
Bit(in=in[11], load=load, out=out[0]); 
Bit(in=in[12], load=load, out=out[0]); 
Bit(in=in[13], load=load, out=out[0]); 
Bit(in=in[14], load=load, out=out[0]); 
Bit(in=in[15], load=load, out=out[0]);