Regex 如何修复emacs中未成功匹配的字体锁定正则表达式

Regex 如何修复emacs中未成功匹配的字体锁定正则表达式,regex,emacs,font-lock,Regex,Emacs,Font Lock,我正在尝试在emacs中创建一个正则表达式,以字体锁定任务纸文件中的任务、项目和注释 Taskpaper是一种用于任务管理的基于文本的简单格式,格式如下: Project 1: - Task 1 - Task 2 Note about Task2 Project 2: - Task 3 Note about Task 3 A general note about something 我正在使用我在这里找到的任务纸模式作为基础()。但是,此模式基于

我正在尝试在emacs中创建一个正则表达式,以字体锁定任务纸文件中的任务、项目和注释

Taskpaper是一种用于任务管理的基于文本的简单格式,格式如下:

Project 1:
    - Task 1
    - Task 2
    Note about Task2    
Project 2:
    - Task 3
    Note about Task 3
A general note about something
我正在使用我在这里找到的任务纸模式作为基础()。但是,此模式基于空间缩进, 目前看来,任务纸格式使用制表符缩进

(setq font-lock-defaults 
'(("^.*@done.*$" . font-lock-comment-face)
  ("^.*:$" . font-lock-function-name-face)
  ("^[\t]*[^-\t].*[^:]$" font-lock-comment-face)
  ("@.*" . font-lock-variable-name-face)))
目前,第三个正则表达式(应该是字体锁定注释面中的注释)不起作用,我不明白为什么。注释是所有带有任何缩进的行,这些行不以
-
开头,也不以
结尾:

奇怪的是,在正则表达式生成器中,正则表达式
^[\t]*[^-\t].[^::][$
成功地匹配了notes行


我已尝试按照其他一些问题中的建议对\t字符进行双转义(如\\t),但这似乎没有什么区别

部分问题可能与*字符的使用有关。因为它匹配0次或更多次,所以实际上并不要求行以制表符开头。

第三条规则与其他规则不同之处在于,其他规则使用点对,即
(xxx.yyy)
,而第三条规则使用列表表示法,即
(xxx-yyy)


也可以使用列表表示法,但是您必须提供要高亮显示的子表达式,如
(regexp 0 font lock comment face)

中的第3个表达式中有一个\t,请在旁边留出一个空格,即[\t]表示[\t]等。因此,空格与制表符的匹配方式相同。HTH

谢谢您的帮助-注释行实际上不必以选项卡开头,它们可以没有缩进。我将编辑我的问题,以包含这种类型的示例。太棒了!所以我找错了地方,试图修复我的正则表达式:)发现得很好&谢谢你的帮助。谢谢,这是一个有用的调整。