我想为dg编程语言写一个语法文件。它不是很复杂,而且是从Python派生的,所以我从Python语法文件复制了它。你知道吗
问题是函数名的末尾可以有一个引号:
a = list' 1 2 3 # [1, 2, 3]
很明显,从引号开始,这一行突出显示为一个字符串。 我从Python语法文件中获取的字符串定义如下:
syn region dgString start=+[bB]\='+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=dgEscape,dgEscapeError
syn region dgString start=+[bB]\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=dgEscape,dgEscapeError
syn region dgString start=+[bB]\="""+ end=+"""+ keepend contains=dgEscape,dgEscapeError
syn region dgString start=+[bB]\='''+ end=+'''+ keepend contains=dgEscape,dgEscapeError
syn match dgEscape +\\[abfnrtv'"\\]+ display contained
syn match dgEscape "\\\o\o\=\o\=" display contained
syn match dgEscapeError "\\\o\{,2}[89]" display contained
syn match dgEscape "\\x\x\{2}" display contained
syn match dgEscapeError "\\x\x\=\X" display contained
syn match dgEscape "\\$"
我希望函数名末尾的引号不要突出显示(普通文本)。我怎样才能做到这一点?你知道吗
供参考:
在默认的python语法高亮显示中,
list
似乎是pythonBuiltin
语法组的一部分。(请参见:help synID()
下的示例以了解如何检查)然后是你的示例文本
正确高亮显示:
list'
被识别为后跟Foo的内置项,'a'
被识别为字符串。你知道吗其思想是,在vim处理完列出的关键字之一之后,我新创建的语法项被赋予优先级,因此
'
被新组占用,不能作为字符串的开头。你知道吗原则上,您可以对用户定义的函数执行相同的操作。问题是要产生一个只与函数匹配的语法定义。默认的python语法文件似乎突出显示函数定义,而不是用法。(更准确地说,函数名前面是
def
或class
或@
。)另一种方法是修改字符串的定义,方法是在可选的
[bB]
或类似字符之前插入单词atom的零宽度开头,或者坚持字符串前面不带单词字符。只处理字符串的单引号版本(示例的第一行),这将是相关问题 更多 >
编程相关推荐