2015-09-07 22 views
11

Secondo this page è possibile utilizzare perl espressioni regolari compatibili convim: ricerca interattiva e sostituirlo con perl espressioni regolari compatibili

:perldo s/pattern/insert/g.

Questo funziona correttamente.

Ma, come posso ottenere la ricerca interattiva e sostituirla con la sintassi PCRE in vim?

Poiché questo non funziona con perldo, cerco una soluzione diversa.

+2

rebox di vim offre più funzionalità rispetto alla regex di Perl in vim. vale la pena imparare – Kent

+0

Vuoi dire che l'utente guarda e conferma ogni sostituzione? Non c'è una funzionalità integrata come quella che io sappia. – melpomene

+1

BTW, questo non è PCRE; questo è il vero codice Perl con regex di Perl reali. – melpomene

risposta

5

Fino alla versione corrente di vim, non c'è modo di fare :s/[perlRegex]/bar/c

Quindi ti stai chiedendo per una funzione che non esiste .

È possibile eseguire l'abbinamento con verymagic, tuttavia non è compatibile con Perl Regex. Sta ancora usando il motore di vimregex, ha appena cambiato il modo di sfuggire ai modelli regex.

Per esempio, in Perl, si può fare lookahead/dietro (?<=foo)..., (?=foo), (?!foo).., è possibile utilizzare il pratico \K: som.*ing\Kwhatever etc, non è possibile utilizzare quelli della sintassi in vim direttamente, non importa quale 'magia' di livello è stata impostata. Vim ha le stesse caratteristiche, ma diversa sintassi:

\@= 
\@! 
\@<= 

e anche il \zs \ze sono molto pratico, ancora più potente di perl di \K.

Vim è un editor, con rebox di vim, non si può solo eseguire la corrispondenza del testo, ma anche fare corrispondere la base alla selezione visiva, alla posizione del cursore e così via.

Se hai davvero bisogno di fare una corrispondenza di pattern complessa e hai davvero bisogno di eseguirli in vim, impara regex! Non è difficile per te se conosci "molto bene il pc"

+0

': help perl-patterns' è una buona lettura per trovare il modello perl equivalente per vim. – FDinoff

0

Nell'esempio, s/pattern/insert/g è un comando perl, non un comando Vim che utilizza una sintassi di espressione regolare compatibile perl.

Se perl non ha un equivalente di Vim's /c, è necessario trovare un metodo alternativo come ... scrivere un vero script perl.

+0

Preferisco una soluzione interattiva. – guettli

+2

Non puoi averlo con ': perldo' da solo. – romainl

+0

Ho aggiunto una nota alla domanda: Poiché questo non funziona con 'perldo', cerco una soluzione diversa – guettli

1

Probabilmente il più vicino si può ottenere è:

:s/\vfoo/bar/gc 
+0

Non so '\ v'. Dove posso trovare i documenti per questo? – guettli

+0

Leggi le diverse modalità magiche di Vim: http://vimdoc.sourceforge.net/htmldoc/pattern.html#/magic –

+0

In generale, se vuoi un'espressione regolare simile a Perl, puoi usare la modalità molto magica (\ v) in le tue espressioni Sono sicuro che non è una partita esatta 1-1 con Perl, ma è molto potente e devo ancora fallire me –

0

Suggerisco di provare eregex plugin. Esegue il mapping delle espressioni regolari compatibili con perl con la sintassi regex di VIM.