Подсветка синтаксиса vim поверх c.vim, "содержать" не совсем работает

Я пытаюсь создать собственную схему подсветки Objective-C для vim. Проблема в том, что когда я определяю какое-то правило с contained он все еще применяется, даже если нет правил, содержащих это. У меня есть это в моем objc.vim для целей тестирования:

syntax clear
runtime! syntax/c.vim
syn match firstComponent "[_A-Za-z0-9()]*:" contained
hi link firstComponent Function

Я подозреваю, что это потому, что c.vim имеет много правил contained=ALLBUT поэтому они включают и мое правило. Есть ли способы обойти это?

Благодарю.

PS Я строю свою собственную схему для выделения методов, потому что та, которую я использовал раньше, медленная, в частности, совпадение сигнатур методов медленное, я сделал сокращение, которое показывает это. Я подозреваю, что это может быть из-за проблемы выше. Сложные внутренние правила совпадают везде.

1 ответ

Решение

Ваша догадка верна, это связано с contained=ALLBUT, Существуют ограничения на повторное использование существующего синтаксиса. Хотя вы можете попытаться переопределить или :syntax clear определенные элементы, наступает момент, когда это становится чрезмерно утомительным.

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

Другие вопросы по тегам