/ / Wie schreibe ich Assertionen mit der Breite null in vim? - Vim

Wie schreibe ich Breiten Behauptungen in Vim? - Vim

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 № 1

Um 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.