2016-04-11 25 views
0

我正在爲特定語言編寫vim語法高亮文件。對於某些關鍵字,特定字符將被忽略(,-_)。換句話說,這是完全一樣的:忽略語法匹配中的特定字符

foof_oof-o,o

有沒有辦法使用例如,當我可以忽略這些字符。 syn match

回答

1

沒有特別的選擇;你有一個模式可以選擇性地允許每個字符之間的特定字符;例如用foo

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

注意-具有被放置在[]塊(參見:h /[])的端部。

因爲它講究寫,你可以創建一個功能,使之成爲你:

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 

在此之後,我們有:

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

然後,您可以使用:syn match與的:execute幫助:

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

或使用matchadd()

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

請注意,上面的函數只能處理純文本,但會破壞包含特殊模式字符的任何模式。您可能需要爲這些需求編寫更好的功能。

+0

非常感謝 - 使用自定義函數似乎是這裏最好的解決方案。 – afl

相關問題