如何突出显示vim中的单词列表

时间:2011-10-26 10:14:46

标签: vim

我有一个命令“com”,它在stdout上生成单词列表

w1
w2
w3
...

我需要一个vim函数,它可以执行我的命令,读取列表并突出显示所有单词。

2 个答案:

答案 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