Підрахунок подій у 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

У мене був великий файл, і такий підхід був набагато швидшим за греп.
Джай Пракаш

5
:!cat %| grep -c "pattern"

Це не зовсім команда vim, але вона дасть вам те, що вам потрібно від vim.
Ви можете відобразити його в команді, якщо вам потрібно часто використовувати.


7
Простіше:!grep -c "pattern" %
Iazel


1

Поставте курсор на слово, яке ви хочете порахувати, і виконайте наступне.

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

Побачити :h c_ctrl-r_ctrl-w


-1

vimgrep - твій друг тут:

vimgrep pattern %

Показує:

(1 of 37)

7
Це не враховує випадків, але підраховує рядки, що містять візерунок. Тож якби малювати окцерів двічі в рядку, він би рахувався лише один раз.
сотто
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.