如何在 Vim 正常模式下捕获正则表达式命令的结果?

如何在 Vim 正常模式下捕获正则表达式命令的结果?

我想找出“x”在我的文件中出现的次数,因此我提交%s/x//gn并得到了正确的答案。

如何在命令行上使用 vimscript 将结果计数捕获到变量中?

下面的答案暗示了以下解决方案:

:let cnt=0
:g/x/let cnt=cnt+1
:echo cnt

但是,cnt用于存储缓冲区中包含 的总行数,而不是整个文件中有x多少个。x

因此,原来的问题仍然存在。

答案1

答案2

你可以尝试一下

:let cnt=0
:g/^.*may/let cnt=cnt+1
:echo cnt

这样你就会看到有多少行至少出现一次“may”这个词。因此,以下文本将计为 1:

Your mileage may vary. You may have already won.

简单的。

答案3

下面的方法可以达到这个效果:

:echo eval(join(map(range(1, line('$')), 'len(substitute(getline(v:val),"[^x]","","g"))')," + "))

这将x用空字符替换所有非字符,计算剩余字符的数量(应为xs),并将文件中每一行的结果相加。

map我从以下函数中获得了这种技术的想法丹尼斯·威廉森,在另一篇有关 Vim 脚本的文章中。

相关内容