Em resumo, não. A expressão regular do Vim é um sabor único e não há opções para fazê-lo se comportar mais como outro sabor.
Eu acho que isso é uma coisa boa.
Magia
A 'magic'
opção não altera o sabor do regex que o Vim usa. Simplesmente inverte o comportamento de muitos \
átomos com escape.
Por exemplo, por padrão, +
é um +
caractere literal , onde \+
significa "um ou mais átomos anteriores". Por outro lado, *
significa "zero ou mais do átomo anterior", enquanto \*
é um literal *
. Muitas pessoas acham isso bastante confuso. Usar \v
seu padrão o torna um pouco mais consistente. :help 'magic'
dá um bom resumo:
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'
Pessoalmente, acho que o comportamento padrão é bom para arquivos de código, onde não é incomum procurar coisas como foo(
, usando o literal (
.
O sabor regex do próprio Vim
Testemunhei muitas pessoas desejando que o Vim apoiasse o PCRE. Pessoalmente, desejo que outras ferramentas suportem o sabor da regex do Vim. Possui alguns recursos que são impossíveis ou muito pesados para serem alcançados no PCRE.
Impossível no PCRE
Lookaround é um recurso comum em que você pode afirmar que um padrão corresponde ou não a um parâmetro antes ou depois do padrão que você está tentando corresponder. Por exemplo, o padrão PCRE q(?!u)
(ou padrão de regex do Vim qu\@!
) corresponde a um q
que não é seguido por a u
. (Isso é mais correto que q[^u]
, o que requer que haja algum caractere após o q
.)
Lookbehind negativo de comprimento variável
O PCRE e muitos outros sabores têm uma restrição de que um padrão lookbehind negativo deve ter um comprimento fixo. Isso significa que um padrão como (?<![a-z]{3})foo
, significando "a sequência foo
não precedida por exatamente três letras minúsculas") é bom, mas (?<![a-z]+)foo
(significando "a sequência foo
não precedida por qualquer número de letras minúsculas") não é.
Essa restrição não existe no Vim. No Vim, um padrão como \([a-z]\+\)\@<!foo
, embora talvez seja um pouco feio de se ver, é perfeitamente válido.
Mais fácil no regex do Vim
Algumas coisas são muito melhores no sabor de regex do Vim.
Âncoras no início e no final da partida
O mais notável, na minha opinião, são o \zs
e \ze
âncoras. Isso permite que você especifique o início e o fim da partida. Por exemplo, foo(\zs.*\ze)
corresponde apenas ao que há entre (
e )
em uma chamada de função foo(...)
. Isso pode ser feito no PCRE, mas requer o uso de lookaround, o que é um pouco tedioso:(?<=foo\().*(?=\))
Correspondência de prefixo
Outra coisa interessante que o Vim pode fazer é corresponder a qualquer prefixo (incluindo o prefixo vazio) de uma sequência específica de caracteres. Por exemplo, para corresponder em f
, fo
, foo
, ou food
, o padrão f\%[ood]
pode ser utilizado. No PCRE, esse padrão seria semelhante f(o(od?)?)?
. (Imagine isso por uma corda mais longa!)
Correspondência de posições de cursor, linha e coluna
A regex do Vim possui algumas âncoras para corresponder às posições no buffer.
\%23c
corresponde à coluna 23
\%<23c
corresponde à coluna 23
\%>23c
corresponde após a coluna 23
\%16l
corresponde à linha 16
- Semelhante à coluna, existem âncoras para antes ou depois de um número de linha
\%#
corresponde à posição do cursor
Acho que vale a pena adotar o sabor da regex de Vim. É adequado para uso em um editor de texto usado principalmente para programação e é bastante poderoso.
\v
inclui<>
limites de palavras, que o AFAIK é exclusivo do Vim. Portanto, não, apenas descreva-os como "Vim regex". (Não postar como uma resposta porque eu não sou positivo)