Vim 如何将当前行上的整数增加1
我正在研究NAND2TTERIS,最终我得到了很多文件,这些文件最终看起来像这样:Vim 如何将当前行上的整数增加1,vim,nand2tetris,Vim,Nand2tetris,我正在研究NAND2TTERIS,最终我得到了很多文件,这些文件最终看起来像这样: 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,然后做了15次:s/0/I/g(其中I是我需要的索引)。我注意到,我可以用:s/\[\d\]/\[I\]/g替换它,但即使在这里,每次运行
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,然后做了15次
:s/0/I/g
(其中I
是我需要的索引)。我注意到,我可以用:s/\[\d\]/\[I\]/g
替换它,但即使在这里,每次运行命令时,我都会手动设置I
的值。我是否可以运行一个命令,以便自动将I
计算为\d+1
,并且我可以对每一行重复该命令,而无需手动指定值?一种方法是使用Vim宏
概述
复制该行,然后粘贴该行。两个数字都递增
宏
qqyyp<c-a>l<c-a>q
一种方法是使用Vim宏 概述 复制该行,然后粘贴该行。两个数字都递增 宏
qqyyp<c-a>l<c-a>q
如果我理解了您想要正确执行的操作,那么您应该能够在vim中使用该软件包。使用
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
。这将增加数字,基本上是对文本中的行进行编号:
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]);
如果我理解了您想要正确执行的操作,那么您应该能够在vim中使用该软件包。使用
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
。这将增加数字,基本上是对文本中的行进行编号:
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]);
我会像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
我会像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
我也想要答案。但恐怕我们不能只用正则表达式来实现。您可以使用替换,但需要使用
\=
。e、 g.:s/\d\+/\=str2nr(子匹配(0))+1/
。有关详细信息,请参见:h:s\=
。@PeterRincker我认为str2nr不是必需的。@FDinoff太棒了!你说得对。这也确实缩短了时间::s/\d\+/\=submatch(0)+1/
我也想要答案。但恐怕我们不能只用正则表达式来实现。您可以使用替换,但需要使用\=
。e、 g.:s/\d\+/\=str2nr(子匹配(0))+1/
。有关详细信息,请参见:h:s\=
。@PeterRincker我认为str2nr不是必需的。@FDinoff太棒了!你说得对。这也确实缩短了时间::s/\d\+/\=submatch(0)+1/
+1有选择总是好的!应注意,如果文件中的代码块较低,则可能需要将-1
调整为其他数字。或者你可以做更多的把戏,比如:,']s/0/\=line('.')-line('[“”)/g
+1有选项总是好的!应该注意的是,如果文件中的代码块较低,你可能需要将-1
调整为其他数字。或者你也可以做更多的把戏,比如,']s/0/\=line('.')-line('.')-line('.')-line('[“”)/g
)。