Vim:在没有括号的命令行中粘贴搜索寄存器

时间:2013-10-14 21:17:26

标签: vim

Vim中是否有办法在命令行上粘贴搜索寄存器,但没有周围的\<括号\>?我经常发现自己在缓冲区中进行搜索,然后想要将匹配的模式用作grep的参数(更具体地说,ack.vim)。

如果您搜索foo然后输入:Ack '<C-r>/',会发生以下情况:

:Ack '\<foo\>'

这将找不到任何东西。我想要的是:

:Ack 'foo'

这当然是一个简单的例子。对于更复杂的搜索结果,这将更有价值。

我知道<C-r><C-w><C-r><C-a>用于粘贴光标下的单词/ WORD,这些通常就足够了,但并非总是如此。

2 个答案:

答案 0 :(得分:9)

<C-r>/在您输入搜索模式时插入搜索模式:如果您执行/foo,则搜索寄存器包含foo

请注意,<C-r>/会插入搜索模式,而非匹配:如果您搜索foo\d<C-r>/将插入foo\d,而不是foo9。< / p>

如您所知,如果您使用\<\>来限制搜索到整个字词,则会添加*#。使用g*g# 搜索整个单词,从而避免使用\<\>

这是一个可能有用的映射:

nnoremap <F6> :Ack '<C-r>=expand("<cword>")<CR>'

答案 1 :(得分:4)

除非您正在进行纯粹的文字搜索,否则搜索模式(正则表达式)和(列表)匹配(来自缓冲区的字符串)之间存在差异。

如果您对后者感兴趣,我的PatternComplete plugin会提供所有匹配项的插入模式完成功能,并且还可以使用<C-R>&插入上一个搜索模式的第一个匹配项。