Zählen von Vorkommen in Vim ohne Markieren des Puffers geändert


111

Um zu wissen, wie oft ein Muster im aktuellen Puffer vorhanden ist, mache ich:

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

Es gibt die Anzahl der Vorkommen des Musters an, ist jedoch offensichtlich umständlich und hat auch den Nebeneffekt, dass der Status "geändert" festgelegt wird.

Gibt es eine elegantere Art zu zählen?

Antworten:


166

Um die Ersetzung zu vermeiden, lassen Sie das zweite Muster leer und fügen Sie das Flag "n" hinzu:

:%s/pattern-here//gn

Dies wird als offizieller Tipp bezeichnet .


8
noch umständlicher, aber zumindest ist es jetzt offiziell, dass es keinen eleganten Weg gibt ...
Paul Oyster

53
Wenn Sie bereits eine Suche mit / durchgeführt haben, wird es nur:% s /// gn
Peter Gibson

Fügen Sie es einfach zu Ihrer .vimrc
JESii

3
Ich fand folgende Zuordnung sehr nützlich: nnoremap <leader>n :%s///gn <CR>um Vorkommen der letzten Suche zu zählen
Ikar Pohorský

1
Es gibt keine Möglichkeit, diese Zählung in eine Variable umzuwandeln, oder? Das ist was ich brauche ...
Steven Lu

8
:help count-items

In VIM 6.3 gehen Sie wie folgt vor.

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

In VIM 7.2 gehen Sie folgendermaßen vor:

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

Ich hatte eine große Datei und dieser Ansatz war viel schneller als grep.
Jai Prakash

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

Es ist nicht gerade ein vim-Befehl, aber es gibt Ihnen das, was Sie von vim benötigen.
Sie können es dem Befehl zuordnen, wenn Sie es häufig verwenden müssen.


7
Einfacher ausgedrückt:!grep -c "pattern" %
Iazel


1

Setzen Sie den Cursor auf das Wort, das Sie zählen möchten, und führen Sie Folgendes aus.

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

Sehen :h c_ctrl-r_ctrl-w


-1

vimgrep ist dein Freund hier:

vimgrep pattern %

Zeigt an:

(1 of 37)

7
Dies zählt nicht Vorkommen, sondern Zeilen, die das Muster enthalten. Wenn das Muster also zweimal in einer Zeile vorkommt, wird es nur einmal gezählt.
Sotto
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.