我正在研究nand2tetris,最后我得到了很多文件,最终看起来像这样:
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 :(得分:7)
一种方法是使用Vim宏。
<强>概述强>
复制该行然后粘贴该行。增加两个数字。
宏
qqyyp<c-a>l<c-a>q
请注意,这会将宏保存到寄存器q
。
通过@q
执行宏,或通过14@q
一起完成。
如需更多帮助,请参阅:
:h q
:h ctrl-a
答案 1 :(得分:2)
我会像Peter 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
答案 2 :(得分: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]);
您可以选择&#39; 0&#39;在第一行,使用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]);