在vim中复制突出显示的模式

时间:2013-02-08 07:05:36

标签: unix vim

让我们说,我使用

突出显示(匹配)括号中的文本
/(.*)

现在,如何仅将突出显示的文本(即匹配模式,而不是整行)复制到缓冲区中,以便将其粘贴到某个位置。

3 个答案:

答案 0 :(得分:2)

this Vim Tips Wiki page中提供了多种方法。最简单的方法是以下自定义命令:

function! CopyMatches(reg)
    let hits = []
    %s//\=len(add(hits, submatch(0))) ? submatch(0) : ''/ge
    let reg = empty(a:reg) ? '+' : a:reg
    execute 'let @'.reg.' = join(hits, "\n") . "\n"'
endfunction
command! -register CopyMatches call CopyMatches(<q-reg>)

答案 1 :(得分:1)

搜索时,您可以使用e标志移动到比赛结束。因此,如果我正确理解您的问题,如果您使用例如:。

进行搜索
/bar

你希望复制它,使用:

y//e

这将使用之前的搜索模式猛拉,直到比赛结束。

答案 2 :(得分:1)

您想要将缓冲区中的每个(foo)组合在一个寄存器中(看起来像(foo)(bar)(baz)…)还是想要抽取匹配的单个(foo)

如果你想要括号,可以使用ya(完成最后一个;如果你只想要它们之间的话,可以使用yi(

Ingo的回答照顾前者。