使用 vim 多次粘贴块(增加)编号
Paste block multiple times with (increasing) numbering using vim
我在 yaml 文件中有一个块,我想将其复制并粘贴几次:
- probeNumber: 1
probeLocation: [0, 0, 0.1]
是否可以在每个块中自动增加probeNumber
和probeLocation
的值?像这样:
- probeNumber: 1
probeLocation: [0, 0, 0.1]
- probeNumber: 2
probeLocation: [0, 0, 0.15]
- probeNumber: 3
probeLocation: [0, 0, 0.20]
probeLocation
不是整数,它在每个块中增加一个固定值(0.05)。我需要大约 1000 个这样的块,所以手动执行此操作是不可行的。
在您的文本文件中创建一个模板,假设从第 1 行开始。
- probeNumber: 1
probeLocation: [0, 0, 0.1]
- probeNumber: 1
probeLocation: [0, 0, 0.1]
...repeat the number as you want, e.g. copy the first block and do 100p for 100 copy
然后使用以下命令更新值:
用于更新 probeNumber
:%s!1$!\=printf("%d", line('.')/3+1)!g
用于更新probeLocation
:%s!0\.1!\=printf("%0.2f", 0.10+(line('.')/3)*0.05)!g
其中0.10
为初始值,0.05
为增量。
感谢 SergioAraujo 指出原表达式的错误
:%s!0\.1$!\=printf("0.%d", 10+(line('.')/3)*5)!g
失败,因为替换值永远不会大于 1。
主要思想是使用line
函数更新值,您可以查看Replace a pattern with current line number and Insert line numbers了解更多详情。
我找到了解决这个问题的另一种方法:
如果剪贴板上有前三行,这意味着前两行和一个空行,您可以使用以下内容创建文件:
:for i in range(999) | silent! 0put + | endfor
为了增加probeNumber行数:
:let c=1 | g/\d\+$/ s//\=c/ | let c+=1
现在带有 probeLocation 的行:
:let c=0.10 | g/0\.1\ze]/ s//\=printf("%0.2f", c)/ | let c+=0.05
我在 yaml 文件中有一个块,我想将其复制并粘贴几次:
- probeNumber: 1
probeLocation: [0, 0, 0.1]
是否可以在每个块中自动增加probeNumber
和probeLocation
的值?像这样:
- probeNumber: 1
probeLocation: [0, 0, 0.1]
- probeNumber: 2
probeLocation: [0, 0, 0.15]
- probeNumber: 3
probeLocation: [0, 0, 0.20]
probeLocation
不是整数,它在每个块中增加一个固定值(0.05)。我需要大约 1000 个这样的块,所以手动执行此操作是不可行的。
在您的文本文件中创建一个模板,假设从第 1 行开始。
- probeNumber: 1
probeLocation: [0, 0, 0.1]
- probeNumber: 1
probeLocation: [0, 0, 0.1]
...repeat the number as you want, e.g. copy the first block and do 100p for 100 copy
然后使用以下命令更新值:
用于更新 probeNumber
:%s!1$!\=printf("%d", line('.')/3+1)!g
用于更新probeLocation
:%s!0\.1!\=printf("%0.2f", 0.10+(line('.')/3)*0.05)!g
其中0.10
为初始值,0.05
为增量。
感谢 SergioAraujo 指出原表达式的错误
:%s!0\.1$!\=printf("0.%d", 10+(line('.')/3)*5)!g
失败,因为替换值永远不会大于 1。
主要思想是使用line
函数更新值,您可以查看Replace a pattern with current line number and Insert line numbers了解更多详情。
我找到了解决这个问题的另一种方法:
如果剪贴板上有前三行,这意味着前两行和一个空行,您可以使用以下内容创建文件:
:for i in range(999) | silent! 0put + | endfor
为了增加probeNumber行数:
:let c=1 | g/\d\+$/ s//\=c/ | let c+=1
现在带有 probeLocation 的行:
:let c=0.10 | g/0\.1\ze]/ s//\=printf("%0.2f", c)/ | let c+=0.05