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

111

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

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

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

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

Пол Устрица
источник

Ответы:

166

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

:%s/pattern-here//gn

Это называется официальным советом .

Бруно де Фрайн
источник
8
еще более громоздко, но, по крайней мере, теперь официально известно, что нет элегантного способа ...
Пол Устрица
53
Если вы уже выполнили поиск с помощью /, он будет выглядеть так:% s /// gn
Питер Гибсон,
Так что просто добавьте его в свой .vimrc
JESii
3
Я нашел весьма полезным следующее отображение: nnoremap <leader>n :%s///gn <CR>для подсчета вхождений последнего поиска
Икар Погорски
1
Невозможно заставить этот счетчик входить в переменную, верно? Это то, что мне нужно ...
Стивен Лу
8
: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
konyak
источник
У меня был большой файл, и такой подход был намного быстрее, чем grep.
Джай Пракаш,
5
:!cat %| grep -c "pattern"

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

Илья
источник
7
Проще говоря:!grep -c "pattern" %
Iazel 06
2

Vimscript IndexedSearch усиливает команды поиска Vim на дисплей «в матче #N из M матчей».

УДАЛЕНО
источник
1

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

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

Видеть :h c_ctrl-r_ctrl-w

Сагар Джайн
источник
-1

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

vimgrep pattern %

шоу:

(1 of 37)
rdeits
источник
7
При этом не учитываются вхождения, а учитываются строки, содержащие шаблон. Таким образом, если образец встречается дважды в строке, он будет засчитан только один раз.
sotto