如何解决所有以冒号结尾但不以破折号开头的行的Syn Match Regex表达式
|| 我有以下格式的文件: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].*:$\"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。