| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программное обеспечение под *NIX системы > VIM правим syntax-файлы |
| Автор: comcon1 9.2.2007, 14:18 | ||
| Подскажите общую канву для следующей задачи у меня в файле
надо чтобы циферки подсвечивались в зависимости от того в каком они блоке. Болванка для синтакс-файла у меня уже есть. Всякие ключевые слова подсвечивает. Блок [ bonds ] должен подсвечивать цифры так, а блок [ angles ] иначе. Спасибо, доки я все равно копать буду, хотелось бы начать с чего-то. |
| Автор: bilbobagginz 10.2.2007, 02:04 |
| сразу замечу, что мне пока не приходилось создавать свои подсветки для vim. но, в подсветке таблиц cron есть там одно такое дело, посмотри как оно реализовано и ... копи-пейст. удачи. |
| Автор: comcon1 11.2.2007, 15:03 |
| спасибо - попробую. Код запощу с комментариями. |
| Автор: comcon1 12.2.2007, 12:50 | ||||||||||||||||
Итак. привожу код Syntax-файла с комментариями.
общее место всех вим-файлов. Далее определяем общие группы. syntax match имя_группы 'регулярное_выражение'
Определяем константу, которая подсвечивается, только внутри определенных групп (contained)
Теперь устанавливаем правила для региона [ bonds ] она начинается словом [ bonds ] и заканчивается [ другое_слово ]
Регион содержит общие группы (itpGroup, itpComment, itpPreprocessor) и собственную уникальную группу itpBond keepend нужен, чтобы раскраска вне группы не распространялась внутри группы должны быть столбики цифр вида int int STR int int int STR или int int int Float Float Float .. вот их и пропишем. Это определение строчки, начинающейся с циферок:
contained означает, что эта группа раскрашивается только внутри группы itpBonds Циферки раскрасим по-разному. nextgroup означает, что за этой группой должна следовать другая группа и никак иначе skipwhite пропускает пробелы между последовательными группами
группы определены, теперь расскрасим их командой highlight или сокращенно hi:
раскраска под ошибку группы itpBonds появится только если пользователь ввел внутри группы лабуду, поскольку все неошибочные группы получат свои специальные цвета.
Вот так. Получилось следующее: [ bonds ] ; ai aj funct ; C-N 1 5 gb_EtA_CN_2 ; N-H 1 2 gb_EtA_NH_2 1 3 gb_EtA_NH_2 1 4 gb_EtA_NH_2 ; Ca-H 5 6 gb_EtA_CaH_2 1 2 4 124.4 157.0e+7 safesef 3 543 [ angles ] 1 2 3 3 540 1 2 4 2 124 |