2015-12-07 10 views
5

mam zdefiniowanej sqlVariable i sqlString w moim pliku składni jakoVim podświetlanie składni - wyklucza konkretnego tekstu z wzorem

syn match sqlVariable ":[a-z][a-z0-9_#$]*" 
syn region sqlString start=+'+ end=+'+ contains=sqlVariable 

Struny mogą zawierać sqlVariable w celu podkreślenia wiąże ciągu (plus kilka innych wariantów cytowania.) kod dynamiczny, taki jak :b1 w 'select a from b where c = :b1'. (To jest dla Oracle btw.)

Wszystko działa ładnie - z wyjątkiem specyficznego irytującego przypadku masek formatu daty zawierających dwukropki, np.

to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') 

: MI i: SS są wyróżnione jako zmienne, ponieważ oczywiście pasują do mojego wzoru.

Czy jest sposób na wykonanie: MI i: SS nie pasuje do sqlVariable w ciągu znaków w cudzysłowie? (Myślę, że tylko te dwa przypadki by to zrobiły).

+0

Możesz spróbować dodać odliczanie na końcu wzorca: '\ (([^ '] |' [^ '] *') * $ \) \ @ =' –

+0

Umm, może gdybym zrozumiał jak użyć tego przykładu w moim pliku składni ... –

+0

Próbowałem ': [az] [a-z0-9 _ # $] * \ (\ ([^"] \ | "[^"] * "\) * \ $ \) \ @ = 'ale bez powodzenia :( –

Odpowiedz

1

robi tę pomoc?

syn match sqlVariable ":[a-z][a-z0-9_#$]*\ze\(\s\|'$\)" 

Będzie zgadzają się :foo jeśli następuje białej powierzchni lub ' następnie EOL ($).

Więc :a1 :b1 and :c1 zostaną dopasowane:

'select * from foo where a= :a1 and b=: b1 and c = :c1' 

ale nie pasuje w:

to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') 

Nadzieję, że to pomaga.

Jeśli nie, możesz ponownie przemyśleć definicję region.

+0

Schludny. Myślę, że to działa. –

Powiązane problemy