Відповіді:
Відповідь Квінсі чудова, але є точний спосіб зробити це, що не потребує редагування буфера:
:%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//n
n
Прапор в кінці говорить :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