web-dev-qa-db-fra.com

Recherche de chaîne et compte dans l'éditeur vi

Je veux rechercher une chaîne et trouver le nombre d'occurrences dans un fichier à l'aide de l'éditeur vi.

93
kadeshpa
:g/xxxx/d

Cela supprimera toutes les lignes avec un motif et indiquera le nombre de lignes supprimées. Annuler pour les récupérer après.

6
Kevin Beck

LA façon est

:% s/pattern // gn

164
Gustavo

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

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

et un mot particulier:

:%s/the/&/gn        

Voir count-items section documentation.

Si vous tapez simplement:

%s/pattern/pattern/g

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

121
dirkgently

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

38

(semblable comme l'a dit Gustavo, mais en plus:) 

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

:%s///gn

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

"%" - fait s/ dans tout le fichier
"g" - recherche globale (avec plusieurs occurrences dans 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, cela fonctionne parfaitement avec "Recherche de texte sélectionné visuellement", comme décrit dans vim-wikia tip171 )

21
tron5

utilisation

:% s/motif/\ 0/g

lorsque la chaîne de motif est trop longue et que vous n'aimez pas tout taper à nouveau.

3
Sungwon Jeong

Je suggère de faire:

  1. Recherchez avec * pour effectuer une "recherche délimitée" du contenu sous le curseur ou effectuez une recherche standard /pattern.
  2. Utilisez :%s///gn pour obtenir le nombre d'occurrences. Ou vous pouvez utiliser :%s///n pour obtenir le nombre de lignes avec des occurrences.

** Je pourrais vraiment trouver un plug-in qui donnerait un message de "correspondance N sur N1 sur N2 lignes "à chaque recherche, mais hélas.

Remarque: Ne soyez pas dérouté par la formulation difficile de la sortie. La première commande peut vous donner quelque chose comme 4 matches on 3 lines alors que la dernière peut vous donner 3 matches on 3 lines. Bien que techniquement soit exact, ce dernier est trompeur et devrait indiquer «correspondance de 3 lignes». Ainsi, comme vous pouvez le constater, il n’est jamais vraiment nécessaire d’utiliser ce dernier formulaire ('n' seulement). Vous obtenez les mêmes informations, plus clairement, et plus, en utilisant le formulaire 'gn'.

0
Bruno Bronosky