Odpowiedzi:
Odpowiedź Quincy jest w porządku, ale jest na to dokładny sposób, który nie wymaga edycji bufora:
:%s/pattern//ng
Spowoduje to wydrukowanie komunikatu typu 3 matches on 2 linesi żadne zmiany nie zostaną wprowadzone w buforze.
nFlaga powoduje, że :substitutepolecenie wydrukowania liczbę meczów zamiast wykonywania rzeczywistej zmiany; gflaga umożliwia raportowanie wielu meczów na linie.
Inną rzeczą, która może być przydatna w twoim przypadku użycia, jest wydrukowanie wszystkich linii pasujących do wzoru:
:global/pattern/print
które można skrócić do:
:g/pattern
Jest to jedno z najprostszych zastosowań :globalpolecenia (które jest zadziwiająco potężne). Po prostu wydrukuje wszystkie pasujące linie pattern, a następnie (jeśli jest więcej niż jedna linia) naciśniesz Enterlub wpisz inne polecenie, aby zniknęło.
Trochę ciekawostek: to polecenie jest początkiem nazwy grep, jak to bywa powszechnie określane jako g/re/p, gdzie reoznacza „wyrażenie regularne”.
g/re/ppochodzi w rzeczywistości ed, a nie vi. Grep wyprzedza vi o kilka lat.
nnoremap <leader>n :%s///gn<CR>mapowanie. Naciskam więc, <leader>naby policzyć wystąpienia poprzednio wyszukiwanego wzoru. Używam tego zaskakująco często.
:%s/pattern//nnFlag w końcu mówi :skomendę zgłosić liczbę meczów, a nie faktycznie zastąpić. Czytaj :h :s_flagswięcej informacji.
gn?
gjeśli uważasz, że może występować więcej niż jeden mecz na linię, co często jest prawdą. Dla celów pytania flaga njest jednak ważniejsza.
Najpierw użyj, /aby wyszukać wyrażenie regularne, a następnie
:%s///gn
Jest to to samo, co odpowiedź Dhurvy, z tą różnicą, że a.) Jest łatwiejsza w użyciu (ponieważ możesz wyświetlić podgląd wyników tego, co pasuje do wyrażenia regularnego jako pierwsza) i b.) Dopasowuje się globalnie z gflagą, aby zliczyć wszystkie wystąpienia.
Dzięki temu PR https://github.com/vim/vim/pull/4317 każde polecenie wyszukiwania pokazuje statystyki wyszukiwania (takie jak aktualna pozycja dopasowania i liczba dopasowań) w vimie 8.1.1270. Pamiętaj o usunięciu Sze zmiennej shortmess.
:%s/pattern//g
Zobaczysz liczbę zmian na pasku stanu. Tak wiele razy się patternpojawia. Następnie wystarczy nacisnąć, uaby cofnąć zamiany.
Mapowanie, które dodałem do mojego .vimrc na podstawie odpowiedzi tutaj:
" 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>
Trochę wyjaśnienia, miejmy nadzieję, pomocne dla nowszych vimerów:
<c-r><c-w> wstawia słowo pod kursorem w linii poleceń, przydatne przy wielu okazjach.
Jest <c-u>to konieczne, aby usunąć automatycznie wstawiony '<,'>
po naciśnięciu :w trybie wizualnym i przejściu do wiersza poleceń.
*Rejestr zawiera (ostatnie) wybór wizualnego, <c-r>*
wstawia zawartość *rejestru w wierszu poleceń (może być również stosowany w trybie wstawiania).
:h count-items