我正在Vim中为Clojure或另一个Lisp编写语法高亮规则,其中(fn ...)
主要发生在函数调用中。我一直停留在突出显示函数调用的第一个单词,即函数引用。以下是我所在位置的演示:
如您所见,函数调用中的第一个单词(str
中的(str a b c d)
)突出显示。但是,文字列表中的第一个元素(1
中的'(1 2 3)
)也会突出显示,这是无意的。要强调的是,两个文字列表都突出显示了它们的第一个元素,这是错误的。
下面是突出显示该内容的语法规则:
syn match lispFunc "'\{0}\((\)\@<=\<.\{-1,}\>?\{0,1}"
这是我对这个规则的理解:
'\{0}
:字符'
必须匹配0次; \((\)\@<=
:字符(
必须匹配,但不能被捕获; \<.\{-1,}\>
:它匹配一个单词(\<
和\>
代表单词的开头和结尾); ?\{0,1}
:如果单词的末尾有?
字符,则应将其视为单词的一部分:例如图片?
中突出显示的list?
。我已经做了很多实验,但是我似乎无法使前两个子规则协同工作。
答案 0 :(得分:2)
您可以使用
syn match lispFunc "\(\('\)\@<!(\)\@<=\<.\{-1,}\>?\{0,1}"
在这里,\(\('\)\@<!(\)\@<=
是一个积极的向后看,仅在(
之前没有匹配'
。此条件通过正向后向内的\('\)\@<!
负向向后设置。