En resumen, no. La expresión regular de Vim es un sabor único, y no hay opciones para que se comporte más como otro sabor.
Pienso que es una cosa buena.
magia
La 'magic'
opción no cambia el sabor de la expresión regular que usa Vim. Simplemente invierte el comportamiento de muchos \
átomos escapados.
Por ejemplo, por defecto, +
es un +
carácter literal , donde \+
significa "uno o más del átomo anterior". En contraste, *
significa "cero o más del átomo precedente", mientras que \*
es un literal *
. Muchas personas encuentran esto bastante confuso. El uso \v
en su patrón lo hace un poco más consistente. :help 'magic'
da un buen resumen:
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, creo que el comportamiento predeterminado es bueno para los archivos de código, donde no es raro buscar cosas como foo(
, usando el literal (
.
Propio sabor regex de Vim
He sido testigo de muchas personas que desean que Vim sea compatible con PCRE. Personalmente, deseo que otras herramientas admitan el sabor de expresión regular de Vim. Tiene algunas capacidades que son imposibles o demasiado engorrosas para lograr en PCRE.
Imposible en PCRE
Lookaround es una característica común en la que puede afirmar que un patrón coincide o no antes o después del patrón que está tratando de hacer coincidir. Por ejemplo, el patrón PCRE q(?!u)
(o patrón Vge regex qu\@!
) coincide con a q
que no está seguido por a u
. (Esto es más correcto que q[^u]
, lo que requiere que haya algún carácter después del q
.)
Retroceso negativo de longitud variable
PCRE, y muchos otros sabores, tienen la restricción de que un patrón de mirar hacia atrás negativo debe ser de una longitud fija. Eso significa que un patrón como (?<![a-z]{3})foo
, que significa "la cadena foo
no precedida por exactamente 3 letras minúsculas") está bien, pero (?<![a-z]+)foo
(que significa "la cadena foo
no precedida por ninguna cantidad de letras minúsculas") no lo está.
Esta restricción no existe en Vim. En Vim, un patrón como \([a-z]\+\)\@<!foo
, aunque tal vez un poco feo a la vista, es perfectamente válido.
Más fácil en Vim regex
Algunas cosas son mucho más agradables en el sabor de la expresión regular de Vim.
Anclas de inicio y fin del partido
Los más notables, en mi opinión, son los \zs
y los \ze
anclajes. Estos te permiten especificar el inicio y el final del partido. Por ejemplo, foo(\zs.*\ze)
coincide solo con lo que hay entre (
y )
en una llamada de función como foo(...)
. Esto se puede hacer en PCRE, pero requiere el uso de lookaround, que es un poco tedioso:(?<=foo\().*(?=\))
Prefijo coincidente
Otra cosa genial que Vim puede hacer es unir cualquier prefijo (incluido el prefijo vacío) de una secuencia particular de caracteres. Por ejemplo, para que coincida en f
, fo
, foo
, o food
, el patrón f\%[ood]
se puede utilizar. En PCRE, tal patrón se vería así f(o(od?)?)?
. (¡Imagínese eso para una cuerda más larga!)
Coincidencia de posiciones de cursor, línea y columna
La expresión regular de Vim tiene algunos anclajes para hacer coincidir las posiciones en el búfer.
\%23c
coincide con la columna 23
\%<23c
coincide antes de la columna 23
\%>23c
coincide después de la columna 23
\%16l
coincide con la línea 16
- Similar a la columna, hay anclas para antes o después de un número de línea
\%#
coincide con la posición del cursor
Creo que vale la pena abrazar el sabor de la expresión regular de Vim. Es muy adecuado para su uso en un editor de texto utilizado principalmente para la programación, y es bastante potente.
\v
incluye<>
límites de palabras, que AFAIK es exclusivo de Vim. Entonces no, solo descríbelos como "Vim regex". (No publico como respuesta porque no soy positivo)