2016-04-11 22 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