Vim中的数字操作

Sar*_*rah 23 vim

如果我有一个包含数字列的数据文件

3.14
0.42
6.66
Run Code Online (Sandbox Code Playgroud)

从Vim中有没有办法可以通过加法,减法和除法等操作来操作它们?例如,假设我想在列中为每个数字添加2.1,我该怎么做呢?一个

我可以通过管道连接到例如awk,但我想知道是否有内置方法,我没有在帮助文件中找到任何东西.

Rod*_*Rod 31

CTRL-R与表达式寄存器一起使用=.

以下命令将2.1添加到一行中的数字:

C
<CTRL-R> =
<CTRL-R> "
+2.1
<ENTER>
Run Code Online (Sandbox Code Playgroud)

与宏结合可以产生一些有趣的结果,例如这个例子.

  • @Kevin 这实际上是错误的,按 `q&lt;same letter&gt;` 实际上将开始在该键上记录的宏上录制一个新宏。要回放,请按`@&lt;相同字母&gt;`。您还可以通过按 `@@` 来重复上次播放的宏。 (3认同)

raj*_*uru 6

表达式寄存器对vim很有用.

这是一个更老式的vi方式:让我们说你有一个文件,每行包含一堆数字,你想为每一行添加2.1.

:%s/$/+2.1/<ENTER> - this would append +2.1 to each line.
:1<ENTER>  - Goto the beginning of the file 
!Gbc<ENTER> - invoke the bc command on each line to do the addition.
Run Code Online (Sandbox Code Playgroud)


ib.*_*ib. 5

一个有用的功能,在本例中恰好很方便,\n 是用表达式替换(请参阅:help sub-replace-\\=)。\n它允许在 \na\xc2\xa0substitute 命令的每个模式匹配上计算表达式,并用结果替换匹配的文本\n该表达式。

\n

例如,要将 2.1 添加到制表符分隔文件的第三列中的所有值,可以使用以下命令。

\n
:%s/^\\%([^\\t]*\\t\\)\\{2}\\zs[^\\t]*/\\=str2float(submatch(0))+2.1/\n
Run Code Online (Sandbox Code Playgroud)\n