Модераторы: ZeeLax, powerfox
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VIM правим syntax-файлы, помогите - мож кто правил 
:(
    Опции темы
comcon1
Дата 9.2.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 2
Всего: 17



Подскажите общую канву для следующей задачи
у меня в файле 
Код

[ bonds ]
 4 5  1 0.153 1.5778e5
...

[angles]
 3 4 5   1  109.3    356
...

надо чтобы циферки подсвечивались в зависимости от того в каком они блоке.
Болванка для синтакс-файла у меня уже есть. Всякие ключевые слова подсвечивает.
    Блок [ bonds ] должен подсвечивать цифры так, а блок [ angles ] иначе.

Спасибо, доки я все равно копать буду, хотелось бы начать с чего-то.


--------------------
PM MAIL   Вверх
bilbobagginz
Дата 10.2.2007, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 28
Всего: 317



сразу замечу, что мне пока не приходилось создавать свои подсветки для vim.
но, в подсветке таблиц cron есть там одно такое дело, посмотри как оно реализовано и ... копи-пейст.

удачи.


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
comcon1
Дата 11.2.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 2
Всего: 17



спасибо - попробую. Код запощу с комментариями.


--------------------
PM MAIL   Вверх
comcon1
Дата 12.2.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 2
Всего: 17



Итак. привожу код Syntax-файла с комментариями.
Код

if exists("b:current_syntax")
 finish
endif

общее место всех вим-файлов.
Далее определяем общие группы.
 syntax match имя_группы 'регулярное_выражение'
Код

  syntax match itpComment '\(;.*\|#.*\)'
  syntax match itpGroup '^\s*\[\s*\(bonds\|dihedrals\|angles\|pairs\|atoms\|molecules\|system\|moleculetype\|atomtype\|dihedraltype\|bondtype\|angletype\)\s*\]\s*$' contained
  syntax match itpPreprocessor '#\(define\|ifdef\|include\|undefine\|if\|endif\|else\).*'

Определяем константу, которая подсвечивается, только внутри определенных групп (contained)
Код

  syntax match  itpConstant '[a-zA-Z_0-9]\+' contained

Теперь устанавливаем правила для региона [ bonds ]
она начинается словом [ bonds ]
и заканчивается [ другое_слово ]
Код

" [ BONDS ] group definition
  syntax region itpBonds start=/^\s*\[\s*[Bb][Oo][Nn][Dd][Ss]\s*\]\s*$/ end=/^\s*\[.*$/ contains=itpBond,itpGroup,itpComment,itpPreprocessor keepend

Регион содержит общие группы (itpGroup, itpComment, itpPreprocessor) и собственную уникальную группу itpBond
keepend нужен, чтобы раскраска вне группы не распространялась
внутри группы должны быть столбики цифр вида
 int int STR
 int int int STR
 или 
 int int int Float Float Float ..
вот их и пропишем. Это определение строчки, начинающейся с циферок:
Код

  syntax region itpBond start=/^\s*[0-9]/ end=/$/ contains=itpBondA1 contained

contained означает, что эта группа раскрашивается только внутри группы itpBonds
Циферки раскрасим по-разному. nextgroup означает, что за этой группой должна следовать другая группа и никак иначе
skipwhite пропускает пробелы между последовательными группами
Код

  syntax match  itpBondA1 '^\s*[0-9]\+' nextgroup=itpBondA2 skipwhite contained
  syntax match  itpBondA2 '[0-9]\+' nextgroup=itpBondTp,itpConstant skipwhite contained
  syntax match  itpBondTp '[1-4]' nextgroup=itpBondPr,itpConstant skipwhite contained
  syntax match  itpBondPr '[+-]\?[0-9]\+\(\.[0-9]\+\([eE][+-]\?[0-9]\+\)\?\)\?' nextgroup=itpBondPr contained skipwhite

группы определены, теперь расскрасим их командой highlight или сокращенно hi:
Код

 hi def link  itpComment    Comment 
 hi def link  itpGroup    Keyword
 hi def link  itpPreprocessor    Macro
 hi def link  itpConstant    Macro
 
раскраска под ошибку группы itpBonds появится только если пользователь ввел внутри группы лабуду,
поскольку все неошибочные группы получат свои специальные цвета.
Код

 hi def link  itpBonds          ErrorMsg
 
 hi def link  itpBondA1         Directory
 hi def link  itpBondA2         Directory
 hi def link  itpBondTp         Type
 hi def link  itpBondPr         Constant

Вот так.
Получилось следующее:

[ 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

Это сообщение отредактировал(а) comcon1 - 12.2.2007, 12:55


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
pythonwin

В этом форуме предпочтительны вопросы на следующие темы:

  • Конкретные вопросы о конкретном ПО. В таких вопросах желательно привести точные данные о программе: версия программы, версия ОС, версия ядра, и проблему в форме: сделал Х, хотел получить Y, а получил Z.
  • Неконкретные вопросы о выборе ПО
  • Обзоры - как дополнение в ветку Обзоры


  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программное обеспечение под *NIX системы | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.