如何在Vim中计算搜索结果?

9bfwbjaz  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(342)

如何使用Vim在文本文件中查找特定单词重复的次数。
例如,我想看看“name”这个词在代码中重复了多少次:

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

结果-3

vjhs03f7

vjhs03f71#

您可以使用替代命令中的n标志来计算匹配的次数。使用以下命令来显示some-word匹配当前缓冲区中文本的次数:

:%s/some-word//gn

您可以在vim tips wiki上阅读所有详细信息

bnl4lu3b

bnl4lu3b2#

现在(从Vim 8.1.1270开始),您可以用途:

set shortmess-=S

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

Vim帮助中的相关部分

请注意,如果搜索结果超过99个,Vim只会显示[x/>99]

出于这个原因,我个人使用google/vim-searchindex插件,它适用于任何数量的结果:

(By默认情况下,插件被限制为“仅”少于一百万行的文件;这可以用let g:searchindex_line_limit=2000000来调整。)

ssgvzors

ssgvzors3#

我有一个计算单词的功能,你可以用很多方法来使用它

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()

因此,您可以Map它:

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>
lkaoscv7

lkaoscv74#

请使用下列指令。
1.每行多个匹配项

:%s/pattern//ng

g代表全局,它将匹配每行的多个匹配项。

  • 输出 * 显示为
13 matches on 10 lines

1.行匹配

:%s/pattern//n
  • 输出 * 显示为
10 matches on 10 lines
klr1opcd

klr1opcd5#

我的SearchPosition plugin将输出以下输出(光标位于第一个匹配项上,并且使用<A-m>Map或:SearchPosition name命令):

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

它建立在这里给出的其他解决方案的基础上,并且明确地为容易地获得这样的统计信息而编写。

相关问题