Comptage des occurrences dans Vim sans marquer le tampon modifié

111

Afin de savoir combien de fois un modèle existe dans le tampon actuel, je fais:

:%s/pattern-here/pattern-here/g

Il donne le nombre d'occurrences du motif, mais est évidemment encombrant et a également pour effet secondaire de définir le statut «modifié».

Existe-t-il une manière plus élégante de compter?

Paul Oyster
la source

Réponses:

166

Pour éviter la substitution, laissez le deuxième motif vide et ajoutez le drapeau «n»:

:%s/pattern-here//gn

Ceci est décrit comme un conseil officiel .

Bruno De Fraine
la source
8
encore plus encombrant, mais au moins il est maintenant officiel qu'il n'y a pas de moyen élégant ...
Paul Oyster
53
Si vous avez déjà effectué une recherche en utilisant /, cela devient simplement:% s /// gn
Peter Gibson
Alors ajoutez-le simplement à votre .vimrc
JESii
3
J'ai trouvé la cartographie suivante assez utile: nnoremap <leader>n :%s///gn <CR>pour compter les occurrences de la dernière recherche
Ikar Pohorský
1
Il n'y a aucun moyen de faire entrer ce nombre dans une variable, n'est-ce pas? C'est ce dont j'ai besoin ...
Steven Lu
8
:help count-items

Dans VIM 6.3, voici comment procéder.

:set report=0
:%s/your_word/&/g    # returns the count without substitution

Dans VIM 7.2, voici comment procéder:

:%s/your_word/&/gn   # returns the count, n flag avoids substitution
Konyak
la source
J'avais un gros fichier et suivre cette approche était beaucoup plus rapide que grep.
Jai Prakash
5
:!cat %| grep -c "pattern"

Ce n'est pas exactement la commande vim, mais elle vous donnera ce dont vous avez besoin de vim.
Vous pouvez le mapper à la commande si vous devez l'utiliser fréquemment.

Il y a
la source
7
Plus simplement:!grep -c "pattern" %
Iazel
2

Le vimscript IndexedSearch améliore les commandes de recherche Vim pour afficher "At match #N out of M matches".

expurgé
la source
1

Placez le curseur sur le mot que vous souhaitez compter et exécutez ce qui suit.

:%s/<c-r><c-w>//gn

Voir :h c_ctrl-r_ctrl-w

Sagar Jain
la source
-1

vimgrep est votre ami ici:

vimgrep pattern %

Spectacles:

(1 of 37)
rdeits
la source
7
Cela ne compte pas les occurrences, mais compte les lignes contenant le motif. Donc, si le motif apparaît deux fois dans une ligne, il ne sera compté qu'une seule fois.
sotto