Не думаю, что вы понимаете, что делает заглядывание. Похоже, что вы пытаетесь сопоставить строку, но пропустите ее:
foo$bar$___
^^^~~~~~^^^
... где части, отмеченные ^
образуют соответствие (прерывистые), а части, отмеченные ~
, пропускаются.
Это невозможно с регулярным выражением. Регулярное выражение всегда соответствует непрерывному фрагменту строки.
Что делает Lookahead, так это то, что он позволяет вам «заглянуть вперед»: он, как обычно, соответствует под Регламенту, но не перемещает текущую позицию в строке. В зависимости от того, куда вы поместили заголовок, это позволяет вам либо проверять текст после конца совпадения, либо удостовериться, что одна и та же строка соответствует двум регулярным выражениям одновременно (хотя последнее также можно сделать с помощью \&
в vim).
Пример:
\%(foo\)\@=bar
Это никогда не может совпадать. Требуется, чтобы следующие три символа были одновременно foo
и bar
, что невозможно.
Я думаю, что вы ищете перекрывающиеся спички. Vim поддерживает это напрямую:
syn match match1 /\$[^$ ]\+\$/
syn match match2 /\%(\w\|\$[^$ ]\+\$\)\+__/ contains=match1
Здесь мы говорим, что совпадения match2
могут содержать совпадения match1
. Это дает вам подсветку, которую вы хотите.