1

我正在尝试在 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)))

目前,第三个正则表达式(应该在评论面上锁定注释)不起作用,我不明白为什么。注释是所有不以 a 开头-且不以 a 结尾的任何缩进的行:

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

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

4

3 回答 3

2

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

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

于 2013-03-12T15:29:51.167 回答
1

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

于 2013-03-12T18:19:50.690 回答
0

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

于 2013-03-12T15:14:45.210 回答