it-swarm.com.de

Suchen Sie nach Zeichenfolge und erhalten Sie eine Anzahl im vi-Editor

Ich möchte nach einer Zeichenfolge suchen und die Anzahl der Vorkommen in einer Datei mit dem vi-Editor ermitteln.

93
kadeshpa
:g/xxxx/d

Dadurch werden alle Zeilen mit Muster gelöscht und gemeldet, wie viele gelöscht wurden. Machen Sie rückgängig, um sie nachher zurückzuholen.

6
Kevin Beck

DER Weg ist

:% s/pattern // gn

164
Gustavo

Sie benötigen das Flag n. Wörter zählen:

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

und ein bestimmtes Wort:

:%s/the/&/gn        

Siehe count-items Dokumentation.

Wenn Sie einfach Folgendes eingeben:

%s/pattern/pattern/g

dann gibt die Statuszeile auch die Anzahl der Übereinstimmungen in vi an.

121
dirkgently

:% s/string/string/g gibt die Antwort.

38

(ähnlich wie Gustavo sagte, aber zusätzlich:) 

Für jede zuvor Suche können Sie einfach Folgendes tun: 

:%s///gn

Ein Muster ist nicht erforderlich, da es bereits im Suchregister (@/) enthalten ist. 

"%" - do s/ in der gesamten Datei
"g" - global suchen (mit mehreren Treffern in einer Zeile)
"n" - verhindert das Ersetzen von s/ - nichts wird gelöscht! nichts muss rückgängig gemacht werden!
(siehe: :help s_flag für weitere Informationen)

(So ​​funktioniert es perfekt mit "Suche nach visuell ausgewähltem Text", wie in vim-wikia tip171 beschrieben

21
tron5

benutzen

:% s/Muster/\ 0/g

wenn die Musterzeichenfolge zu lang ist und Sie nicht alles neu eingeben möchten.

3
Sungwon Jeong

Ich schlage vor zu tun:

  1. Suchen Sie entweder mit * nach einer "beschränkten Suche" nach dem, was sich unter dem Cursor befindet, oder führen Sie eine Standard-/pattern-Suche durch.
  2. Verwenden Sie :%s///gn, um die Anzahl der Vorkommen abzurufen. Oder Sie können :%s///n verwenden, um die Anzahl der Zeilen mit Vorkommen zu ermitteln.

** Ich könnte wirklich ein Plug-In finden, das "N" von N ausrichten würde1 auf N2 Zeilen "bei jeder Suche, aber leider.

Hinweis: Lassen Sie sich nicht durch den kniffligen Wortlaut der Ausgabe verwechseln. Der erste Befehl könnte Ihnen etwas wie 4 matches on 3 lines geben, wo der letztere Ihnen 3 matches on 3 lines geben könnte. Während {technisch genau ist, ist letzteres irreführend und sollte '3 Zeilen übereinstimmen' sagen. Wie Sie sehen können, ist es also nie nötig, die letztere (nur 'n') Form zu verwenden. Sie erhalten die gleichen Informationen, klarer und mehr, wenn Sie das Formular 'gn' verwenden.

0
Bruno Bronosky