Подтвердить что ты не робот

Показать кол-во матчей в Vim

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

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

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

Любая идея?

4b9b3361

Ответ 2

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

:nmap ,c :%s///gn

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

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

Ответ 3

Одно дополнение к ответу @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'

Ответ 4

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

Ответ 5

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

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

Функция:

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

Ответ 6

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

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

Где '^ [' Ctrl + V, Esc и '^ [OD' есть Ctrl + V, Left

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

Ответ 7

:vim[grep][!] /{pattern}/[g][j] {file} ...

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

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

:vim /CTRL+r//g %

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

Ответ 8

Этот плагин делает именно это. 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 случаев.