Vim中是否有办法在命令行上粘贴搜索寄存器,但没有周围的\<
括号\>
?我经常发现自己在缓冲区中进行搜索,然后想要将匹配的模式用作grep
的参数(更具体地说,ack.vim)。
如果您搜索foo
然后输入:Ack '<C-r>/
',会发生以下情况:
:Ack '\<foo\>'
这将找不到任何东西。我想要的是:
:Ack 'foo'
这当然是一个简单的例子。对于更复杂的搜索结果,这将更有价值。
我知道<C-r><C-w>
和<C-r><C-a>
用于粘贴光标下的单词/ WORD,这些通常就足够了,但并非总是如此。
答案 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>&
插入上一个搜索模式的第一个匹配项。