2015-09-07 16 views
11

this page Nach Sie Perl kompatiblen regulären Ausdruck mitvim: Interaktive Suchen und Ersetzen mit Perl-kompatible reguläre Ausdrücke

:perldo s/pattern/insert/g verwenden können.

Das funktioniert gut.

Aber wie kann ich interaktive suchen und ersetzen mit PCRE-Syntax in vim?

Da dies nicht funktioniert mit perldo suche ich nach einer anderen Lösung.

+2

vim Regex bringt mehr Funktion als Perl regex in vim. es lohnt sich zu lernen – Kent

+0

Sie meinen, dass der Benutzer jeden Ersatz sehen und bestätigen muss? Soweit ich weiß, gibt es keine eingebauten Funktionen. – melpomene

+1

BTW, das ist nicht PCRE; Dies ist der tatsächliche Perl-Code mit tatsächlichen Perl-Regexes. – melpomene

Antwort

5

Bis die aktuelle Release-Version von vim, gibt es keine Möglichkeit :s/[perlRegex]/bar/c

So fordern sie eine Funktion zu tun, das nicht existiert .

Sie können mit verymagic übereinstimmen, aber es ist nicht Perl Regex kompatible Flag. Es verwendet immer noch die vimregex-Engine, hat nur die Art geändert, wie man Regex-Mustern entkommen kann.

Zum Beispiel in Perl, können Sie Look-Ahead/hinter (?<=foo)..., (?=foo), (?!foo).., können Sie die handlichen \K verwenden: som.*ing\Kwhatever etc, können Sie nicht, dass diese Syntax in vim verwenden, um direkt, unabhängig davon, welche ‚Magie‘ Ebene, die Sie festgelegt haben. Vim hat die gleiche Funktion, aber eine andere Syntax:

\@= 
\@! 
\@<= 

und auch die \zs \ze sind sehr praktisch, noch mächtiger als Perl \K.

Vim ist ein Editor, mit vim Regex, können Sie nicht nur Text-Matching, sondern auch Basis auf visuelle Auswahl, Cursor-Position und so weiter.

Wenn Sie wirklich komplexe Mustererkennung tun müssen und wirklich in vim tun müssen, lernen Sie vim regex! Es ist nicht schwierig für Sie, wenn Sie "pcre sehr gut wissen"

+0

': help perl-patterns' ist ein guter Lesevorgang, um das entsprechende Perl-Muster für vim zu finden. – FDinoff

0

In Ihrem Beispiel ist s/pattern/insert/g ein Perl-Befehl, kein Vim-Befehl, der eine Perl-kompatible Syntax für reguläre Ausdrücke verwendet.

Wenn Perl nicht gleichwertig mit /c Flag von Vim ist, müssen Sie eine alternative Methode wie ... ein Perl-Skript schreiben.

+0

Ich bevorzuge eine interaktive Lösung. – guettli

+2

Das kann man nicht mit ': perldo' allein haben. – romainl

+0

Ich habe eine Notiz zu der Frage hinzugefügt: Da dies nicht mit 'perldo' funktioniert, suche ich nach einer anderen Lösung. – guettli

1

Wahrscheinlich in der Nähe Sie erhalten können, ist:

:s/\vfoo/bar/gc 
+0

Ich weiß nicht '\ v'. Wo finde ich die Dokumente dafür? – guettli

+0

Lesen Sie sich die verschiedenen Magic-Modi von Vim durch: http://vimdoc.sourceforge.net/htmldoc/pattern.html#/magic –

+0

Wenn Sie einen Perl-ähnlichen Regex verwenden möchten, können Sie im Allgemeinen den sehr magischen Modus (\ v) verwenden deine Ausdrücke. Ich bin mir sicher, dass es kein genaues 1: 1-Match mit Perl ist, aber es ist sehr mächtig und ich habe es immer noch nicht geschafft. –

0

Ich schlage vor, eregex plugin auszuprobieren. Er ordnet perlkompatible reguläre Ausdrücke der VIM-Regex-Syntax zu.

Verwandte Themen