在Vim中计数出现,而不标记缓冲区已更改

为了知道当前缓冲区中有多less模式存在,我做:

:%s/pattern-here/pattern-here/g 

它给出了模式的出现次数,但是显然很麻烦,也有设置“改变”状态的副作用。

有一个更优雅的方法来计数?

为了避免replace,将第二个模式留空,并添加“n”标志:

 :%s/pattern-here//gn 

这被描述为官方提示 。

 :help count-items 

在VIM 6.3中,以下是你如何做到的。

 :set report=0 :%s/your_word/&/g # returns the count without substitution 

在VIM 7.2中,您将如何做到这一点:

 :%s/your_word/&/gn # returns the count, n flag avoids substitution 
 :!cat %| grep -c "pattern" 

这不完全是vim的命令,但它会给你你需要从vim。
如果需要频繁使用,可以将其映射到该命令。

vimscript IndexedSearch增强了Vimsearch命令以显示“在匹配#N中M匹配”。

将光标置于要计数的字上并执行以下操作。

 :%s/<cr><cw>//gn 

请参阅:h c_ctrl-r_ctrl-w

vimgrep是你的朋友在这里:

 vimgrep pattern % 

显示:

 (1 of 37)