1

我已经问过一个关于语法高亮的问题,但这似乎(对我来说)有所不同,我在 Stackoverflow 中找不到答案。

1) 假设我想在 Vim 中建立一个 Todo 列表。此待办事项列表应该有任务 + 3 个不同突出显示的“区域”:

  • 任务(例如洗车),总是在开始,应该保持简单的非高亮文本
  • 必须做那件事的人——我自己——前面是@。我希望它以(例如)绿色突出显示
  • 任务的类别 - 这里是家庭 - 以§开头。我希望它是黄色的
  • 任务的重要性——这里稍后——,前面是我要红色的#。

因此结果应该是(一行):

洗车@myself(绿色)§Household(黄色)#Later(红色)

我试图定义第一个以@开头,以§结尾的区域,第二个以§开头并以#结尾的区域,以及第三个以#开头并以$结尾的区域。

:syntax region xPers start ='@' end='§'
hi xPers ctermfg=DarkGreen
:syntax region xProject start ='§' end='#'
hi xProject ctermfg=DarkYellow
:syntax region xImportance start ='#' end='$'
hi xImportance ctermfg=DarkRed

无济于事......任务本身之后的所有指示,以@开头,都以绿色突出显示。

我的(不可原谅的)错误是什么?

2)为了让事情更复杂,我可能会乱写任务,写:

洗车@myself(绿色)#Later(红色)§Household(黄色)

应该如何定义语法以考虑到这种缺乏纪律性并保持颜色正确?

提前致谢

4

1 回答 1

1

您可能想查看Todo.txt和 Todo.txt 的 vim语法文件。但是,根据您的问题,您似乎想以空格而不是符号结尾。所以你可以这样做:

syntax region xPers start ='@' end=' '
hi xPers ctermfg=DarkGreen
syntax region xProject start ='§' end=' '
hi xProject ctermfg=DarkYellow
syntax region xImportance start ='#' end=' '
hi xImportance ctermfg=DarkRed

但是,这不会说明一行的结尾。因此,您可以在该行的末尾放置一个“或”语句,如下所示:

syntax region xPers start ='@' end=' \|$'
hi xPers ctermfg=DarkGreen
syntax region xProject start ='§' end=' \|$'
hi xProject ctermfg=DarkYellow
syntax region xImportance start ='#' end=' \|$'
hi xImportance ctermfg=DarkRed
于 2012-09-07T20:55:07.627 回答