VIM:如何计算限制从A列到B列的行上的模式,类似于:s /,// gn?

时间:2014-09-18 17:30:12

标签: vim

我有一行看起来如下,我在vim中查看。

 0,0,0,1.791759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5.278115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

它来自特征向量文件,每行是一个实例,每列是该特征号的特征值。我想弄清楚哪个特征号5.27对应。我知道

s/,//gn

将计算行中逗号的数量,但是如何限制命令来计算行中数字为5.27的逗号数?

我看到这两篇看似相关的帖子似乎无法将它们拼凑在一起:How to compute the number of times word appeared in a file or in some rangeSearch and replace in a range of line and column

3 个答案:

答案 0 :(得分:3)

s/,\ze.*5\.27//gn

有趣的部分是\ze,它设定了匹配的结束。有关详细信息,请参阅:h /\ze

答案 1 :(得分:1)

使用可视模式选择所需区域并执行

:s/\v%V%(,)//gn

\v使我们能够通过\

逃避更少的运算符

%V将搜索限制为在视觉选择

内开始的匹配 如果您添加%()

的替换,

|会将搜索保持在一起

它不漂亮但它有效。请参阅/\v\%V\%(

的帮助文件

还有一些名为vis.vim的插件版本,它提供了更简单的命令,旨在实现上述目标。但是我还没有让他们中的任何一个工作,所以我不会再对此发表评论。

答案 2 :(得分:0)

试试这个

s/,.\{-}5.27//gn

它应该有用。