2015-12-07 5 views
5

I sqlVariable und sqlString in meiner Syntax-Datei alsVim Syntax-Hervorhebung - ausschließen bestimmten Text aus einem Muster

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

definiert haben Strings sqlVariable um bindet hervorzuheben enthalten kann innerhalb (plus einige andere zitieren Variationen.) dynamischer Code wie der :b1 in 'select a from b where c = :b1'. (Dies ist für Oracle btw.)

Das alles funktioniert gut - mit Ausnahme der spezifischen ärgerlichen Fall von Datumsformatmasken mit Doppelpunkten, z.

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

: MI und: SS sind als Variablen markiert, weil sie natürlich zu meinem Muster passen.

Gibt es eine Möglichkeit zu machen: MI und: SS stimmen nicht sqlVariable innerhalb einer Zeichenfolge in Anführungszeichen? (Ich denke, nur diese beiden Fälle würden es tun.)

+0

Sie könnten versuchen, ein Lookahead am Ende des Musters hinzuzufügen: '\ (([^ '] |' [^ '] *') * $ \) \ @ =' –

+0

Umm, ich könnte, wenn ich das verstanden hätte um dieses Beispiel in meiner Syntaxdatei zu verwenden ... –

+0

Ich habe versucht ': [az] [a-z0-9 _ # $] * \ (\ ([^"] \ | "[^"] * "\) * \ $ \) \ @ = 'aber kein Glück :( –

Antwort

1

hilft das?

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

Es wird für :foo wenn sie befolgt werden durch einen weißen Raum oder eine ' dann der EOL ($) entspricht.

So :a1 :b1 and :c1 wird abgestimmt:

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

aber keine Übereinstimmung in:

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

Hoffe, es hilft.

Wenn nicht, können Sie vielleicht über die region Definition nachdenken.

+0

Ordentlich. Ich denke, das tut es. Danke! –

Verwandte Themen