vim 自定义语法高亮

标签 vim syntax-highlighting vim-syntax-highlighting

我想在 vim 中为任务列表创建自定义语法突出显示。

任务项以连字符开头。两种类型的任务项目是相关的:(a) 没有“@done”标签的项目。 (b) 带有@done 标签的项目。 (a) 和 (b) 需要以不同方式突出显示。

我正在使用 taskpaper ,效果很好,但问题是,我试图让它适用于跨越多行的任务项。例如:

- Regular item (works)
- Completed item @done (works)
- Multi-line item. This item continues on to 
  the line below. (doesn't work)
- Multi-line completed item. This item continues
  on to the line below. (doesn't work). @done

突出显示文件位于 taskpaper适用于前两个,但不适用于后两个。作为一种解决方法,我在上面的最后一个案例中尝试了这个:

syn region multLineDoneItem start="{" end="}" fold
HiLink multLineDoneItem NonText

但是现在,我不得不像这样用大括号标记多行完成的项目:

- {Multi-line completed item. This item continues
  on to the line below. (workaround works).}

我已经搜索过 stackexchange 和其他地方。我将不胜感激任何帮助! :)

最佳答案

您可以尝试在语法区域的末尾使用 \ze 正则表达式原子。这将允许您匹配所有内容,但不包括下一个任务。我没有看过你是如何进行匹配的,但这样的事情可能会奏效。

syn region muiltLineItem     start="^-" end="\(\s*\n)\+\ze^-" fold    
syn region multiLineDoneItem start="^-" end="@done\s*\n\(\s*\n\)*\ze^-" fold
HiLink multiLineItem Normal
HiLink multiLineDoneItem NonText

我根本没有测试过这个,但我认为它或类似的东西应该可以工作。如果您希望考虑缩进,\z 正则表达式原子将允许您保持具有相同缩进的匹配行。

更新:

试试这个:

syn match multilineItem "^-\_.\{-}\ze\(\n-\|\%$\)" fold
syn match multilineDoneItem "^-\(\%(\_^-\)\@!\_.\)\{-}@done\s*\n\ze" fold
command -nargs=+ HiLink highlight default link <args>
HiLink multilineItem Normal
HiLink multilineDoneItem NonText
delcommand HiLink

哦,这也适用于所有四种情况,而不仅仅是多行项目。

关于vim 自定义语法高亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5445158/

相关文章:

vim - 使用 Quickfix 窗口处理 Cscope 结果

vim - 到字母,然后删除直到字母,然后重复

vim - 如何从 vim 重命名文件名?

regex - 在语法高亮规则中组合 vim 先行和后行约束

c++ - 范围与 ctags 在功能方面

wolfram-mathematica - Mathematica 中的语法着色

visual-studio-code - VSCode中具有语义突出显示的语言服务器

syntax-highlighting - 嵌套在 yaml 中的 html 的 VIM 语法高亮显示

vim - 在 vim 中打开文本文件时自动突出显示字典单词

vim - 语法在 Vim 中突出显示透明区域的开始和结束