Vim 将一列数字乘以一系列数字

jlc*_*lin 2 math vim

我的文本文件中有一个数字列,如下所示:

10  1  -0.93
11  1  -0.93
12  1  -0.93
13  1  -0.93
...
Run Code Online (Sandbox Code Playgroud)

(第一列数字不是行号。)

我想通过每一个乘以更换号码的最后一列0.10.20.3,等这样的结果是

10  1  -0.093
11  1  -0.186
12  1  -0.279
13  1  -0.372
...
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用=寄存器进行数学运算(这是正确的术语吗?),但我似乎无法弄清楚如何将其自动化。请指教。

Mar*_*rth 5

假设0.1/ 0.2/... 对应于“行号 / 10”,您可以使用

%s/\v(\S+)$/\=str2float(submatch(1)) * line('.') * 0.1
Run Code Online (Sandbox Code Playgroud)

它捕获最后一列并使用
子替换表达式返回“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
Run Code Online (Sandbox Code Playgroud)