忽略语法匹配

时间:2016-04-11 16:16:50

标签: vim syntax-highlighting vim-syntax-highlighting

我正在编写用于特定语言的vim语法高亮显示文件。对于某些关键字,会忽略特定字符(,-以及_)。换句话说,这些完全相同:

foo f_oo f-o,o

有没有办法在使用eg时忽略这些字符。 syn match

1 个答案:

答案 0 :(得分: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'))

请注意,上面的函数仅适用于普通单词,但它会破坏包含特殊模式字符的任何模式。您可能必须为这些需求编写更好的功能。