Ответ 1
Плагин индексный поиск.
Новая версия здесь.
В Google Chrome есть приятная функция, когда вы выполняете поиск. Он сообщает вам количество совпадений для ключевого слова, которое вы ищете. Однако в Vim я не вижу такой возможности. Некоторые люди предложили использовать %s/pattern//gn
или подобное:
http://vim.wikia.com/wiki/Count_number_of_matches_of_a_pattern
Невозможно подсчитать количество совпадений в Vim
Но это довольно долго! Я ищу счет, когда нажимаю "*", "%" или выполняю поиск с помощью "/" и "?".
Любая идея?
Плагин индексный поиск.
Новая версия здесь.
Я не знаю, как это сделать, но вы можете использовать способ :%s///
использовать последний поиск в качестве шаблона по умолчанию:
:nmap ,c :%s///gn
Затем вы сможете выполнить поиск, а затем нажмите ,c
, чтобы сообщить количество совпадений.
Единственная проблема заключается в том, что *
и #
игнорировать 'smartcase'
, поэтому после использования *
результаты могут быть отключены несколькими. Вы можете обойти это, выполнив *
, а затем /
Up ENTER, а затем ,c
.
Одно дополнение к ответу @Al: если вы хотите, чтобы vim автоматически показывал его в строке состояния, попробуйте добавить в vimrc следующее:
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'
Здесь дешевое решение... Я использовал Find and Replace All в Vim. Никаких причудливых сценариев. Я сделал Find X и заменил все на X. В конце Vim сообщает "2134 подстановок на 9892 строках". X появился 2134 раза. Использование: q! для выхода из файла без сохранения. Никакого вреда не было.
У вас уже есть большое количество ответов, но мне кажется, что есть еще один больше подхода к этой проблеме.
Это на самом деле то, с чем мне пришлось иметь дело несколько дней назад. Я добавил функцию и отображение таким образом, чтобы вы ударили по карте, когда курсор находится под словом, которое вы хотите подсчитать и он возвращает количество совпадений.
Функция:
" Count number of occurances of a word
function Count(word)
let count_word = "%s/" . a:word . "//gn"
execute count_word
endfunction
И отображение:
" 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" перейдет в командный режим, введите шаблон и оставьте курсор над вторым "/", готов к вставке паттерна.
:vim[grep][!] /{pattern}/[g][j] {file} ...
Vimgrep использует встроенную поисковую систему Vime, поэтому вы можете повторно использовать шаблоны из стандартной команды поиска Vim. Итак, я сначала проверил шаблон поиска обычным способом, используя:/{pattern}/
Затем введите следующее:
:vim /CTRL+r//g %
где CTRL+r/
будет вставлять последний шаблон поиска после первой косой черты. Отобразится строка состояния (1 макс.), Где max - максимальное количество совпадений для {pattern}
. Затем используйте :cnext
и :cprev
для поиска следующего и предыдущего совпадений и :cfirst
и :clast
для первого и последнего совпадений. Эти 4 команды могут быть переназначены, чтобы ускорить выполнение.
Этот плагин делает именно это. https://github.com/osyo-manga/vim-anzu
При поиске слова в vim будет отображаться количество слов в статусной строке. Он также имеет возможность отображать рядом с искомым словом, т.е. this_is_my_sample_word (3/12), или this_is_my_sample_word (7/12). Это в основном говорит: это 3-е или 7-е место из 12 случаев.