VIM,如何显示光标下当前匹配模式的出现次数?

时间:2014-05-18 06:56:33

标签: vim match

如何显示光标下当前匹配模式的出现次数? 例如:

aa
bb
aab   searching aa, cursor is here, show 2. 
aa
bb

如何在行后插入数字2。 “aab” - > “aab 2”

1 个答案:

答案 0 :(得分:3)

这是一个函数和一个映射来完成这项工作(将这些行添加到.vimrc的末尾;它至少需要在它之前设置vim 7.4和nocompatible):

nnoremap  X  :call Count( '<C-R>=expand( '<cWORD>' )<CR>' )<CR>

function! Count( word )
  redir => cnt
    silent exe '%s/' . a:word . '//n'
  redir END
  silent exe 's/.*/& ' . matchstr( cnt, '\d\+' ) . '/'
endfunction

如果您按WORD上的X以空格字符为界面),Count函数会将文件中相同字词的计数添加到结尾处实际的一行。

要添加序号,请在映射中将Count更改为NthCount,并将这些行添加到.vimrc:

function! NthCount( word )
  redir => nth
    silent exe '0,.s/' . a:word . '//n'
  redir => cnt
    silent exe '%s/' . a:word . '//n'
  redir END
  silent exe 's/.*/& ' . matchstr( nth, '\d\+' ) . '/'
  echo a:word . ': ' . matchstr( nth, '\d\+' ) . '/' . matchstr( cnt, '\d\+' )
endfunction

例如,在第一个bb

上按下它
aa
bb 1
aab
aa
bb
-- STATUSLINE --
bb: 1/2