2008-09-16 5 views
104

Um zu wissen, wie oft ein Muster in aktuellen Puffer vorhanden ist, ich tun:Zählen Vorkommen in Vim ohne die Puffermarkierung geändert

:%s/pattern-here/pattern-here/g 

es die Anzahl der Vorkommen des Musters gibt, aber es ist offensichtlich umständlich und hat auch den Nebeneffekt, den "geänderten" Status zu setzen.

Gibt es eine elegantere Art zu zählen?

:%s/pattern-here//gn 

Dies wird beschrieben als an official tip:

Antwort

156

der Substitution, verlassen das zweite Muster leer, und fügen Sie das „n“ flag zu vermeiden.

+8

noch schwerfällige, aber zumindest ist es nun offiziell, dass es keine elegante Art und Weise ist ... –

+50

Wenn Sie bereits eine Suche mit/durchgeführt wird, wird es nur:% s /// gn –

+0

Also fügen Sie es einfach zu Ihrer .vimrc – JESii

5
:!cat %| grep -c "pattern" 

Es ist nicht genau vim Befehl, aber es wird Ihnen geben, was Sie von vim brauchen.
Sie können es dem Befehl zuordnen, wenn Sie es häufig verwenden müssen.

+6

Einfacher':! Grep -c "Muster"% ' – Iazel

2

Das vimscript IndexedSearch erweitert die Vim-Suchbefehle, um "Bei Übereinstimmung #N aus M Übereinstimmungen" anzuzeigen.

-1

vimgrep ist dein Freund hier:

vimgrep pattern % 

Shows:

(1 of 37) 
+7

Dies zählt keine Vorkommen , zählt jedoch Linien, die das Muster enthalten. Wenn das Muster zweimal in einer Linie auftaucht, wird es nur einmal gezählt. – sotto

6
:help count-items 

In VIM 6.3, hier ist, wie Sie es tun.

:set report=0 
:%s/your_word/&/g # returns the count without substitution 

In VIM 7.2, hier ist, wie Sie es tun würde:

:%s/your_word/&/gn # returns the count, n flag avoids substitution 
+0

Ich hatte eine große Datei und diese Vorgehensweise war viel schneller als Grep. –

1

Setzen Sie den Cursor auf das Wort, das Sie wollen die folgenden zählen und auszuführen.

:%s/<c-r><c-w>//gn 

Siehe :h c_ctrl-r_ctrl-w

Verwandte Themen