125 votes

Rechercher une chaîne de caractères et obtenir le nombre dans l'éditeur vi

Je veux rechercher une chaîne de caractères et trouver le nombre d'occurrences dans un fichier en utilisant l'éditeur vi.

13 votes

La réponse sélectionnée ( :g/xxxx/d )est terrible, dangereux, et inférieur aux autres sur cette page. Veuillez le désélectionner.

1 votes

Je suis d'accord et cela vous indique seulement "lignes supprimées" et non "occurrences supprimées".

225voto

Gustavo Points 501
LE moyen est

%s/pattern//gn

2 votes

Il s'agit de la réponse la plus authentique, sans recours à l'astuce de la surenchère.

2 votes

La meilleure réponse !

126voto

dirkgently Points 56879

Vous avez besoin de la n drapeau. Pour compter les mots, utilisez :

:%s/\i\+/&/gn   

et un mot particulier :

:%s/the/&/gn        

Ver count-items section documentation.

Si vous tapez simplement :

%s/pattern/pattern/g

alors la ligne d'état vous donnera le nombre de correspondances en vi également.

0 votes

Il semble que cette réponse soit destinée aux utilisateurs de Vim et non de Vi :(

0 votes

Avez-vous seulement vi sur votre système ? Quelle version ?

0 votes

Quelqu'un a marqué ta question avec vim dedans... Je l'ai enlevé.

43voto

Mohit Chakraborty Points 810

:%s/string/string/g donnera la réponse.

0 votes

Quelle meilleure réponse. +5 si possible

0 votes

Je suppose que cela ne fonctionne que si aucun '.*' n'est utilisé dans le modèle.

11 votes

Pas besoin de répéter la chaîne, il suffit de faire %s/string//ng .

27voto

tron5 Points 61

(similaire à ce que Gustavo a dit, mais en plus : )

Pour tout précédemment recherche, vous pouvez le faire simplement :

:%s///gn

Un motif n'est pas nécessaire, car il se trouve déjà dans le registre de recherche ( @/ ).

"%" - do s/ dans tout le fichier
"g" - recherche globale (avec plusieurs occurrences sur une ligne)
"n" - empêche tout remplacement de s/ -- rien n'est supprimé ! rien ne doit être défait !
(voir : :help s_flag pour plus d'informations)

(De cette façon, il fonctionne parfaitement avec " Recherche d'un texte sélectionné visuellement ", tel que décrit dans vim-wikia tip171 )

2voto

Kevin Beck Points 1663
:g/xxxx/d

Cela supprimera toutes les lignes avec le motif, et rapportera le nombre de lignes supprimées. Annulez pour les récupérer après.

6 votes

Bien sûr, il peut simplement omettre le "d" pour ne pas avoir à effectuer l'opération.

15 votes

Notez que cela ne vous indique que le nombre de lignes, et non le nombre d'occurrences. Je pense que la solution de Dirk est meilleure.

4 votes

Ma solution ci-dessous compte correctement les occurrences multiples dans une ligne et il n'y a rien à défaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X