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.