语法突出显示规则,以突出显示Lisp函数调用中的函数引用

时间:2019-05-21 13:36:12

标签: regex vim clojure lisp syntax-highlighting

我正在Vim中为Clojure或另一个Lisp编写语法高亮规则,其中(fn ...)主要发生在函数调用中。我一直停留在突出显示函数调用的第一个单词,即函数引用。以下是我所在位置的演示:

Wrong lisp syntax highlighting

如您所见,函数调用中的第一个单词(str中的(str a b c d))突出显示。但是,文字列表中的第一个元素(1中的'(1 2 3))也会突出显示,这是无意的。要强调的是,两个文字列表都突出显示了它们的第一个元素,这是错误的。

下面是突出显示该内容的语法规则:

syn match lispFunc "'\{0}\((\)\@<=\<.\{-1,}\>?\{0,1}"

这是我对这个规则的理解:

  • '\{0}:字符'必须匹配0次;
  • \((\)\@<=:字符(必须匹配,但不能被捕获;
  • \<.\{-1,}\>:它匹配一个单词(\<\>代表单词的开头和结尾);
  • ?\{0,1}:如果单词的末尾有?字符,则应将其视为单词的一部分:例如图片?中突出显示的list?

我已经做了很多实验,但是我似乎无法使前两个子规则协同工作。

1 个答案:

答案 0 :(得分:2)

您可以使用

syn match lispFunc "\(\('\)\@<!(\)\@<=\<.\{-1,}\>?\{0,1}"

在这里,\(\('\)\@<!(\)\@<=是一个积极的向后看,仅在(之前没有匹配'。此条件通过正向后向内的\('\)\@<! 负向向后设置。