在我的编程环境中,我有相当大的2D数组。它的大小是90x40。
我必须通过从外部文件加载数据来填充此数组。
加载数据的机制包括一个绑定文件,我必须在其中进行如下所示的绑定:
Array[0][0] =
Array[0][1] =
Array[0][2] =
...
Array[20][37] =
Array[20][38] =
...
Array[89][38] =
Array[89][39] =
我很容易计算出必须创建3600个部分唯一的行。
我以为我可以在gVim中创建[..] [..]元素,然后在它们前面添加数组的名称。虽然添加前缀很简单,但我坚持创建[..] [..]位。
在我的场景中,我想通过执行以下操作来解决此问题:
:%s/$/\[ -- my expression 1 -- \]/g
命令)数字从0到89,以40个元素(四十个零,四十个,四十二个等)为块。:%s/$/\[ -- my expression 2-- \]/g
命令)数字从0到39的四十个元素(零,一,二,......,三十九,零,一,......等。) 我的表达式1 将评估为操作(number of line) mod 90
我的表达式2 会评估操作提醒(number of line) mod 40
现在的问题是:
(number of line)
(number of line) mod XX
表达式?答案 0 :(得分:3)
如果您不想使用正则表达式,请在命令模式下尝试以下操作:
for i in range(0, 89) | for j in range(0, 39) | put = 'Array['.i.']['.j.'] =' | endfor | endfor
答案 1 :(得分:2)
VIM宏是一个更好的解决方案。您应该在第一行写Array[0][0]
,开始录制带有qq
的宏,然后yyp
(复制并粘贴行),2f[l
将光标放在第二个数组上索引,按<C-a>
将光标下的数字增加1,然后按q
停止录制。完成此操作后,只需按38@q
重复宏38次即可构建完整列表。
然后你再次开始录制一个宏,qq
然后39k
向上走39行,V39jy39jp
选择,复制并粘贴39行,然后0f[l
到达要阻止的第一个数组索引<C-v>39j
选择第一个索引<C-a>
将其递增1并q
结束记录。现在点击88@q
重复最后一步88次以获得所需的输出。
注意:宏的执行,特别是最后一个88@q
,需要一段时间,所以你必须耐心等待。
然而,为了完整起见,我想提一下表达式1是如何完成的。 :%s/$/\=(line('.') - 1) % 90
,类似于表达式2