Предположим, что у меня есть эти определения Vim:
syn match tasktag "\(\s\)\@<=@[a-zA-Z0-9_]\+"
syn match taskdone "\<[Dd]one\>" containedin=tasktag
Как я указываю taskdone
выделить весь текст в строке? Я смотрел на :h syn-pattern-offset
а также :h syn-region
.
Во-первых, Ваше соответствие "tasktag" не позволяет пробелы или других "ограничителей слова", все же Ваше соответствие "taskdone" требует "сделанный" быть дискретным словом из-за Вашего \<и \> граничные атомы слова.
Во-вторых, Ваше соответствие "taskdone" записано, чтобы только выделить слово "Done".
Принятие меня правильно понимает то, что Вы хотите, я изменил Ваши два соответствия:
syn match tasktag "\(\s\)\@<=@[a-zA-Z0-9_ ]\+"
syn match taskdone "@.*\<[Dd]one\>.*" containedin=tasktag
Если Вы поэтому уже не сделали, необходимо будет указать выделение для двух соответствий. Например:
highlight link tasktag TODO
highlight link taskdone Statement