我有一个命令“com”,它在stdout上生成单词列表
w1
w2
w3
...
我需要一个vim函数,它可以执行我的命令,读取列表并突出显示所有单词。
答案 0 :(得分:2)
这是一个对我有用的例子:
for word in split(system("cat words.txt"), "\n")
call matchadd("Search", word)
endfor
这可以包含在一个函数中(用com
代替程序调用):
fun MakeMatches()
for word in split(system("com"), "\n")
call matchadd("Search", word)
endfor
endfun
答案 1 :(得分:2)
我建议使用matchadd
的单个调用,而不是添加多个匹配,因为它们应该更慢,并且在第二次调用函数时也要注意这种情况:
function DelMatches()
if exists('s:matchnr')
try
call matchdelete(s:matchnr)
catch /\V\^Vim(call):E803:/
" Ignore `ID not found' error
endtry
unlet s:matchnr
endif
endfunction
function MakeMatches()
call DelMatches()
let s:matchnr=matchadd("Search", '\V\<\%('.join(map(split(system("com"), "\n"), 'escape(v:val, "\\")'), '\|').'\)\>')
endfunction