Wie lautet der Name des Tokens '\%' und '\ @' in vim regex? Und was macht es?

10

Beim Bearbeiten der Syntaxdatei habe ich Folgendes gefunden:

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

Ich kenne andere als \%und \@dort. Ich kann nicht einmal googeln, weil ich nicht weiß, wie es heißt. Also was ist es und was macht es?

Mas Bagol
quelle

Antworten:

14

Probieren Sie vor dem Googeln das Dokument aus:

Von :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}

Und :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
quelle
1
Ah, ich weiß nicht, dass :helpdas Muster als Argument akzeptieren kann. Das sind sehr wertvolle Informationen. Es hat übrigens keinen Namen, oder?
Mas Bagol
1
Es ist nicht genau Muster als Argumente akzeptieren: die pattern.txtDatei hat Themen über diese Elemente so haben sie eine Hilfe - Tag (zugeordnet /\%(\)oder /\%(oder E53für die erste und /\@<!für die zweite) und diese Tags können als Argumente verwendet werden :h. Nun zu ihrem Namen würde ich sagen, dass sie wie ^oder Atome genannt werden ., aber ich bin mir nicht 100% sicher.
Statox
4
@statox Es akzeptiert Muster nicht genau als Argumente - Nun, dafür :helpgrepist es da. :)
lcd047
@ lcd047 Verdammt, wie hätte ich diesen Befehl vergessen können?! Vielen Dank für diese hilfreiche Erinnerung :)
statox
1
Diese Seite überrascht mich manchmal: Derzeit habe ich 170 Antworten gegeben, und diese ist die sechstbeste, während sie nur zwei leicht zu findende Zitate des Dokuments enthält, während ich andere Antworten mit Vimscript-Code habe oder wie man komplexere Aktionen realisiert. .. Ich verstehe nicht, warum dieser so "erfolgreich" ist
statox