Hier ist das Rohmaterial, mit dem ich arbeite:
line1=a1 abc
line2=abc
line3=aba
line4=cbc
Ich möchte Zeilen abgleichen, die keine Zeichenkette von "abc" enthalten, das Ergebnis ist:
line3=aba
line4=cbc
wie kann ich es in vim bekommen? vielleicht ist der Ausdruck etwas wie (?!ABC) in Perl bin ich nicht sicher, wie man den regulären Ausdruck in Vim schreibt.
Antworten:
3 für die Antwort № 1Um Zeilen zu finden, die nicht mit abc enden, könnten Sie den Ausdruck auf zwei Arten schreiben. Mein bevorzugtes ist mit sehr Magie
/v.*(abc)@!/
Und ohne sehr Magie:
/.*(abc)@!/
Ich empfehle Ihnen, sich etwas Zeit zu nehmen, um zu lesen:
:help magic
1 für die Antwort № 2
Von Macht von G:
Löschen Sie alle Zeilen, die keinem Muster entsprechen.
:g!/<pattern>/d
Natürlich können Sie die ersetzen d
am Ende etwas anderes als das Löschen der Linie ...
1 für die Antwort № 3
Es scheint, Sie sind vertraut mit Perl regulären Ausdrücken. Sie werden wahrscheinlich interessiert sein :help perl-patterns
Hier können Sie Vim-Entsprechungen für gängige Perl-Regex-Muster finden. Dort können Sie sehen, dass Sie für ein Null-Breite-Negativ-Look-ahead möchten @!
.
Für andere Nullbreitenmuster, einschließlich einiger nicht aufgelisteter Muster :help perl-patterns
, sehen :help /@=
und folgend. Auch nützlich sind zs
und ze
Das kann in vielen Fällen einige komplexere Null-Breite-Übereinstimmungen vermeiden.