我正在为Clojure或另一种Lisp编写一个语法来突出显示Vim中的规则,在这种语言中,(fn ...)
主要出现在函数调用中。我只想突出显示函数调用的第一个单词,即函数引用。下面是我所处位置的演示:
如您所见,函数调用中的第一个单词((str a b c d)
中的str
)被突出显示。但是,文字列表中的第一个元素('(1 2 3)
中的1
)也会突出显示,这是无意的。需要强调的是,两个文字列表都突出显示了它们的第一个元素,这是错误的。
下面是执行此突出显示的语法规则:
syn match lispFunc "'\{0}\((\)\@<=\<.\{-1,}\>?\{0,1}"
下面是我对这条规则的理解:
'\{0}
:字符必须与0匹配,但不能与一个单词匹配( '
和captured;\<.\{-1,}\>
:表示word);?\{0,1}
:的开始和结束如果单词末尾有?
字符,则认为它是单词的一部分:例如,图片中突出显示的?
in list?
。我已经做了相当多的实验,但我似乎不能让前两个子规则一起工作。
发布于 2019-05-22 06:29:41
您可以使用
syn match lispFunc "\(\('\)\@<!(\)\@<=\<.\{-1,}\>?\{0,1}"
在这里,\(\('\)\@<!(\)\@<=
是一个正向回溯,仅当它前面没有'
时才匹配(
。在正后视中使用\('\)\@<!
负后视来设置此条件。
https://stackoverflow.com/questions/56239544
复制相似问题