Kann ich reguläre Perl-Ausdrücke in der vim-Befehlszeile verwenden?


27

Ich möchte reguläre Perl-Ausdrücke in der vim-Befehlszeile verwenden. Um beispielsweise die Wörter in der aktuellen Zeile in Großbuchstaben zu schreiben, können Sie Folgendes eingeben:

:s/(\w+)/\u$1/g

From : help perl-patterns ... Die regulären Ausdrücke von Vim sind Perls in Bezug auf Ihre Möglichkeiten am ähnlichsten. Der Unterschied zwischen ihnen ist meist nur Notation ähm ... das heißt, Chinesisch ist ähnlich wie Griechisch, in Bezug auf das, was Sie kommunizieren können. Der Unterschied ist meist nur Notation. Regex ist nichts als Notation! Die Unterschiede sind ärgerlich, wenn eine Notation weniger vertraut ist als eine andere. Deshalb fragen die Leute in erster Linie nach Perl!
Dreftymac

Antworten:


19

Sie können jede Zeile oder jeden Zeilenbereich mit! Durch einen externen Befehl in vim filtern. ZB können Sie tun:

:.!perl -pe "s/(\w+)/\u\1/g"

Dadurch wird die aktuelle Zeile durch diesen Perl-Befehl gefiltert. (Hier :gelangen Sie in den Befehlszeilenmodus. Die .folgenden Angaben beziehen sich auf die aktuelle Zeile. Sie können auch einen Zeilenbereich oder %die gesamte Datei usw. angeben .)

Wenn Sie die in vim eingebauten Ersetzungsmuster verwenden möchten, sollten Sie die "sehr magische" Option \ v von vim wie folgt verwenden:

:s/\v(\w+)/\u\1/g

Siehe :help patternund :help substitutefür weitere Details. Ich denke nicht, dass "sehr magisch" mit Perls Mustern identisch ist, aber es ist sehr nah. Wie auch immer, Sie können Perl immer selbst verwenden, wenn Sie sich damit besser auskennen, wie oben.


1
Mit sehr viel Magie müssen Sie sich auch nicht merken, (was besonders behandelt wird, solange {nicht: "Alle ASCII - Zeichen außer '0' - '9', 'a' - 'z', 'A' - 'Z' und '_' haben eine besondere Bedeutung. " Vielen Dank!
Ayrat

10

Nein, Sie können auf diese Weise keine regulären Perl-Ausdrücke verwenden. Hilfe zum Erlernen der Vim-Entsprechungen für Perl-Komponenten für reguläre Ausdrücke finden Sie unter

:help perl-patterns

Sie können Perl jedoch als externen Filter verwenden, wie von frabjous erläutert. Sie können Perl-Befehle in Vim auch über die Perl-Oberfläche ausführen, wenn Ihr Vim mit dieser +perlFunktion kompiliert wurde . Sehen

:help if_perl.txt

2
+1, :help perl-patternshat die eine Sache gelöst, die ich zuvor über vim hasste
Mark K Cowan

8

Sie können auch verwenden:

/\v"your regex"

anstatt:

/"your regex"

Das ist die Antwort, nach der ich gesucht habe!
alextercete

Sie können sich auch selbst helfen, indem Sie nnoremap / /\vund vnoremap / /\vzu Ihrer .vimrc-Datei hinzufügen , damit sie bei der Eingabe /funktioniert.
mattmc3


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.