【问题标题】:How to fix a font-lock regex in emacs that is not successfully matching如何修复 emacs 中未成功匹配的字体锁定正则表达式
【发布时间】:2013-03-12 15:10:29
【问题描述】:

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

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

Project 1:
    - Task 1
    - Task 2
    Note about Task2    
Project 2:
    - Task 3
    Note about Task 3
A general note about something

我使用在这里找到的任务纸模式作为基础 (https://github.com/jedthehumanoid/taskpaper.el/blob/master/taskpaper.el)。但是,这种模式是基于空格缩进的, 目前看来,任务纸格式使用制表符来缩进。

(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].*[^:]$ 成功匹配注释行。

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

【问题讨论】:

    标签: regex emacs font-lock


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了!所以我在寻找完全错误的地方,试图修复我的正则表达式 :) 很好,感谢您的帮助。
    【解决方案2】:

    如果 \t 在第三个表达式中,则将空格放在一边,即 [ \t] 表示 [\t] 等。因此,空格和 TAB 的匹配方式相同。高温

    【讨论】:

    • 谢谢,这是一个有用的调整。
    【解决方案3】:

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

    【讨论】:

    • 感谢您的帮助 - 注释行实际上不必以制表符开头,它们可以没有缩进。我将编辑我的问题以包含此类示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多