2016-04-11 8 views
0

Ich schreibe eine vim Syntaxhervorhebung für eine bestimmte Sprache. Bei einigen Schlüsselwörtern werden bestimmte Zeichen ignoriert (, und - und _). Mit anderen Worten, diese sind genau die gleichen:Ignoriere bestimmte Zeichen in der Syntaxabgleichung

foof_oof-o,o

Gibt es eine Weise, die ich diese Zeichen ignorieren kann, wenn zB mit. syn match?

Antwort

1

Es gibt keine spezielle Option dafür; Sie haben ein Muster, das optional die spezifischen Zeichen zwischen JEDEM Zeichen erlaubt; Beispiel mit foo:

f[,_-]*o[,_-]*o 

anzumerken, dass - am Ende des [] Block platziert (siehe :h /[]) werden muss.

Wie anspruchsvoll ist, zu schreiben, können Sie eine Funktion erstellen, um es für Sie:

func! CreatePattern(word) 
    let l:s = '' 
    let l:first = 1 
    for i in range(len(a:word)) 
     if !l:first 
      let l:s .= '[,_-]*' 
     else 
      let l:first = 0 
     endif 
     let l:s .= a:word[i] 
    endfor 
    return l:s 
endf 

Danach haben wir:

:echo CreatePattern('bar') 
b[,_-]*a[,_-]*r 

Dann Sie :syn match mit der Verwendung können Hilfe :execute:

:exe 'syn match MyHighlightGroup /'.CreatePattern('foo').'/' 

oder mit matchadd() :

:call matchadd('MyHighlightGroup', CreatePattern('foo')) 

Bitte beachten Sie, dass die Funktion oben nur mit einfachen Worten arbeiten, aber es wird jedes Muster bricht mit speziellen Mustern Zeichen enthält. Sie müssen möglicherweise eine bessere Funktion für solche Bedürfnisse schreiben.

+0

Vielen Dank - die Verwendung einer benutzerdefinierten Funktion scheint hier die beste Lösung zu sein. – afl