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?

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 .


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

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.


7
Plus simplement:!grep -c "pattern" %
Iazel


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


-1

vimgrep est votre ami ici:

vimgrep pattern %

Spectacles:

(1 of 37)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.