用于突出显示 Lisp 函数调用中的函数引用的语法高亮规则
Syntax highlighting rule to highlight the function reference in a Lisp function call
我正在为 Clojure 或另一个 Lisp 在 Vim 中编写语法高亮规则,其中 (fn ...)
主要用于函数调用。我坚持突出显示函数调用的第一个单词,即函数引用。以下是我所在位置的演示:
如您所见,函数调用中的第一个单词((str a b c d)
中的str
)被突出显示。但是,文字列表中的第一个元素('(1 2 3)
中的 1
)也被突出显示,这是无意的。需要强调的是,两个文字列表都突出显示了它们的第一个元素,这是错误的。
下面是执行此突出显示的语法规则:
syn match lispFunc "'\{0}\((\)\@<=\<.\{-1,}\>?\{0,1}"
以下是我对这条规则的理解:
'\{0}
:字符'
必须匹配0次;
\((\)\@<=
:字符(
必须匹配,但不能被捕获;
\<.\{-1,}\>
:匹配一个词(\<
和\>
代表一个词的开头和结尾);
?\{0,1}
:如果单词末尾有一个?
字符,则认为它是单词的一部分:例如图片中 list?
中突出显示的 ?
。
我已经尝试了很多,但我似乎无法让前两个子规则一起工作。
您可以使用
syn match lispFunc "\(\('\)\@<!(\)\@<=\<.\{-1,}\>?\{0,1}"
这里,\(\('\)\@<!(\)\@<=
是一个正向后视,只有在它前面没有 '
时才匹配 (
。此条件设置为 \('\)\@<!
negative lookbehind inside of positive lookbehind.
我正在为 Clojure 或另一个 Lisp 在 Vim 中编写语法高亮规则,其中 (fn ...)
主要用于函数调用。我坚持突出显示函数调用的第一个单词,即函数引用。以下是我所在位置的演示:
如您所见,函数调用中的第一个单词((str a b c d)
中的str
)被突出显示。但是,文字列表中的第一个元素('(1 2 3)
中的 1
)也被突出显示,这是无意的。需要强调的是,两个文字列表都突出显示了它们的第一个元素,这是错误的。
下面是执行此突出显示的语法规则:
syn match lispFunc "'\{0}\((\)\@<=\<.\{-1,}\>?\{0,1}"
以下是我对这条规则的理解:
'\{0}
:字符'
必须匹配0次;\((\)\@<=
:字符(
必须匹配,但不能被捕获;\<.\{-1,}\>
:匹配一个词(\<
和\>
代表一个词的开头和结尾);?\{0,1}
:如果单词末尾有一个?
字符,则认为它是单词的一部分:例如图片中list?
中突出显示的?
。
我已经尝试了很多,但我似乎无法让前两个子规则一起工作。
您可以使用
syn match lispFunc "\(\('\)\@<!(\)\@<=\<.\{-1,}\>?\{0,1}"
这里,\(\('\)\@<!(\)\@<=
是一个正向后视,只有在它前面没有 '
时才匹配 (
。此条件设置为 \('\)\@<!
negative lookbehind inside of positive lookbehind.