Afficher le nombre de matchs dans Vim

Il existe une fonctionnalité intéressante dans Google Chrome lorsque vous effectuez une recherche. Il vous indique le nombre de correspondances pour le mot-clé que vous recherchez. Cependant, dans Vim, je ne vois pas une telle fonctionnalité. Certaines personnes ont suggéré d’utiliser %s/pattern//gn ou similar:

http://vim.wikia.com/wiki/Count_number_of_matches_of_a_pattern
Impossible de compter le nombre de correspondances dans Vim

Mais c’est assez long vraiment !! Je cherche le compte quand j’appuie sur la touche ‘*’, ‘%’ ou effectue une recherche avec ‘/’ et ‘?’.

Une idée?

Recherche d’index de plugin.

Nouvelle version ici .

Je ne connais pas de méthode directe, mais vous pouvez utiliser la méthode suivante :%s/// utilise la dernière recherche comme modèle par défaut:

 :nmap ,c :%s///gn 

Vous devriez alors pouvoir effectuer une recherche puis appuyer sur ,c pour indiquer le nombre de correspondances.

Le seul problème sera que * et # ignorent 'smartcase' , donc les résultats pourraient être désactivés après utilisation * . Vous pouvez contourner cela en faisant * suivi de / Up ENTER puis ,c .

Un ajout à la réponse de @Al: si vous voulez que vim le montre automatiquement dans la ligne d’état, essayez d’append ce qui suit au vimrc:

 let s:prevcountcache=[[], 0] function! ShowCount() let key=[@/, b:changedtick] if s:prevcountcache[0]==#key return s:prevcountcache[1] endif let s:prevcountcache[0]=key let s:prevcountcache[1]=0 let pos=getpos('.') try redir => subscount silent %s///gne redir END let result=matchstr(subscount, '\d\+') let s:prevcountcache[1]=result return result finally call setpos('.', pos) endtry endfunction set ruler let &statusline='%{ShowCount()} %<%f %h%m%r%=%-14.(%l,%c%V%) %P' 

Voici une solution bon marché … J’ai utilisé Find and Replace All dans Vim. Pas de script sophistiqué. J’ai fait un Find X et un Replace All avec X. À la fin, Vim rapporte “2134 substitutions sur 9892 lignes”. X est apparu 2134 fois. Utilisez: q! quitter le fichier sans l’enregistrer. Pas de mal.

Vous avez déjà une foule de réponses, mais il me semble qu’il existe encore une autre approche à ce problème.

C’est en fait quelque chose que j’ai dû gérer il y a quelques jours. J’ai ajouté une fonction et un mappage de telle manière que vous frappiez le mappage lorsque le curseur est sous le mot que vous voulez compter et qu’il renvoie le nombre de correspondances.

La fonction:

 " Count number of occurances of a word function Count(word) let count_word = "%s/" . a:word . "//gn" execute count_word endfunction 

Et la cartographie:

 " Count current word nmap w :call Count(expand("")) 

Alternativement, à partir de ce que @Al suggère, vous pouvez mapper la combinaison de touches pour écrire la majeure partie de la ligne, puis déplacer le curseur à la position où le motif réel est inséré:

: nmap, c ^ [:% s /// gn ^ [OD ^ [OD ^ [OD ^ [OD

Où ‘^ [‘ est Ctrl + V, Esc et ‘^ [OD’ est Ctrl + V, Gauche

Appuyez ensuite sur ‘, c’ pour passer en mode commande, entrez le motif et laissez le curseur sur le second ‘/’, prêt à insérer le motif.

 :vim[grep][!] /{pattern}/[g][j] {file} ... 

Vimgrep utilise le moteur de recherche regex intégré de Vim, vous pouvez donc réutiliser les modèles de la commande de recherche standard de Vim. Donc, je teste d’abord le motif de recherche de la manière habituelle en utilisant: / {pattern} /

Puis entrez les informations suivantes:

 :vim /CTRL+r//g % 

CTRL+r/ insérera le dernier motif de recherche après la première barre oblique. La ligne d’état affichera (1 sur max), où max est le nombre maximal de correspondances pour le {pattern} . Ensuite, utilisez les commandes :cnext et :cprev pour rechercher les correspondances suivantes et précédentes et :cfirst et :clast pour les premières et dernières correspondances. Ces 4 commandes peuvent être remappées pour les rendre plus rapides à exécuter.

Ce plugin ne fait que cela. https://github.com/osyo-manga/vim-anzu

Lors de la recherche d’un mot dans vim, il affichera le nombre de mots sur la ligne d’état. Il a également la possibilité d’afficher à côté du mot recherché, c.-à-d. this_is_my_sample_word (3/12) ou this_is_my_sample_word (7/12) . Cela dit essentiellement: il s’agit de la 3ème ou de la 7ème occurrence sur 12 occurrences totales.