Risposte:
La risposta di Quincy va bene, ma esiste un modo esatto per farlo che non richiede la modifica del buffer:
:%s/pattern//ng
Questo stamperà un messaggio simile 3 matches on 2 linese non verranno apportate modifiche al buffer.
Il nflag fa sì che il :substitutecomando stampi il numero di corrispondenze anziché eseguire una sostituzione effettiva; il gflag consente di segnalare più corrispondenze per riga.
Un'altra cosa che potrebbe essere utile per il tuo caso d'uso è stampare tutte le linee che corrispondono a un motivo:
:global/pattern/print
che può essere abbreviato in:
:g/pattern
Questo è uno degli usi più semplici del :globalcomando (che è incredibilmente potente). Stamperà semplicemente tutte le righe corrispondenti pattern, quindi (se c'è più di una riga) premi Entero digiti un altro comando per farlo sparire.
Un po 'di curiosità: questo comando è l'origine del nome grep, come sarebbe comunemente descritto come g/re/p, dove resta per "espressione regolare".
g/re/pviene effettivamente da ed, non vi. Grep precede Vi di un paio d'anni.
nnoremap <leader>n :%s///gn<CR>mappatura. Quindi premo <leader>nper contare le occorrenze del modello precedentemente cercato. Lo uso sorprendentemente spesso.
:%s/pattern//nIl nflag alla fine indica :sal comando di segnalare il numero di corrispondenze e di non sostituirlo effettivamente. Leggi :h :s_flagsper maggiori dettagli.
gn?
ganche se ritieni che ci possa essere più di una corrispondenza per riga, il che è spesso vero. Ai fini della domanda, tuttavia, la bandiera nè più importante.
Prima usa /per cercare una regex, quindi
:%s///gn
Questa è la stessa della risposta di Dhurva, tranne per il fatto che a.) È più facile da usare (poiché puoi visualizzare in anteprima i risultati di ciò che corrisponde per primo al regex) e b.) Corrisponde a livello globale con la gbandiera per contare tutte le occorrenze.
Grazie a questo PR https://github.com/vim/vim/pull/4317 , ogni comando di ricerca mostra le statistiche di ricerca (come la posizione attuale della partita e il numero di partite) in vim 8.1.1270. Assicurati di rimuovere Sdalla variabile shortmess.
:%s/pattern//g
Vedrai il numero di sostituzioni nella barra di stato. Questo è quante volte patternappare. Quindi basta premere uper annullare le sostituzioni.
Una mappatura che ho aggiunto al mio .vimrc in base alle risposte qui:
" 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>
Un po 'di spiegazione, si spera utile per i nuovi vimmers:
<c-r><c-w> inserisce la parola sotto il cursore nella riga di comando, utile in molte occasioni.
La <c-u>è necessario per rimuovere il inserito automaticamente '<,'>
quando viene premuto :in modalità visiva e andare alla linea di comando. Il
*registro contiene la (ultima) selezione visiva, <c-r>*
inserisce il contenuto del *registro nella riga di comando (può essere utilizzato anche in modalità inserimento).
:h count-items