繁体   English   中英

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

[英]How do I apply a command to every line in a selection in Vim and replace with the result (like a spreadsheet)?

我有一个值表(实际上是用 LaTeX 标记编写的),我可以 select 一列只使用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 (该行上的数字),并将当前选择替换为 output。

我该怎么做呢?

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

更新:我已经接受了答案。 它不像我希望的那样整洁,但它确实有道理。 谢谢!

另一个更新:要从外部电子表格中粘贴列,请将列粘贴到:new缓冲区中,select 使用Ctrl+Q将数据粘贴到寄存器中。 移动到数据表中的第一行和相应的列,然后使用P粘贴。

你在找这个吗?

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

这似乎有效:

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

即视觉上 select 第一列并发出上面的命令。

% 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  \\

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM