Как выделить список слов в vim - PullRequest
1 голос
/ 26 октября 2011

У меня есть комнада "com", которая выводит список слов на стандартный вывод

w1
w2
w3
...

Мне нужна функция vim, которая может выполнить мою команду, прочитать список и выделить все слова.

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Я бы предложил использовать один вызов для 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
2 голосов
/ 26 октября 2011

Это пример, который работал для меня:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...