Подсчет событий в Vim без изменения буфера

Чтобы узнать, сколько раз шаблон существует в текущем буфере, я делаю:

:%s/pattern-here/pattern-here/g

Он дает количество вхождений шаблона, но, очевидно, громоздко и также имеет побочный эффект установки "измененного" состояния.

Есть ли более элегантный способ подсчета?

Ответ 1

Чтобы избежать подстановки, оставьте второй шаблон пустым и добавьте флаг "n":

:%s/pattern-here//gn

Это описано как официальный совет.

Ответ 2

:help count-items

В VIM 6.3, как вы это делаете.

:set report=0
:%s/your_word/&/g    # returns the count without substitution

В VIM 7.2, как вы это сделаете:

:%s/your_word/&/gn   # returns the count, n flag avoids substitution

Ответ 3

:!cat %| grep -c "pattern"

Это не совсем команда vim, но она даст вам то, что вам нужно от vim.
Вы можете сопоставить его с командой, если вам нужно часто ее использовать.

Ответ 4

vimscript IndexedSearch улучшает команды поиска Vim для отображения "В матче #N из совпадений M".

Ответ 5

Поместите курсор на слово, которое вы хотите подсчитать, и выполните следующее.

:%s/<c-r><c-w>//gn

См. :h c_ctrl-r_ctrl-w

Ответ 6

vimgrep - ваш друг здесь:

vimgrep pattern %

Показывает:

(1 of 37)