首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Vim中对数字进行算术运算?

如何在Vim中对数字进行算术运算?
EN

Stack Overflow用户
提问于 2010-09-28 04:13:10
回答 3查看 10.6K关注 0票数 27

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

代码语言:javascript
复制
3.14
0.42
6.66

在Vim中有没有一种方法可以通过加法、减法和除法等操作来处理这些操作?例如,假设我想在一列中的每个数字上加上2.1,我应该怎么做呢?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-28 04:25:59

在表达式寄存器=中使用CTRL-R

以下命令会在一行上的数字上加上2.1:

代码语言:javascript
复制
C
<CTRL-R> =
<CTRL-R> "
+2.1
<ENTER>

与宏相结合,它可以产生一些有趣的结果,比如这个example

票数 38
EN

Stack Overflow用户

发布于 2010-09-29 02:18:15

表达式寄存器在vim中非常有用。

下面是一种更老式的vi方法:假设您有一个文件,其中包含一堆数字,每行一个数字,您希望每行加上2.1。

代码语言:javascript
复制
:%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.
票数 6
EN

Stack Overflow用户

发布于 2013-08-23 18:12:42

一个有用的特性(在这种情况下恰好很方便)是用表达式进行替换(请参阅:help sub-replace-\=)。它允许在替换命令的每个模式匹配上评估表达式,并用该表达式的结果替换匹配的文本。

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

代码语言:javascript
复制
:%s/^\%([^\t]*\t\)\{2}\zs[^\t]*/\=str2float(submatch(0))+2.1/
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3807464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档