это мой первый пост, поэтому будьте осторожны, пожалуйста!
Итак, у меня есть входные файлы (.in) для собственной программы. Синтаксис следующий (например):
$set (code) $end
$run
(code)
$end
$cmt this is a comment
$cmt this is
a block comment
$end
Моя ситуация такова, что я хочу, чтобы все $set
и $run
были красными, а их соответствующие $end
тоже красными. Все промежуточное должно быть номинального цвета (серого).
Я просто использую
syntax match inCMD "\$SET"
для этого, и он отлично работает.
Когда у меня возникает проблема, я хочу, чтобы "$CMT"
был желтым, поэтому я использую
syntax match inCMT "/^\$CMT.*$"
Особенность в том, что $CMT
не обязательно должен иметь $END
. Итак, если нет $END
(или что оно находится в конце той же строки, что и $CMT
, я хочу, чтобы строка была желтой, а строка после - за пределами области синтаксиса. Однако, если я хочу чтобы сделать комментарий к блоку и что $END
соответствует этому $CMT
, все внутри должно быть желтым.
Я придумал
синтаксических команд
, но у меня есть проблема в строке 14-17 2-го изображения: пример синтаксиса .
Если $set
находится непосредственно под $cmt
, текст внутри набора $ будет желтым, а не просто белым. Другая проблема в том, что $end
, соответствующий $set
, белый, а не красный.
Как я могу решить эту проблему?
Большое спасибо!
редактировать: файл синтаксиса:
syntax case ignore
syntax match inCMT /^\$CMT.*$/
syntax match inCMD "\$SET"
syntax match inCMD "\$RUN"
sy region inCMT matchgroup=inCMT start= /^\$CMT.*$/ end=/\(^\$end\)\|\(^\s*$\)/ contains=inCMD
:sy region inCMD matchgroup=inCMD start= /\v($(SET))/ end=/\(^\$end\)\|\(^\s*$\)/ contained
:hi inCMT ctermfg=yellow
:hi inCMD ctermfg=red
Входной файл:
$cmt eoipwejf
iowejwed
$end
$set
weoifjwef
$end
$set
$end
$cmt
$set ewdiw
efef
$end
$set
effef
$end
$cmt
efoiwef
$end
$cmt
wd
$END
wd
$set
deiuwf = ewoiw
ewofoi we
$end
$cmt fefef
$cmt
efwef
$end
$set
$set
$set
$cmt ewfoief
wdwwd
$end
$set efopwef
fwfewf
eiojf
$end
$set
ere
wd
$cmt
$end
effe
$cmt
wdeoiqwd
$end
edfeef
$run
goto
$cmt
wdqwd
$end
2-е редактирование: что я хочу в качестве конечного результата (цвета в скобки) (y) желтый (r) красный (n) номинальный
Block comment:
$cmt foo (y)
bar (y)
$end (y)
$cmt (y)
foo (y)
bar (y)
$end (y)
$cmt (y)
foo (y)
bar(y)
$end (y)
Line comment:
$cmt (y)
$set (r) foo = bar (n) $end (r)
$cmt foo bar (y)
$set (r)
foo = bar (n)
$end (r)
Я думаю, что это все случаи.