2009-05-14 19 views
66

Ist es möglich, alle übereinstimmenden Zeilen in vi oder Vim anzuzeigen/auszublenden? Nicht markieren, sondern nur diese Zeilen anzeigen.Alle (nicht) übereinstimmenden Zeilen in Vim ausblenden

Zum Beispiel habe ich einen Text mit Wort das Wort . Wie zeige ich nur Zeilen mit und wie nur Zeilen ohne angezeigt werden?

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

+0

http://vi.stackexchange.com/q/2280/12111 – graceman9

Antwort

76

Sie tun wissen über den :global Befehl? Macht das was du willst?

:g/ERROR 

und für das Gegenteil:

:g!/Error 

oder äquivalent:

:v/Error 
+14

Das ist nicht sehr gut. Sobald Sie nach unten scrollen, wird der Befehl beendet und alles wird wieder angezeigt. Es versteckt diese Inhalte nicht wirklich. –

34

können Sie verwenden

:g/ERROR/ 

alle Linien mit ERROR drucken

es auch ein Vim-Plugin, das ich viele Male gesehen, aber nicht genutzt haben: foldsearch : fold away lines that don't match a given pattern

+12

+1 für den Link zum Foldsearch-Plugin. Es ist unaufdringlich und kann nützlich sein. – user55400

+0

+1 für für das flangearch Plugin. Lebensretter! –

42

Ein weiterer Ansatz auf Ihren Anwendungsfall abhängigvimgrep und seine Ergebnisse in quickfix Verwendung würde. Sie können Folgendes tun:

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

:copen öffnet dann die Quickfix-Liste in einem separaten Quickfix-Fenster. Sie haben also ein separates Fenster mit allen Zeilen von Ihrem letzten Vimgrep. Im Quickfix-Fenster können Sie dann Enter drücken oder auf eine Zeile doppelklicken, um zu der entsprechenden Zeile in Ihrer Originaldatei zu springen.

:colder können Sie zurück zu älteren Quickfix-Listen (ältere vimgrep Ergebnisse) gehen. Und :cnewer geht weiter zu neueren Suchergebnissen.

Beachten Sie, dass die Quickfix-Liste auch aktualisiert wird, wenn :make (weshalb Quickfix für das Beheben von Fehlern aufgerufen wird) ausgeführt wird. Aus diesem Grund gibt es auch eine Alternative zu der Quickfix-Liste, die "Standortliste" genannt wird. Um es stattdessen zu verwenden, verwenden Sie :lvimgrep, dann verwenden Sie L-Präfix-Befehle anstelle von C-Präfix-Befehlen - :lopen, :lolder, :lnewer.

Es gibt natürlich viel mehr, was Sie tun können. Weitere Informationen finden Sie unter :help quickfix.

PS, Sie sagten, Sie wollten keinen Ansatz, der Zeilen löscht und dann rückgängig macht. Aber da Sie g/ERROR als die Antwort markiert haben, die ich dachte, würde ich darauf hinweisen, eine schnelle und schmutzige Möglichkeit ist, g!/ERROR/d zu tun. Sie können es dann einfach mit u rückgängig machen. Auch FYI, können Sie :set hlsearch machen, um Muster hervorzuheben, die mit :g Befehlen übereinstimmen.

+0

Danke für den Tipp auf ": g!/ERROR/d" besser als die angenommene Antwort. – VinGarcia

0

Sie wahrscheinlich Befehl in weniger vi vim &/pattern/ , die Zeilen zeigt, die/Muster/(wie Grep) enthalten.

12

Der beste Weg, dies zu tun ist->

:vimgrep /something/g % | copen 

Dies wird die Liste der Spiele für Ihren Keyword geöffnet und zeigt auch nur die gefundenen Zeilen in quickfix Fenstern.

+0

Ersetzen Sie% durch den Dateipfad, wenn Sie die aktuelle Datei nicht berücksichtigen. – Shivendra

+0

sehr nützlich !!!! Danke!!! – ihightower

Verwandte Themen