如何将命令应用于Vim中选择中的每一行并替换为结果(如电子表格)?

时间:2011-07-13 14:07:46

标签: vim

我有一个值表(实际用LaTeX标记编写),我只能使用Ctrl+Q

选择一列

例如,

% Select the second column only ....
1.75130211563   & 0.0299693961831 \\
1.72144412106   & 0.0181406611688 \\
1.92102386609   & 0.0247758598737 \\
1.56512790839   & 0.0137107006809 \\
1.75263937567   & 0.017155656704  \\
1.99501744437   & 0.39550649953   \\
1.96862597164   & 0.030198328601  \\
...

我想减少所选数字的小数位数(例如,对于选中的每个数字,我应用round(NUMBER * 100)/100以获得例如舍入到2位小数的数字)。为此,我需要首先使用变量来引用NUMBER(该行上的数字)以及用输出替换当前选择。

我该怎么做?

此外,如果无法做到这一点,我可以将该列复制到实际的电子表格程序中并在那里进行编辑,但如何将其粘贴回原位?

更新:我接受了答案。它并不像我希望的那样整洁,但它确实有意义。谢谢!

另一次更新:要从外部电子表格中粘贴列,请将列粘贴到:new缓冲区中,使用Ctrl+Q选择数据并将其拖入寄存器。移至数据表格中的顶行和相应列,然后使用P粘贴。

2 个答案:

答案 0 :(得分:3)

你在找这个吗?

:'<,'>s#\%V\d*\.\d\+#\=round(str2float(submatch(0))*100)/100#g

答案 1 :(得分:1)

这似乎有效:

:'<,'>:s/\d\+\.\d\+/\=printf("%.2f", str2float(submatch(0)))/

即。目视选择第一列并发出上述命令。

% Select the second column only ....
1.75   & 0.0299693961831 \\
1.72   & 0.0181406611688 \\
1.92   & 0.0247758598737 \\
1.57   & 0.0137107006809 \\
1.75   & 0.017155656704  \\
2.00   & 0.39550649953   \\
1.97   & 0.030198328601  \\