¿Cuál es el nombre del token '\%' y '\ @' en vim regex? Y que hace

10

Mientras editaba el archivo de sintaxis, encontré algo como:

\s*\%(\%(:\@<!\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$

Estoy familiarizado con cualquier otro que \%y \@allí. Ni siquiera puedo buscar en Google porque no sé cómo se llama. Entonces, ¿qué es y qué hace?

Mas Bagol
fuente

Respuestas:

14

Antes de buscar en Google, prueba el documento:

De :h \%

\%(\)   A pattern enclosed by escaped parentheses.
    Just like \(\), but without counting it as a sub-expression.  This
    allows using more groups and it's a little bit faster.
    {not in Vi}

Y :h \@<!

\@<!    Matches with zero width if the preceding atom does NOT match just
    before what follows.  Thus this matches if there is no position in the
    current or previous line where the atom matches such that it ends just
    before what follows.

    Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
    The match with the preceding atom is made to end just before the match
    with what follows, thus an atom that ends in ".*" will work.
    Warning: This can be slow (because many positions need to be checked
    for a match).  Use a limit if you can, see below.

    Example         matches ~

    \(foo\)\@<!bar      any "bar" that's not in "foobar"

    \(\/\/.*\)\@<!in    "in" which is not after "//"
statox
fuente
1
Ah, no sé si :helppuede aceptar el patrón como argumento. Esa es información muy valiosa. Por cierto, no tiene nombre, ¿no?
Mas Bagol
1
No acepta exactamente los patrones como argumentos: el pattern.txtarchivo tiene temas acerca de estos elementos por lo tanto tienen una etiqueta de ayuda asociada ( /\%(\)o /\%(o E53para el primero y /\@<!el segundo) y estas etiquetas se puede utilizar como argumentos de :h. Ahora sobre su nombre, diría que se llaman átomos como ^o ., pero no estoy 100% seguro.
statox
44
@statox No acepta patrones exactamente como argumentos . Bueno, para eso :helpgrepestá. :)
lcd047
@ lcd047 Maldición, ¿cómo podría haberme olvidado de este comando? Gracias por este útil recordatorio :)
statox
1
Este sitio tiende a sorprenderme a veces: actualmente hice 170 respuestas y esta es la sexta más votada, mientras que solo contiene dos citas fáciles de encontrar del documento, mientras que tengo otras respuestas con código vimscript o cómo realizar acciones más complejas. .. No entiendo por qué este es tan "exitoso"
statox