2015-07-28 3 views
3

Я пишу файл подсветки синтаксиса для языка (которого еще не было) в Vim.Синтаксис подсветки начала и конца прозрачных областей в Vim

Аналогичная проблема с тем, что я застрял, будет выделение списков в Python: я хочу, чтобы элементы списка отображались нормально, если они являются типами, которые язык разрешает находиться в таком списке, в то время как список структура (т.е. [ , ] следует выделить в своем цвете.

в настоящее время я использую

syn region myList  start='\[' end=']' transparent contains=myList,myDelimiter,myNumber,myString 
syn match myDelimiter ','    contained 

myList содержит себя, чтобы вложенные списки (а следовательно, правовые дополнительные ] конечных маркеров), не нарушая область. Однако, так как это прозрачный (чтобы подчеркнуть (myNumber и myString в этом примере)), начало [ и ] концевые скобки остаются без подсветки.

myDelimiter группа может рассматриваться как обходной путь, чтобы выделить, по крайней мере запятые (хотя это довольно бессмысленно без остальной части структуры, т.е. начало и конец []). Добавление [ и ] к myDelimiter шаблону, как это:

syn match myDelimiter ',\|\[\|]'   contained 

Перерывы myList область и делает его активировать на несвязанных частей файла (вне любого списка, тем самым нарушая другие моменты синтаксиса для элементов не допускается в Я думаю, проблема в том, что конец больше не считается концом, а разделителем внутри большого массива, охватывающим последний массив в файле).

Visual explanation of the problem

Я попытался добавить matchgroup=myList к syn region myList ... (и убедившись, что он имел соответствующую hi myList ctermfg=red запись в моем ColorScheme), но это ничего не изменило.

Есть ли способ исправить это?

+1

': help: syn-region' и проверьте определение' matchgroup = '. Посмотрите, помогает ли это. – Vitor

+0

Спасибо, но как упоминалось во втором последнем абзаце, я пытался, и, к сожалению, это не сработало. –

ответ

2

Вам нужно добавить matchgroup=myListContainer к вашему определению области и после этого вы можете выделить эту новую группу:

:hi myListContainer guifg=red 

Вы можете использовать для matchgroup любого другого имени группы, но я думаю, что это не должно быть так же, как и основная группа, с которой вы связываетесь.

См. Пример here.

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