Що таке ім'я лексеми '\%' та '\ @' у vim regex? І що це робить?


10

Під час редагування синтаксичного файлу я виявив щось на зразок:

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

Я знайомий з будь-яким іншим, ніж там \%і \@там. Я навіть не можу гугла, бо не знаю, як це звуть. Отже, що це таке і що робить?

Відповіді:


14

Перш ніж гугл, спробуйте док:

З :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 "//"

1
Ах, я не знаю, що :helpможе сприймати шаблон як аргумент. Це дуже цінна інформація. До речі, у нього немає імені, чи не так?
Мас Баголь

1
Це точно не приймає модель , як аргумент: pattern.txtфайл містить теми про ці елементи , таким чином , у них є допомога тег пов'язаний ( /\%(\)або /\%(чи E53для першого і /\@<!для другого) , і ці мітки можуть бути використані в якості аргументів :h. Щодо їхнього імені, я б сказав, що їх називають атомами так само, ^або .я не впевнений на 100%.
statox

4
@statox Це не зовсім сприймає шаблони як аргументи. Ну, це для чого :helpgrep. :)
lcd047

@ lcd047 Чорт, як я міг забути про цю команду ?! Дякую за це корисне нагадування :)
statox

1
Цей сайт, як правило, мене дивує: На даний момент я зробив 170 відповідей, і ця є шостою найбільш популярною, в той час як вона містить лише дві легко знайти цитати документа, тоді як у мене є інші відповіді з vimscript кодом або як реалізувати більш складні дії. .. Я не розумію, чому цей настільки "успішний"
statox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.