Vim语法区域有序地或无序地相互继承

Vim语法区域有序地或无序地相互继承,vim,syntax-highlighting,vim-syntax-highlighting,Vim,Syntax Highlighting,Vim Syntax Highlighting,我已经问了一个关于语法突出显示的问题,但是(对我来说)这似乎是不同的,我在Stackoverflow中找不到答案 1) 假设我想在Vim中构建一个待办事项列表。此待办事项列表应以不同方式突出显示任务+3“区域”: 任务(如洗车)始终在开始时,应保持纯文本,不突出显示 必须做那件事的人——我自己——前面有@。我希望它以绿色突出显示 任务的类别-此处为家庭-前面有§。我想要黄色的 这项任务的重要性——稍后在这里——前面加上#,我想用红色表示 因此,结果应为(在一行中): 自己洗车(绿色)§家用(

我已经问了一个关于语法突出显示的问题,但是(对我来说)这似乎是不同的,我在Stackoverflow中找不到答案

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

  • 任务(如洗车)始终在开始时,应保持纯文本,不突出显示
  • 必须做那件事的人——我自己——前面有@。我希望它以绿色突出显示
  • 任务的类别-此处为家庭-前面有§。我想要黄色的
  • 这项任务的重要性——稍后在这里——前面加上#,我想用红色表示
因此,结果应为(在一行中):

自己洗车(绿色)§家用(黄色)#以后洗车(红色)

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

: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) 为了让事情变得更复杂,我可能会把任务杂乱无章地写下来,然后写:

自己洗车(绿色)#以后洗车(红色)§家用(黄色)

如何定义语法来考虑这种缺乏纪律性的情况,并保持正确的颜色


提前感谢

您可能需要查看和查看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

您可能需要查看和查看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

我不会撒谎,我对此一无所知,但我会从一些常规调试技术开始:如果切换颜色会发生什么?(即您提供的颜色都有效)如果您切换区域顺序会发生什么情况?(即“结束”标记是否正常工作)如果切换符号会发生什么情况?(那个可笑的角色会引起任何问题吗?)我做了所有这些:第一个符号(@、#或§)定义了颜色。顺便说一下,§的意思是段落…啊,很高兴知道哈哈谢谢!好吧,如果你让我知道我应该把这段代码放在哪里(linux/unix新手),我有一个RHEL putty会话,可以玩几分钟看看我不会说谎,我对此一无所知,但我会从一些一般的调试技术开始:如果你切换颜色会发生什么?(即您提供的颜色都有效)如果您切换区域顺序会发生什么情况?(即“结束”标记是否正常工作)如果切换符号会发生什么情况?(那个可笑的角色会引起任何问题吗?)我做了所有这些:第一个符号(@、#或§)定义了颜色。顺便说一下,§的意思是段落…啊,很高兴知道哈哈谢谢!好吧,如果你让我知道我应该把这段代码放在哪里(linux/unix新手),我有一个RHEL putty会话,可以玩几分钟看看。谢谢,它工作得很好。我查看了Todo.txt的语法文件,但乍一看,对于我的需求(以及我在Vim中的水平)来说,它似乎有点过头了。无论如何,我以后会仔细看看的。再次感谢。谢谢,它工作得很好。我查看了Todo.txt的语法文件,但乍一看,对于我的需求(以及我在Vim中的水平)来说,它似乎有点过头了。无论如何,我以后会仔细看看的。再次感谢。