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