gVim和2D数组

时间:2014-05-20 20:57:59

标签: arrays regex vim teststand

在我的编程环境中,我有相当大的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中创建[..] [..]元素,然后在它们前面添加数组的名称。虽然添加前缀很简单,但我坚持创建[..] [..]位。

在我的场景中,我想通过执行以下操作来解决此问题:

  1. 创建3600行
  2. 在每行/每行的末尾添加(使用:%s/$/\[ -- my expression 1 -- \]/g命令)数字从0到89,以40个元素(四十个零,四十个,四十二个等)为块。
  3. 在每行/每行的末尾添加(使用:%s/$/\[ -- my expression 2-- \]/g命令)数字从0到39的四十个元素(零,一,二,......,三十九,零,一,......等。)
  4. 我的表达式1 将评估为操作(number of line) mod 90

    的商

    我的表达式2 会评估操作提醒(number of line) mod 40

    现在的问题是:

    1. 如何评估(number of line)
    2. 如何计算(number of line) mod XX表达式?
    3. 也许有更好的方法?

2 个答案:

答案 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