问题描述
||
我有以下格式的文件:
Abc Task Header:
- task detail a
- task detail b
Def Task Header:
- task detail c:
- task sub detail c1
- task sub detail c2
- task detail d
我想让我的语法文件与以下行匹配(并突出显示):
Abc任务标题:
Def任务标题:
我不希望以下行匹配并突出显示:
任务详细信息c:
注意事项:
所有任务标头均以字母开头,并以冒号结尾。
除了上面列出的名称以外,任务标头没有任何一致的命名约定(因此名称中没有Task Header
...这只是一个示例名称)
如果任务详细信息包含子任务详细信息,则可能以冒号结尾。
任务详细信息始终以-
(破折号)字符开头。
任务详细信息不缩进。使用列表时,这是StackOverflow编辑器的副作用。
文件中显示的所有项目符号实际上是“ 2”(破折号)。这也是StackOverflow编辑器的副作用。
我已经尝试了一些方法,但是它们似乎无法正常工作。
例如
syn match myTask \"[A-Z]*:$\"
这导致仅突出显示任务标题的最后一个单词以及冒号。它还突出显示了带有冒号的所有任务详细信息。
syn match myTask \"[^-].*[A-Z].*:$\"
这样会突出显示整个任务标题和冒号(不需要的行为),但是会突出显示包含冒号的所有任务详细信息。它不会突出显示破折号,但会突出显示其余部分。
有任何想法吗?
谢谢
更新:
好吧,比利·穆恩(Billy Moon)的例子很直接,涵盖了永远都是正确的一种情况。但是,还有其他一些答案也很有效(感谢YGomez)。我将在此基础上添加一些样本,或者从其他答案中汲取灵感后设法得到一些样本(以防将来有人在寻找解决类似问题的方法);
syn match myTask \"^[^-].*:$\"
syn match myTask \"[A-Z]*:$\"
syn match myTask \"^\\s*[A-Z].*:$\"
// These two are equivalent.
syn match myTask \"^\\s*[A-Za-Z].*:$\"
syn match myTask \"^\\s*\\c\\w.*:$\"
解决方法
尝试这个:
syn match myTask \"^[^-].*:$\"
, 你可以试试:
syn match myTask \"^[A-Z].*:$\"
您说它们都是以字母开头的,所以与其检查它是否不是以-
开头,还不如检查更强的条件以字母开头(在上述情况下为大写字母)。
编辑:更多可能的情况:
如果可以在其前面有空格:
syn match myTask \"^\\s*[A-Z].*:$\"
如果也可以是小写:
syn match myTask \"^\\s*[A-Za-z].*:$\"