我决定进一步了解 vim 及其语法高亮。使用其他人的示例,我正在为 Markdown 创建自己的语法文件。我见过mkd.vim也有这个问题。我的问题是在列表项和代码块突出显示之间。
代码块定义:
- 第一行为空白
- 第二行以至少 4 个空格或 1 个制表符开头
- 块以空行结束
例子:
Regular text
this is code, monospaced and left untouched by markdown
another line of code
Regular Text
我的代码块的 Vim 语法:
syn match mkdCodeBlock /\(\s\{4,}\|\t\{1,}\).*\n/ contained nextgroup=mkdCodeBlock
hi link mkdCodeBlock comment
无序列表项定义:
- 第一行为空白
- 第二行以 [-+*] 开头,后跟一个空格
- 列表以空行结束,然后是正常(非列表)行
- 在行项目之间可以添加任意数量的空行
- 通过缩进指定子列表(4 个空格或 1 个制表符)
- 列表项后的一行普通文本作为该列表项的延续包含在内
例子:
Regular text
- item 1
- sub item 1
- sub item 2
- item 2
this is part of item 2
so is this
- item 3, still in the same list
- sub item 1
- sub item 2
Regular text, list ends above
我的无序列表项定义的 Vim 语法(我只突出显示[-+*]
):
syn region mkdListItem start=/\s*[-*+]\s\+/ matchgroup=pdcListText end=".*" contained nextgroup=mkdListItem,mkdListSkipNL contains=@Spell skipnl
syn match mkdListSkipNL /\s*\n/ contained nextgroup=mkdListItem,mkdListSkipNL skipnl
hi link mkdListItem operator
我无法使用列表的最后两条规则和代码块来突出显示。
这是一个打破我的语法高亮的例子:
Regular text
- Item 1
- Item 2
part of item 2
- these 2 line should be highlighted as a list item
- but they are highlighted as a code block
我目前无法弄清楚如何让突出显示以我想要的方式工作
忘记添加下面列出的两个规则中使用的“全局”语法规则。这是为了确保它们以空行开头。
syn match mkdBlankLine /^\s*\n/ nextgroup=mkdCodeBlock,mkdListItem transparent
另注:我应该更清楚。在我的语法文件中,列表规则出现在块引用规则之前