In einer langen Datei möchte ich nach einem Muster suchen, das ungefähr 200 Zeilen entspricht. Die übereinstimmenden Zeilen befinden sich an zufälligen Stellen in der Datei.
Wenn eine Zeile übereinstimmt, ist nur die Zeile selbst relevant, kein Kontext darüber oder darunter.
Normalerweise würde ich mit suchen /
und durch die Übereinstimmungen mit springen n
.
Dies bedeutet jedoch, dass nur ein oder zwei relevante Zeilen gleichzeitig auf dem Bildschirm angezeigt werden.
Gibt es eine Möglichkeit, alle nicht übereinstimmenden Zeilen auszublenden, während Sie die Liste der Ergebniszeilen durchgehen?
Ein Brute-Force-Ansatz wäre, alle nicht übereinstimmenden Zeilen zu löschen und diese Löschung später rückgängig zu machen. Aber das ist in vielerlei Hinsicht hässlich, auch wenn es nicht zum dauerhaften Rückgängigmachen führen würde ...
:vimgrep
kann abgekürzt werden mit:vim
:ccl[ose]
oder aber Sie schließen normalerweise einen Puffer (z. B. wechseln Sie zu ihm und:bd
). Sie können den Quickfix-Puffer:cw[indow]
erneut öffnen, indem Sie ihn erneut ausführen. Dabei werden die letzten vimgrep-Ergebnisse verwendet.Sie können alle übereinstimmenden Zeilen mit auflisten
(Der
:print
Befehl kann weggelassen werden. Dies ist die Standardeinstellung für:g
.)quelle
g/REgexp/p
) ... Das Problem ist, dass Sie nicht einfach zu einem der Spiele springen können ...g
. Ich gehe davon aus, dass es sich um ein globales Muster handelt. Normalerweise mache ich VI-Suche mit einem Schrägstrich/pattern
und dies würde alle Vorkommen finden. Man kann durch Drücken des Buchstabens zu ihnen navigierenn
:g[lobal]
, der ein Muster als Argument verwendet. Alle Details finden Sie unter:help :global
.Mit den Optionen
foldmethod
undfoldexpr
können irrelevante Linien weggefaltet werden.Nach dem Suchen wird die letzte Suche im
@/
Register gespeichert . So können Sie leicht alles wegklappen, was nicht so passt (nur für Einzeilen-Matches):Weiterführende Methoden, wie das Hinzufügen mehrerer Falzstufen für Kontextlinien, die Sie ein- oder ausblenden können, oder das Übereinstimmen mehrerer Linien, finden Sie im Vim Tips Wiki .
quelle
set foldlevel=0
nötig? Aber vielleicht ist das Standard.:tab sp
, erhalte ich zuerst eine neue Wegwerfansicht für die Datei. Dann ist das Zurückgehen so einfach wie:close
jede andere Möglichkeit, den Tab zu töten.Wenn die Reihenfolge keine Rolle spielt, verschieben Sie einfach die Zeilen.
Weitere Hilfe finden Sie unter:
quelle
:g/pat/m$
(verschieben Sie die übereinstimmenden Zeilen bis zum Ende) ist auch OK,[d] lösche alle nicht (!) passenden Zeilen:
oder noch einfacher (danke für die Kommentare von 'B Layer'):
quelle
:v
als:g!
. (Ich erinnere mich nicht, wann ich das letzte Mal gesehen habe, TBH!)Wenn Sie alle übereinstimmenden Zeilen auflisten möchten (wie in meiner anderen Antwort) und dann zu einer bestimmten Übereinstimmung springen möchten, bietet mein FindOccurrence-Plugin eine
[/
Zuordnung für diese (und[n
für das letzte Suchmuster, anstatt nach einer abzufragen ).[/pattern
Listen wie:g/pattern
, fragt dann aber nach der Nummer des Treffers, zu dem gesprungen werden soll.quelle
Eine andere Möglichkeit ist, es zu benutzen
:h :ilist
, um einen Überblick über die Manpage zu bekommen. Das Ergebnis sieht so aus:Hier ist eine kleine Funktion, mit der Sie nach Index in die Ergebniszeile wechseln können:
Es kann so verwendet werden:
quelle