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

StackOverflow https://stackoverflow.com/questions/70529

  •  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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top