如何突出显示触发 syn-containedin 的一行中的整个文本?

如何突出显示触发 syn-containedin 的一行中的整个文本?

假设我有这些 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

首先,您的“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

相关内容