让我们说,我使用
突出显示(匹配)括号中的文本/(.*)
现在,如何仅将突出显示的文本(即匹配模式,而不是整行)复制到缓冲区中,以便将其粘贴到某个位置。
答案 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的回答照顾前者。