Antworten:
Die Antwort von Quincy ist in Ordnung, aber es gibt einen genauen Weg, der keine Bearbeitung des Puffers erfordert:
:%s/pattern//ng
Dadurch wird eine Nachricht wie folgt gedruckt 3 matches on 2 lines
, und es werden keine Änderungen an Ihrem Puffer vorgenommen.
Das n
Flag bewirkt, dass der :substitute
Befehl die Anzahl der Übereinstimmungen ausgibt, anstatt eine tatsächliche Ersetzung durchzuführen. Das g
Flag ermöglicht die Meldung mehrerer Übereinstimmungen pro Zeile.
Eine weitere nützliche Funktion für Ihren Anwendungsfall ist das Drucken aller Zeilen, die einem Muster entsprechen:
:global/pattern/print
was sich verkürzen lässt auf:
:g/pattern
Dies ist eine der einfachsten Anwendungen des :global
Befehls (der unglaublich mächtig ist). Es werden einfach alle übereinstimmenden Zeilen gedruckt pattern
, und dann (wenn es mehr als eine Zeile gibt) drücken Sie Enter
oder geben Sie einen anderen Befehl ein, damit er verschwindet.
Ein bisschen Trivia: Dieser Befehl ist der Ursprung des Namens grep
, wie es allgemein beschrieben werden würde g/re/p
, wo re
für „reguläre Ausdrücke“ steht.
g/re/p
kommt eigentlich von ed
, nicht vi
. Grep ist ein paar Jahre älter als vi.
nnoremap <leader>n :%s///gn<CR>
Zuordnung. Also drücke ich, <leader>n
um die Vorkommen des zuvor gesuchten Musters zu zählen. Ich benutze das überraschend oft.
:%s/pattern//n
Das n
Flag am Ende weist den :s
Befehl an, die Anzahl der Übereinstimmungen zu melden und nicht zu ersetzen. Lesen Sie :h :s_flags
für weitere Details.
gn
?
g
wenn Sie der Meinung sind, dass es mehr als eine Übereinstimmung pro Zeile gibt, was häufig zutrifft. Für die Fragestellung ist jedoch die Flagge n
wichtiger.
Verwenden Sie zuerst /
, um nach einem regulären Ausdruck zu suchen
:%s///gn
Dies ist die gleiche Antwort wie bei Dhurva, mit der Ausnahme, dass es a.) Einfacher zu verwenden ist (da Sie eine Vorschau der Ergebnisse dessen anzeigen können, womit Ihre Regex zuerst übereinstimmt) und b.) Global mit dem g
Flag übereinstimmt, um alle Vorkommen zu zählen .
Dank dieser PR https://github.com/vim/vim/pull/4317 zeigt jeder Suchbefehl Suchstatistiken (wie die aktuelle Match-Position und die Anzahl der Matches) in Version 8.1.1270 an. Stellen Sie sicher, dass Sie S
die Variable entfernen shortmess
.
:%s/pattern//g
Sie sehen die Anzahl der Ersetzungen in der Statusleiste. So oft pattern
erscheint das. Drücken Sie dann einfach u
, um die Ersetzungen rückgängig zu machen.
Eine Zuordnung, die ich zu meiner .vimrc-Datei hinzugefügt habe, basierend auf den folgenden Antworten:
" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>
" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>
Ein bisschen Erklärung, hoffentlich hilfreich für neuere Vimmer:
<c-r><c-w>
fügt das Wort unter dem Cursor in die Befehlszeile ein, was in vielen Fällen nützlich ist.
Das <c-u>
wird benötigt, um das automatisch eingefügte zu entfernen, '<,'>
wenn Sie :
im visuellen Modus drücken und zur Befehlszeile gehen. Das
*
Register enthält die (letzte) visuelle Auswahl, <c-r>*
fügt den Inhalt des *
Registers in die Befehlszeile ein (kann auch im Einfügemodus verwendet werden).
:h count-items