Vim统计搜索结果

时间:2018-03-15 10:54:10

标签: vim

如何使用Vim在文本文件中查找特定单词重复的次数。

例如,我想查看代码中“name”重复多少次:

"collection": "animals",
    "fields": [
      {
        "field": "id",
        "name": ""
      },
      {
        "field": "age",
        "name": ""
      },
      {
        "field": "origin",
        "name": ""
      }

结果 - 3

6 个答案:

答案 0 :(得分:6)

现在您可以使用:

set shortmess-=S

每次进行[x/y]/搜索时,都会在右下角显示?个计数。

native search count

Relavant section from the Vim help

请注意,如果搜索发现99个以上的结果,Vim会不幸地显示[x/>99]

native search count over 99

由于这个原因,我个人使用google/vim-searchindex,该方法可用于任何数量的结果:

vim-search-index search count

(默认情况下,该插件仅限于“仅”少于10万行的文件,不过可以通过let g:searchindex_line_limit=1000000进行调整。)

答案 1 :(得分:5)

您可以使用替换命令中的n标志计算匹配数:

%s/some-word//gn.

您可以阅读vim tips wiki

上的所有详细信息

答案 2 :(得分:1)

我有一个可以通过多种方式使用的计数单词功能

fun! CountWordFunction()
    try
        let l:win_view = winsaveview()
        exec "%s/" . expand("<cword>") . "//gn"
    finally
        call winrestview(l:win_view)
    endtry
endfun
command! -nargs=0 CountWord :call CountWordFunction()

所以,你可以映射它:

nnoremap <F3> :CountWord<CR>

即使鼠标双击......

" When double click a word vim will hightlight all other ocurences
" see CountWordFunction()
" [I shows lines with word under the cursor
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap <Leader>* :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>

答案 3 :(得分:1)

使用以下命令。

  1. 每行有多个匹配项
:%s/pattern//ng

g代表全局,它将与每行多次匹配。

输出显示为

13 matches on 10 lines
  1. 线匹配
:%s/pattern//n

输出显示为

10 matches on 10 lines

答案 4 :(得分:0)

我愿意

:g/pattern/d

这将显示在左下角删除的次数。

然后您可以按u

撤消删除

答案 5 :(得分:0)

我的SearchPosition plugin将打印以下输出(光标位于第一个匹配项上,并显示<A-m>映射或:SearchPosition name命令):

On sole match in this line, 2 in following lines within 5,13 for /\<name\>/

它以此处提供的其他解决方案为基础,并专门为轻松获取此类统计信息而编写。