wake-up-neo.net

Alle (nicht) übereinstimmenden Zeilen in Vim ausblenden

Ist es möglich, alle übereinstimmenden Zeilen in vi oder Vim anzuzeigen/auszublenden? Nicht hervorheben, sondern nur diese Zeilen anzeigen.

Zum Beispiel habe ich einen Text mit Word das Wort ERROR. Wie kann ich nur Zeilen anzeigen lassen, die ERROR enthalten, und wie nur Zeilen ohne ERROR anzeigen?

Gibt es eine Lösung ohne zu löschen alle passenden Zeilen und dann einfach rückgängig zu machen?

73
Alex Bolotov

Kennen Sie den :global-Befehl? Tun das, was Sie wollen?

:g/ERROR

und für das Gegenteil:

:g!/Error

oder gleichwertig:

:v/Error
88
user55400

Ein anderer Ansatz, der von Ihrem Anwendungsfall abhängt, wäre die Verwendung von vimgrep und seiner Ergebnisse in quickfix . Sie können Folgendes tun:

:vimgrep pattern % durchsucht die aktuelle Datei und führt Sie zum ersten Suchergebnis. Noch wichtiger ist, dass die Ergebnisse in die "Quickfix-Liste" aufgenommen werden. 

:copen öffnet die Quickfix-Liste in einem separaten Quickfix-Fenster. Sie haben also ein separates Fenster mit allen Zeilen Ihres letzten vimgrep. Innerhalb des Quickfix-Fensters können Sie dann die Eingabetaste drücken oder auf eine Zeile doppelklicken, um zur entsprechenden Zeile in Ihrer Originaldatei zu springen.

Mit :colder können Sie zu älteren Quickfix-Listen (älteren Vimgrep-Ergebnissen) zurückkehren. Und :cnewer fährt mit neueren Suchergebnissen fort.

Beachten Sie, dass die Quickfix-Liste auch aktualisiert wird, wenn Sie :make ausführen (weshalb Quickfix zur Behebung von Fehlern aufgerufen wird). Aus diesem Grund gibt es auch eine Alternative zur Quickfix-Liste, die als "Standortliste" bezeichnet wird. Stattdessen verwenden Sie :lvimgrep und dann l-Präfix-Befehle anstelle von c-Präfix-Befehlen - :lopen, :lolder, :lnewer.

Natürlich können Sie noch viel mehr tun. Siehe :help quickfix für weitere Informationen.

PS, Sie sagten, Sie wollten keinen Ansatz, der Zeilen löscht und sie dann rückgängig macht. Aber da Sie g/ERROR als die Antwort markiert haben, dachte ich, ich würde darauf hinweisen, dass ein schneller und schmutziger Weg g!/ERROR/d ist. Sie können es dann leicht mit u rückgängig machen. Außerdem können Sie mit :set hlsearch Muster markieren, die mit :g-Befehlen übereinstimmen.

48
studgeek

Sie können verwenden

:g/ERROR/

um alle Zeilen mit ERROR zu drucken

Es gibt auch ein Vim-Plugin, das ich oft gesehen habe, aber nicht verwendet habe: foldsearch: falten Sie Linien weg, die nicht einem bestimmten Muster entsprechen

35
Mykola Golubyev

Der beste Weg, dies zu tun, ist->

:vimgrep /something/g % | copen

Dadurch wird die Liste der Übereinstimmungen für Ihr Keyword geöffnet. Außerdem werden nur die übereinstimmenden Zeilen im Quickfix-Fenster angezeigt.

17
Shivendra

:vimgrep /something/g % | copen funktioniert super. Mit :g/<pattern>/d können auch Zeilen mit dem Muster gelöscht werden

0
sevvalai

Sie meinen wahrscheinlich den Befehl in weniger vi vim &/pattern/ zeigt Zeilen an, die/pattern/enthalten (wie grep).

0
charkh

falls Sie fzf verwenden, können Sie Folgendes verwenden:

  • :Lines in allen geöffneten Dateien
  • :BLines nur im offenen Puffer
  • :Rg [pattern] mit ripgrep
0
minusf