是否可以计算单词或样式在文件中出现多少次?有时这对于查找一个函数被调用了多少次很有用,等等。

评论

:h count-items

#1 楼

Quincy的回答很好,但是有一种确切的方法不需要编辑缓冲区:



3 matches on 2 lines标志使n命令打印匹配数,而不执行实际替换;使用:substitute标志可以报告每行多个匹配。 >
:%s/pattern//ng


,可以缩写为:

:global/pattern/print


这是g命令最简单的用法之一(令人难以置信)强大)。它会简单地打印出所有与:global匹配的行,然后(如果有多行)您按pattern或键入另一条命令使其消失。此命令是名称Enter的起源,通常将其描述为grep,其中g/re/p代表“正则表达式”。

评论


+1这是一个相当不错的答案,可以在现场进行,并且可以同时进行详细介绍。希望大多数问题都能得到这样的答案! :)

–吗?
15年2月3日在18:51

我可能一年要这样做2-3次,而且永远都记不住语法了,所以每次都要写在搜索器上。只是想对这个明确的答案表示感谢,因为它已经在我这里呆了不止一次,并且已经保存了几年,这使我陷入了糟糕的Wikia页面! (维基,而不是页面的内容)

–将
18年8月13日在20:06

次要位:g / re / p命令实际上来自ed,而不是vi。 Grep比vi早了几年。

–将
18年8月13日在20:30

我有一个nnoremap n:%s //// gn 映射。因此,我按 n来计算先前搜索的模式的出现次数。我经常使用它。

–罗夫
19年2月6日在7:51

#2 楼

:%s/pattern//n最后的n标志告诉:s命令报告匹配数,而不实际替换。阅读:h :s_flags了解更多详细信息。

评论


是不是gn?

–吗?
15年2月3日在18:50

@yo'是的,尽管g只是另一个标志,但是如果您感觉每行可能有多个匹配项,那么您也想使用g,这通常是正确的。然而,出于问题的目的,标记n更重要。

–德鲁瓦·萨加尔(Dhruva Sagar)
2015年2月3日在18:53



#3 楼

如今,您可以使用:
set shortmess-=S

,每次进行[x/y]/搜索时,启用在右下角显示的?计数。

Vim的相对部分help
请注意,如果搜索找到99个以上的结果,Vim会不幸地显示[x/>99]:结果:

(默认情况下,该插件仅限于“仅”少于100k行的文件,但是可以使用let g:searchindex_line_limit=1000000进行调整。)

评论


这应该是公认的答案。

–webjackal
20-8-29在14:52

#4 楼

首先使用/搜索正则表达式,然后

:%s///gn


这与Dhurva的答案相同,只不过它是a。)易于使用(因为您可以预览正则表达式匹配的结果的首位结果)和b。)与g标志全局匹配,以计算所有匹配项。

#5 楼

多亏了这个PR https://github.com/vim/vim/pull/4317,每个搜索命令都显示了vim 8.1.1270中的搜索统计信息(例如当前比赛位置和比赛次数)。确保从变量S中删除shortmess

#6 楼

:%s/pattern//g

您将在状态栏中看到替换数。这是pattern出现几次。然后只需按u即可撤消替换。

评论


这是一个可怕的解决方案,但我喜欢它。

– Sahil
20年8月12日在9:17



#7 楼

我根据以下答案在我的.vimrc文件中添加了一个映射:
<c-r><c-w>在命令行中的光标下方插入单词,
在许多情况下都很方便。
在可视模式下按<c-u>并转到命令行时,需要'<,'>来删除自动插入的:

*寄存器包含(最后一个)可视选择,<c-r>*
*寄存器的内容插入命令行(也可以
用于插入模式)。