我正在编写用于特定语言的vim语法高亮显示文件。对于某些关键字,会忽略特定字符(,
和-
以及_
)。换句话说,这些完全相同:
foo
f_oo
f-o,o
有没有办法在使用eg时忽略这些字符。 syn match
?
答案 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'))
请注意,上面的函数仅适用于普通单词,但它会破坏包含特殊模式字符的任何模式。您可能必须为这些需求编写更好的功能。