gpt4 book ai didi

python - Vim 语法文件 - 函数名末尾加引号 [dg 编程语言]

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:15 25 4
gpt4 key购买 nike

我正在尝试为 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 语法突出显示中,看起来 listpythonBuiltin 语法组的一部分。 (有关如何检查的信息,请参阅 :help synID() 下的示例。)所以我尝试了

:syn keyword pythonBuiltin issubclass iter len list locals map max nextgroup=pythonFoo
:syn match pythonFoo /'/ contained

然后是示例文本

a = list' 1 2 3  # [1, 2, 3]
b = list 'a' 'b' 'c'

正确突出显示:list' 被识别为内置函数,后跟 Foo,'a' 被识别为字符串。

这个想法是,在 vim 处理完列出的关键字之一后,我新创建的语法项会被赋予优先级,因此 ' 会被新组吞噬,并且不能作为开始一个字符串。

原则上,您可以使用用户定义的函数执行相同的操作。问题在于提出一个只匹配函数的语法定义。默认的 python 语法文件似乎突出显示函数定义,但不突出显示用法。 (更准确地说,是一个以 defclass@ 开头的函数名称。)

另一种方法是通过在可选的 [bB] 或类似字符之前插入零宽度词开头原子来修改字符串的定义,或者坚持不要在字符串前面通过一个单词字符。仅处理字符串的单引号版本(示例的第一行),这将是

:syn region dgString start=+\%(\w\@<!\|\<[bB]\)'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=dgEscape,dgEscapeError

关于python - Vim 语法文件 - 函数名末尾加引号 [dg 编程语言],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22050729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com