Réponses:
La réponse de Quincy est correcte, mais il existe un moyen exact de le faire qui ne nécessite pas l'édition du tampon:
:%s/pattern//ng
Cela imprimera un message comme 3 matches on 2 lines
, et aucune modification ne sera apportée à votre tampon.
L' n
indicateur fait en sorte que la :substitute
commande affiche le nombre de correspondances au lieu d'effectuer une substitution réelle; l' g
indicateur permet de signaler plusieurs correspondances par ligne.
Une autre chose qui pourrait être utile à votre cas d'utilisation est d'imprimer toutes les lignes correspondant à un motif:
:global/pattern/print
qui peut être réduit à:
:g/pattern
C'est l'une des utilisations les plus simples de la :global
commande (qui est incroyablement puissante). Il imprimera simplement toutes les lignes qui correspondent pattern
, puis (s'il y a plus d'une ligne) vous appuyez Enter
ou tapez une autre commande pour la faire disparaître.
Un peu de trivia: Cette commande est l'origine du nom grep
, comme il serait communément décrit comme g/re/p
, où re
signifie "expression régulière".
g/re/p
est en réalité de ed
, pas vi
. Grep a précédé vi de quelques années.
nnoremap <leader>n :%s///gn<CR>
cartographie. Je presse donc <leader>n
pour compter les occurrences du motif précédemment recherché. Je l'utilise étonnamment souvent.
:%s/pattern//n
Le n
drapeau à la fin indique à la :s
commande de signaler le nombre de correspondances et non de la remplacer. Lire :h :s_flags
pour plus de détails.
gn
?
g
également l' utiliser si vous pensez qu'il peut y avoir plus d'une correspondance par ligne, ce qui est souvent le cas. Aux fins de la question, toutefois, le drapeau n
est plus important.
Utilisez d'abord /
pour rechercher une expression rationnelle, puis
:%s///gn
C'est la même chose que la réponse de Dhurva, sauf que c'est un.) Est plus facile à utiliser (puisque vous pouvez prévisualiser les résultats de ce que votre regex correspond en premier) et b.) Correspond de manière globale avec le g
drapeau pour compter toutes les occurrences.
Grâce à ce PR https://github.com/vim/vim/pull/4317 , chaque commande de recherche affiche les statistiques de recherche (telles que la position du match en cours et le nombre de correspondances) dans vim 8.1.1270. Assurez-vous de supprimer S
de la variable shortmess
.
:%s/pattern//g
Vous verrez le nombre de substitutions dans la barre d'état. C'est combien de fois le pattern
apparaît. Ensuite, appuyez simplement sur u
pour annuler les substitutions.
Un mappage que j'ai ajouté à mon fichier .vimrc en fonction des réponses fournies ici:
" 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 peu d'explication, espérons-le utile pour les nouveaux vimmers:
<c-r><c-w>
insère le mot sous le curseur dans la ligne de commande, pratique dans de nombreuses occasions.
Le <c-u>
est nécessaire pour supprimer automatiquement l'inséré '<,'>
lorsque vous appuyez sur :
en mode visuel et passez à la ligne de commande. Le
*
registre contient la (dernière) sélection visuelle, <c-r>*
insère le contenu du *
registre dans la ligne de commande (peut également être utilisé en mode insertion).
:h count-items