1

我正在研究 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/g15 次(i我需要的索引在哪里)。我注意到我可以用 替换它,但即使在这里,我每次运行命令时都:s/\[\d\]/\[i\]/g手动设置值。i是否有我可以运行的命令,以便i自动计算为\d+1,我可以为每一行重复该命令,而无需手动指定值?

4

3 回答 3

7

一种方法是使用 Vim 宏。

概述

复制该行,然后粘贴该行。增加两个数字。

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

请注意,这会将宏保存到寄存器q中。

通过 执行宏@q或通过 一起执行宏14@q

如需更多帮助,请参阅:

:h q
:h ctrl-a
于 2014-09-04T17:58:14.347 回答
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
于 2014-09-04T19:51:02.383 回答
0

如果我理解您想要正确执行的操作,您应该能够在 vim中使用增量包。获取第一行文本并使用以下命令粘贴 15 次15p

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]);
于 2014-09-04T18:45:59.320 回答