我的文本文件中有一列数字,如下所示:
10 1 -0.93
11 1 -0.93
12 1 -0.93
13 1 -0.93
...
(第一列数字不是行号。)
我想通过将每个数字乘以 0.1
、0.2
、0.3
等来替换最后一列数字,这样结果是
10 1 -0.093
11 1 -0.186
12 1 -0.279
13 1 -0.372
...
我知道我可以使用 =
寄存器进行数学运算(这是正确的术语吗?),但我似乎不知道如何自动执行此操作。请指教。
最佳答案
假设0.1
/0.2
/...对应“行号/10”,可以使用
%s/\v(\S+)$/\=str2float(submatch(1)) * line('.') * 0.1
它捕获最后一列并使用
返回“value * line_number * 0.1”的结果
子替换表达式(有关详细信息,请参阅 :help sub-replace-expression
)。
如果值不是从第 1 行开始,您可以使用视觉选择(设置 line("'<")
)并使用 line('.') - line("'<") + 1
知道你在街区的哪个位置。然后添加初始乘数(此处为 0.1
):
'<,'>s/\v(\S+)$/\=str2float(submatch(1)) * (line('.') - line("'<") + 1) * 0.1
关于math - Vim 将一列数字乘以一系列数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68548475/