Что такое имя токена '\%' и '\ @' в vim regex? И что это делает?

10

При редактировании файла синтаксиса я нашел что-то вроде:

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

Я знаком с любым, кроме \%и \@там. Я не могу даже гуглить, потому что я не знаю, как это зовут. Так что это такое и что оно делает?

Мас Баголь
источник

Ответы:

14

Перед поиском в Google попробуйте док:

От :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}

А также :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
источник
1
Ах, я не знаю, что :helpможет принять шаблон в качестве аргумента. Это очень ценная информация. Кстати, у него нет названия, не так ли?
Мас Баголь
1
Это точно не принимает модель , как аргумент: pattern.txtфайл содержит темы об этих элементах , таким образом , у них есть помощь тег связан ( /\%(\)или /\%(или E53для первого и /\@<!для второго) , и эти метки могут быть использованы в качестве аргументов :h. Что касается их имени, я бы сказал, что они называются атомами, как ^или ., но я не уверен на 100%.
statox
4
@statox Точно не принимает шаблоны в качестве аргументов. Ну, для этого и все :helpgrep. :)
lcd047
@ lcd047 Черт, как я мог забыть об этой команде ?! Спасибо за это полезное напоминание :)
statox
1
Этот сайт иногда удивляет меня: в настоящее время я получил 170 ответов, и этот - 6-й по популярности, в то время как он содержит только две легко доступные цитаты из документа, в то время как у меня есть другие ответы с кодом vimscript или о том, как реализовать более сложные действия. .. Я не понимаю, почему это так "успешно"
statox