Ich möchte die inverse Operation vonVim-Befehl löschen Sie alle ausgewählten Linien
:g/pattern/d
dh Löschen Sie alle Zeilen in einer Datei ausgeführt tun, die nicht pattern
Ich möchte die inverse Operation vonVim-Befehl löschen Sie alle ausgewählten Linien
:g/pattern/d
dh Löschen Sie alle Zeilen in einer Datei ausgeführt tun, die nicht pattern
können Sie v
verwenden, um alle Zeilen ohne Muster zu wählen:
:v/pattern/d
wird erreichen, was Sie tun wollen.
Siehe :help :v
Eine Möglichkeit, dies zu tun haben ist mit einem Shell-Filter:
:%!grep pattern
Dieser Befehl übergibt Ihre gesamte Datei (%
) in eine Schale (!
), die es durch dieläuftBefehl und gibt die Ausgabe an Ihr Editor-Fenster zurück.
Mit allem Respekt, die Antwort von Xavier T ist die richtige Antwort. vim liefert ': v' für genau dieses Problem. –
Ich stimme zu. Die Shell-Filter-Fähigkeit ist jedoch in sich selbst sehr nützlich. –
können Sie einfach das Muster negieren
:g!/pattern/d
Dies wird alle bis auf die ausgewählten Zeilen löschen.
Die Verwendung dieses globalen Befehls scheint dem shell-Befehl vorzuziehen, weil: (1) es ein interner Vim-Befehl ist und nicht davon abhängt, ein externes grep-Dienstprogramm zu haben, was auf Windows-Systemen ein Problem sein könnte und (2) unsicher ist Shell-Filter gibt im Grunde ein völlig neues Dokument zurück, und der globale Befehl löscht nur Zeilen, ich denke, das Globale ist vorzuziehen, um die Rückgängig-Geschichte kleiner (und damit schneller) zu halten, und (3) nur allgemein ist es eine gute Idee, sich anzugewöhnen Vim globals (: g und: v), weil Sie damit beliebige Aktionen auf übereinstimmenden Zeilen durchführen können, nicht nur löschen. –