我想找出“x”在我的文件中出现的次数,因此我提交%s/x//gn
并得到了正确的答案。
如何在命令行上使用 vimscript 将结果计数捕获到变量中?
下面的答案暗示了以下解决方案:
:let cnt=0
:g/x/let cnt=cnt+1
:echo cnt
但是,cnt
用于存储缓冲区中包含 的总行数,而不是整个文件中有x
多少个。x
因此,原来的问题仍然存在。
答案1
Vim FAQ 回答了这个问题“我如何计算特定单词在缓冲区中出现的次数?”
答案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
用空字符替换所有非字符,计算剩余字符的数量(应为x
s),并将文件中每一行的结果相加。
map
我从以下函数中获得了这种技术的想法丹尼斯·威廉森,在另一篇有关 Vim 脚本的文章中。