在尝试为内部语言编写语法文件时,我试图捕获前面带有/
的每一行的第一个字,并将其分配给一个{ {1}}以及每行的第二个字(由hi def link
和/
括起)并将其分配给第二个/
。
语法:
hi def link
我正在尝试将cmo/create/mo1///tri
createpts/brick/xyz/2,2,2/0.,0.,0./1.,1.,1./1,1,1
和cmo
捕获为createpts
,将argOne
和create
捕获为brick
:
argTwo
问题在于它们存在冲突:当两个syn match argOne '^\zs[^\/]\+\ze\/'
syn match argTwo '^[^\/]\+\/\zs[^\/]\+\ze\/'
hi def link argOne Type
hi def link argTwo Statement
语句都存在时,ViM仅捕获sys match
找到的语句。但是在孤立的情况下,当两个argOne
中的一个被注释掉时,syn match
或argOne
将完美无缺。
我怎样才能让这两个陈述相互配合?
答案 0 :(得分:1)
一种解决方案是创建包含的匹配项,定义与前两个参数匹配的argOneTwo
,然后为第一个和第二个匹配项提供匹配项:
syn match argOne '^\zs[^\/]\+\ze' contained
syn match argTwo '\/\zs[^\/]\+\ze\/' contained
syn match argOneTwo '^\zs[^\/]\+\/[^\/]\+\ze\/' contains=argOne,argTwo
hi def link argTwo Statement
hi def link argOne Type
答案 1 :(得分:1)
您可以使用syntax match argOne "^[^/\\]\+" nextgroup=sepOne
syntax match sepOne "/" contained nextgroup=argTwo
syntax match argTwo "[^/\\]\+" contained
构建匹配的语法组序列。这比@hebert的定义包含单个语法组的父组的解决方案更好。
sepOne
请注意,argTwo
和contained
具有nextgroup=...
属性,因此仅在通过import keras
import sklearn
from keras import losses
from sklearn import svm
指示时才匹配它们。没有它,它们将匹配更多的位置。