Подсчет вхождений в Vim без маркировки измененного буфера
-
09-06-2019 - |
Вопрос
Чтобы узнать, сколько раз шаблон существует в текущем буфере, я делаю:
:%s/pattern-here/pattern-here/g
Он дает количество вхождений шаблона, но он явно громоздкий, а также имеет побочный эффект в виде установки статуса «изменено».
Есть ли более элегантный способ подсчета?
Решение
Чтобы избежать подмены, оставьте второй шаблон пустым и добавьте флаг «n»:
:%s/pattern-here//gn
Это описывается как официальный совет.
Другие советы
: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
:!cat %| grep -c "pattern"
Это не совсем команда vim, но она даст вам то, что вам нужно от vim.
Вы можете сопоставить его с командой, если вам нужно часто ее использовать.
Вимскрипт Индексированный поиск улучшены команды поиска Vim для отображения «При совпадении #N из M совпадений».
Поместите курсор на слово, которое вы хотите посчитать, и выполните следующее.
:%s/<c-r><c-w>//gn
Видеть :h c_ctrl-r_ctrl-w
vimgrep здесь ваш друг:
vimgrep pattern %
Показывает:
(1 of 37)