Відповіді:
Відповідь Квінсі чудова, але є точний спосіб зробити це, що не потребує редагування буфера:
:%s/pattern//ng
Це надрукує таке повідомлення, як 3 matches on 2 lines, і в буфер не буде внесено жодних змін.
nПрапор робить :substituteкоманду друк кількості збігів замість виконання фактичної заміни; gпрапор дозволяє повідомляти про декілька матчів в кожному рядку.
Ще одна річ, яка може бути корисною для вашого випадку використання - це надрукувати всі рядки, які відповідають шаблону:
:global/pattern/print
який можна скоротити до:
:g/pattern
Це одне з найпростіших застосувань :globalкоманди (яка вражає розум). Він просто роздрукує всі рядки, що відповідають pattern, а потім (якщо є більше одного рядка) ви натискаєте Enterабо набираєте іншу команду, щоб зникнути.
Трохи дрібниць: Ця команда є походженням імені grep, як це зазвичай називають g/re/p, де reозначає "регулярний вираз".
g/re/pнасправді від ed, ні vi. Grep передує vi пару років.
nnoremap <leader>n :%s///gn<CR>картографування. Тому я натискаю, <leader>nщоб порахувати випадки раніше шуканого шаблону. Цим я користуюся напрочуд часто.
:%s/pattern//nnПрапор в кінці говорить :sкоманду , щоб повідомити кількість матчів і на самому ділі не замінити. Детальніше :h :s_flagsчитайте.
gn?
gякщо відчуваєте, що може бути більше одного відповідника на рядок, що часто відповідає дійсності. Для цього питання, однак, прапор nважливіший.
Спочатку скористайтеся /пошуком регулярного виразу
:%s///gn
Це те саме, що відповідь Дюрви, за винятком того, що він є а.) Простіший у використанні (оскільки ви можете попередньо переглянути результати того, що ваш регекс відповідає першим) та b.) В усьому світі відповідає gпрапорці, щоб підрахувати всі події.
Завдяки цьому PR https://github.com/vim/vim/pull/4317 кожна команда пошуку показує статистику пошуку (як поточна позиція матчу та кількість збігів) у vim 8.1.1270. Обов’язково видаліть Sзі змінної shortmess.
:%s/pattern//g
У рядку стану ви побачите кількість підстановок. Саме стільки разів patternз’являється. Потім просто натисніть, uщоб скасувати заміну.
Картограф, який я додав до свого .vimrc на основі відповідей тут:
" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>
" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>
Трохи пояснень, сподіваємось, корисні для нових виммерів:
<c-r><c-w> вставляє слово під курсором у командному рядку, зручно у багатьох випадках.
<c-u>Необхідно видалити автоматично вставляється '<,'>
при натисканні :в візуальному режимі і збирається в командному рядку.
*Регістр містить (останній) візуальний вибір, <c-r>*
вставляє вміст *регістра в командному рядку (також може бути використаний в режимі вставки).
:h count-items