关于搜索:显示Vim的比赛计数

Show Count of Matches in Vim

当你进行搜索时,谷歌Chrome有一个很好的功能。它告诉你搜索关键字的匹配数。然而,在Vim中,我没有看到这样的特性。有些人建议使用%s/pattern//gn或类似的:

http://vim.wiki a.com/wiki/count_number_of_匹配_a_模式无法计算VIM中的匹配数

但那真的很长!!当按"*"、"%",或使用"/"和"?"进行任何搜索时,我正在查找计数。.

有什么想法吗?


插件索引搜索。

这里是最新版本。


我不知道一种直接的方法,但是您可以使用:%s///使用最后一次搜索作为默认模式的方法:

1
:nmap ,c :%s///gn

然后,您应该能够进行搜索,然后点击,c报告匹配的数量。

唯一的问题是*#忽略'smartcase',所以使用*后,结果可能会被一些人忽略。您可以通过执行*,然后执行/upbkbdenterobakbd,然后执行,c来绕过这个问题。


@al的答案中还有一个:如果您想让vim在状态行中自动显示它,请尝试将以下内容添加到vimrc中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
let s:prevcountcache=[[], 0]
function! ShowCount()
    let key=[@/, b:changedtick]
    if s:prevcountcache[0]==#key
        return s:prevcountcache[1]
    endif
    let s:prevcountcache[0]=key
    let s:prevcountcache[1]=0
    let pos=getpos('.')
    try
        redir => subscount
        silent %s///gne
        redir END
        let result=matchstr(subscount, '\d\+')
        let s:prevcountcache[1]=result
        return result
    finally
        call setpos('.', pos)
    endtry
endfunction
set ruler
let &statusline='%{ShowCount()} %<%f %h%m%r%=%-14.(%l,%c%V%) %P'


这是一个廉价的解决方案…我用查找和替换VIM中的所有内容。没有花哨的脚本。我找到了x,并用x替换了所有。最后,vim报告"9892行上的2134个替换"。X出现2134次。用途:Q!退出文件而不保存。没有任何伤害。


你已经有很多答案了,但在我看来还是有一个对这个问题采取更多的办法。

这实际上是我几天前必须处理的事情。我添加了一个函数和一个映射以这样的方式,当光标位于要计数的单词下时,您可以点击映射。它返回匹配的数目。

功能:

1
2
3
4
5
" Count number of occurances of a word
function Count(word)
    let count_word ="%s/" . a:word ."//gn"
    execute count_word
endfunction

地图:

1
2
" Count current word
nmap <Leader>w <Esc>:call Count(expand("<cword>"))<CR>

或者,根据@al的建议,您可以映射键组合以写入大部分行,然后将光标移动到插入实际图案的位置:

:nmap ,c ^[:%s///gn^[OD^[OD^[OD^[OD

其中"^["是ctrl+v,esc,"^[od"是ctrl+v,left

然后按"c"将进入命令模式,输入模式并将光标停留在第二个"/"上,准备插入模式。


这个插件就是这么做的。https://github.com/osyo-manga/vim-anzu

在VIM中搜索单词时,它将在状态线上显示单词计数。它还可以选择显示在搜索词的旁边,即,这个_是_my_sample_word(3/12),或者这个_是_my_sample_word(7/12)。这基本上是说:这是12个事件中的第3个或第7个。


1
:vim[grep][!] /{pattern}/[g][j] {file} ...

Vimgrep使用Vim的内置regex搜索引擎,因此您可以重用Vim标准搜索命令中的模式。因此,我首先使用:/模式以正常方式测试搜索模式。/

然后输入以下内容:

1
:vim /CTRL+r//g %

其中,CTRL+r/将在第一个斜线后插入最后一个搜索模式。状态行将显示(最大值的1),其中max是{pattern}的最大匹配数。然后使用:cnext:cprev搜索下一个和上一个匹配,使用:cfirst:clast搜索第一个和最后一个匹配。这4个命令可以重新映射,以加快执行速度。