In sintesi, no. Il regex di Vim ha un sapore unico e non ci sono opzioni per farlo comportare più come un altro sapore.
Penso che questa sia una buona cosa.
Magia
L' 'magic'
opzione non cambia il sapore di regex che Vim usa. \
Inverte semplicemente il comportamento di molti atomi sfuggiti.
Ad esempio, per impostazione predefinita, +
è un +
carattere letterale , dove \+
significa "uno o più dell'atomo precedente". Al contrario, *
significa "zero o più dell'atomo precedente", mentre \*
è letterale *
. Molte persone lo trovano abbastanza confuso. L'uso \v
nel modello lo rende un po 'più coerente. :help 'magic'
dà un buon riassunto:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
Personalmente, penso che il comportamento predefinito sia utile per i file di codice, dove non è raro cercare cose come foo(
, usando il letterale (
.
Il sapore regex di Vim
Ho visto molte persone desiderare che Vim supportasse PCRE. Personalmente, vorrei che altri strumenti supportassero il sapore di regex di Vim. Ha alcune funzionalità che sono impossibili o troppo ingombranti da raggiungere in PCRE.
Impossibile in PCRE
Lookaround è una funzione comune in cui è possibile affermare che un modello corrisponde o non corrisponde prima o dopo il modello che si sta tentando di abbinare. Ad esempio, il modello PCRE q(?!u)
(o modello regex di Vim qu\@!
) corrisponde a un q
non seguito da a u
. (Questo è più corretto di q[^u]
, il che richiede che ci sia un po 'di carattere dopo il q
.)
Lookbehind negativo a lunghezza variabile
PCRE, e molti altri gusti, hanno una restrizione che un modello di lookbehind negativo deve avere una lunghezza fissa. Ciò significa che un modello simile (?<![a-z]{3})foo
, che significa "la stringa foo
non preceduta da esattamente 3 lettere minuscole") va bene, ma (?<![a-z]+)foo
(che significa "la stringa foo
non preceduta da un numero qualsiasi di lettere minuscole") non lo è.
Questa restrizione non esiste in Vim. In Vim, uno schema come \([a-z]\+\)\@<!foo
, sebbene forse un po 'brutto da guardare, è perfettamente valido.
Più facile in Vim regex
Alcune cose sono molto più belle nel sapore regex di Vim.
Inizio e fine delle ancore della partita
La più importante, a mio parere, sono la \zs
e \ze
ancore. Questi ti consentono di specificare l'inizio e la fine della partita. Ad esempio, foo(\zs.*\ze)
corrisponde solo a ciò che è compreso tra (
e )
in una chiamata di funzione come foo(...)
. Questo può essere fatto in PCRE, ma richiede l'uso di lookaround, che è leggermente noioso:(?<=foo\().*(?=\))
Abbinamento prefisso
Un'altra cosa interessante che Vim può fare è abbinare qualsiasi prefisso (incluso il prefisso vuoto) di una particolare sequenza di caratteri. Ad esempio, per abbinare su f
, fo
, foo
, o food
, il modello f\%[ood]
può essere utilizzato. In PCRE, un tale schema sarebbe simile f(o(od?)?)?
. (Immagina che per una corda più lunga!)
Posizioni di cursore, linea e colonna corrispondenti
Il regex di Vim ha alcune ancore per abbinare le posizioni nel buffer.
\%23c
corrisponde alla colonna 23
\%<23c
partite prima della colonna 23
\%>23c
partite dopo la colonna 23
\%16l
corrisponde alla riga 16
- Simile alla colonna, ci sono ancore prima o dopo un numero di riga
\%#
corrisponde alla posizione del cursore
Penso che valga la pena abbracciare il sapore regex di Vim. È adatto per l'uso in un editor di testo utilizzato principalmente per la programmazione ed è abbastanza potente.
\v
include i<>
confini delle parole, che AFAIK è unico per Vim. Quindi no, descrivili semplicemente come "Vim regex". (Non invio come risposta perché non sono positivo)