0
我正在为特定语言编写vim语法高亮文件。对于某些关键字,特定字符将被忽略(,
和-
和_
)。换句话说,这是完全一样的:忽略语法匹配中的特定字符
foo
f_oo
f-o,o
有没有办法使用例如,当我可以忽略这些字符。 syn match
?
我正在为特定语言编写vim语法高亮文件。对于某些关键字,特定字符将被忽略(,
和-
和_
)。换句话说,这是完全一样的:忽略语法匹配中的特定字符
foo
f_oo
f-o,o
有没有办法使用例如,当我可以忽略这些字符。 syn match
?
没有特别的选择;你有一个模式可以选择性地允许每个字符之间的特定字符;例如用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'))
请注意,上面的函数只能处理纯文本,但会破坏包含特殊模式字符的任何模式。您可能需要为这些需求编写更好的功能。
非常感谢 - 使用自定义函数似乎是这里最好的解决方案。 – afl