Показать количество матчей в Vim - PullRequest
48 голосов
/ 12 января 2011

В Google Chrome есть отличная функция, когда вы выполняете поиск. Он сообщает вам количество совпадений для ключевого слова, которое вы ищете. Однако в Vim я не вижу такой возможности. Некоторые люди предложили использовать %s/pattern//gn или подобное:

http://vim.wikia.com/wiki/Count_number_of_matches_of_a_pattern
Невозможно сосчитать количество совпадений в Vim

Но это довольно долго !! Я ищу счет, когда нажимаю «*», «%» или выполняю поиск, используя «/» и «?».

Есть идеи?

Ответы [ 8 ]

27 голосов
/ 12 января 2011

Плагин Индекс поиска .

Новейшая версия здесь .

21 голосов
/ 12 января 2011

Я не знаю прямого способа сделать это, но вы могли бы использовать способ :%s///, использующий последний поиск в качестве шаблона по умолчанию:

:nmap ,c :%s///gn

После этого вы сможетевыполнить поиск, а затем нажать ,c, чтобы сообщить о количестве совпадений.

Единственная проблема будет заключаться в том, что * и # игнорируют 'smartcase', поэтому результаты могут быть отключены на несколькопосле использования *.Вы можете обойти это, выполнив *, затем / Up ENTER и затем ,c.

13 голосов
/ 12 января 2011

Одно дополнение к ответу @ 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'
6 голосов
/ 10 апреля 2014

Вот дешевое решение ... Я использовал Find and Replace All в Vim.Нет фантазии сценариев.Я сделал Find X и заменил все на X. В конце Vim сообщает «2134 замен на 9892 строках».Х появился 2134 раза.Использование: q!выйти из файла, не сохраняя его.Никакого вреда не сделано.

3 голосов
/ 13 января 2011

У вас уже есть множество ответов, но мне кажется, что есть еще один подход к этой проблеме.

На самом деле с этим я столкнулся несколько дней назад.Я добавил функцию и отображение таким образом, что вы нажимаете на отображение, когда курсор находится под словом, которое вы хотите посчитать, и оно возвращает количество совпадений.

И отображение:

" Count current word 
nmap <Leader>w <Esc>:call Count(expand("<cword>"))<CR>
2 голосов
/ 12 января 2011

В качестве альтернативы из того, что предлагает @Al, вы можете сопоставить комбинацию клавиш, чтобы написать большую часть строки, а затем переместить курсор в положение, в которое вставлен фактический шаблон:

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

, где '^ [' - Ctrl + V, Esc и '^ [OD' равно Ctrl + V, Влево

Затем, нажав ', c', вы перейдете в командный режим, войдите в паттерн и выйдете изнаведите курсор на второй символ '/', готовый для вставки шаблона.

1 голос
/ 22 августа 2016

Этот плагин делает именно это.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 полных.

0 голосов
/ 27 апреля 2016
:vim[grep][!] /{pattern}/[g][j] {file} ...

Vimgrep использует встроенную поисковую систему регулярных выражений Vim, поэтому вы можете повторно использовать шаблоны из стандартной команды поиска Vim.Итак, я сначала проверяю шаблон поиска обычным способом, используя: / {pattern} /

Затем введите следующее:

:vim /CTRL+r//g %

, где CTRL+r/ вставит последний шаблон поиска послепервый слэшВ строке состояния отобразится (1 из макс.), Где max - максимальное количество совпадений для {pattern}.Затем используйте :cnext и :cprev для поиска следующих и предыдущих совпадений и :cfirst и :clast для первого и последнего совпадений.Эти 4 команды могут быть переназначены для ускорения их выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...