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

发布于 2024-12-11 20:33:47 字数 120 浏览 0 评论 0原文

我有一个commnad“com”女巫在标准输出上生成单词列表

w1
w2
w3
...

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

I have a commnad "com" witch produces list of words on stdout

w1
w2
w3
...

I need a vim function, that can execute my command, read the list and highlight all words.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

她比我温柔 2024-12-18 20:33:48

我建议使用对 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

I would suggest use a single call to matchadd rather then add multiple matches as they should be slower and also take care about the situation when you call function for the second time:

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
追星践月 2024-12-18 20:33:47

这是一个对我有用的示例:

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

This is an example which worked for me:

for word in split(system("cat words.txt"), "\n")
    call matchadd("Search", word)
endfor

This can be wrapped in a function (with replaced the program call with com):

fun MakeMatches()
    for word in split(system("com"), "\n")
        call matchadd("Search", word)
    endfor
endfun
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文