2013-03-01 2 views
3

Я пытаюсь написать синтаксический маркер в VIM. Как вы выделяете матч в другом матче?vim regex & highlight синтаксис: найти совпадение и игнорировать его соответствие

Чтобы найти каждый матч, я создал две строки syn match, которые работают там, где совпадения являются отдельными.

syn match celString "^xpath=.\{-};"  -> matches "xpath=.........;" 
syn match celComment "\${.\{-}}"   -> matches "${LIB_METADATA};" 

highlight syntax results - first line has separated matches, while second line has overlapping matches

  • Первая линия розового цвета для строки XPATH и синий для ${..} строки.

  • Вторая строка является розовой для строки xpath, но ${..}, содержащейся внутри этой строки, игнорируется.

Я пытался изменить порядок syn match линий, но это не имеет никакого эффекта.

Буду признателен за ваши идеи.

+0

Мое предположение использует группы? http://vimdoc.sourceforge.net/htmldoc/usr_44.html#44.6 –

ответ

5

По умолчанию Vim применяет только синтаксические группы к тексту, которому еще не назначен синтаксис. Для того, чтобы указать, что одна группа может содержать другие группы, используйте contains=... атрибут:

:syn match celString "^xpath=.\{-};" contains=celComment 

Порядок определения не имеет значения здесь. См. :help :syn-contains для получения дополнительной информации.

+0

Спасибо. Это сделало работу. – RaamEE

Смежные вопросы