Quel est le nom du jeton '\%' et '\ @' dans vim regex? Et que fait-il?

10

Lors de l'édition du fichier de syntaxe, j'ai trouvé quelque chose comme:

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

Je ne connais personne d'autre que là \%- \@bas. Je ne peux même pas googler parce que je ne sais pas quel est son nom. Alors qu'est-ce que c'est et que fait-il?

Mas Bagol
la source

Réponses:

14

Avant de googler, essayez le doc:

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}

Et :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
la source
1
Ah, je ne sais pas qui :helppeut accepter un motif comme argument. Ce sont des informations très précieuses. Soit dit en passant, il n'a pas de nom, n'est-ce pas?
Mas Bagol
1
Il n'accepte pas exactement les modèles comme arguments: le pattern.txtfichier a des sujets au sujet de ces éléments ainsi ils ont une étiquette d'aide associée ( /\%(\)ou /\%(ou E53pour le premier et /\@<!pour le second) et ces balises peuvent être utilisées comme arguments de :h. Maintenant à propos de leur nom, je dirais qu'ils sont appelés des atomes comme ^ou ., mais je ne suis pas sûr à 100%.
statox
4
@statox Il n'accepte pas exactement les motifs comme arguments - Eh bien, c'est pour ça :helpgrep. :)
lcd047
@ lcd047 Merde, comment aurais-je pu oublier cette commande?! Merci pour ce rappel utile :)
statox
1
Ce site a tendance à me surprendre parfois: actuellement, j'ai fait 170 réponses et celle-ci est la 6e la plus votée alors qu'elle ne contient que deux citations faciles à trouver du document alors que j'ai d'autres réponses avec du code vimscript ou comment réaliser des actions plus complexes. .. Je ne comprends pas pourquoi celui-ci est si "réussi"
statox