1

Предположим, у меня есть следующие определения Vim:

syn match tasktag "\(\s\)\@<=@[a-zA-Z0-9_]\+"
syn match taskdone "\<[Dd]one\>" containedin=tasktag

Как мне указать taskdone чтобы выделить весь текст в строке? Я посмотрел :h syn-pattern-offset а также :h syn-region.

1 ответ1

0

Во-первых, ваше совпадение с "TaskTag" не допускает пробелов или других "разделителей слов", однако ваше соответствие "TaskDone" требует, чтобы "Done" было дискретным словом из-за ваших \<и \> атомов границы слова.

Во-вторых, ваше совпадение "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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .