2010-02-22 67 views
64

有没有简单/快捷方式“抽出”到Vim的“最后一次搜索”寄存器(“/)Vim的 - 猛拉到搜索注册

从VIM文档,看来答案是否定的,但它可以通过一个“让”命令分配:

It is writable with ":let", you can change it to have 'hlsearch' highlight 
other matches without actually searching. You can't yank or delete into this 
register. 

理想我喜欢做的是一样的东西:

"/5yw 

这将抽出光标&看跌下下5个字日em在最后的搜索缓冲区中

或者,如果有方法可以搜索已命名的寄存器的内容,那也可以。换句话说,如果我可以这样做:

"A5yw 

然后搜索什么是在寄存器A,这也可以。

最接近的我可以进入一个已命名的寄存器&,然后将该寄存器复制到上一个搜索寄存器中,例如,

"A5yw 
:let @/[email protected] 

在作出一个长期的问题更危险,我想指出,这并不总是5个字,我想“猛拉&搜索” - 有时是17个字符,有时它是在2002年底线等等,所以一个硬编码的宏不会给我灵活性,我想要的。

回答

81

/输入搜索字符串后,可以使用Ctrl-R,然后键入代表您要使用的寄存器的字母。

例如。

  • 首先,"Ayw猛拉一个字到寄存器A
  • 然后,/ ^R A把寄存器A的内容到搜索字符串。
+0

当然作品这一点,但它听起来像OP实际上可能没有希望搜索,只需突出显示。如果是这样的话,一个自定义的运营商将是一条路。 – Cascabel 2010-02-22 18:17:14

+0

超级感谢...这正是我所需要的(嗯,在这个限制下,完美的解决方案实际上是不可能的。)感谢您提供简洁的解决方案。 – Dan 2010-02-22 20:16:40

+0

@Jefromi - 感谢您的回答(下方)和您的帮助。对不起,我原来的问题可能不够清楚,但我确实希望这样做,因为我实际上已禁用突出显示。感谢您的输入! – Dan 2010-02-22 20:18:03

5

所以基本上是#和*命令的扩展版本,对吧?这听起来像你想定义一个自定义操作符(一个需要运动的命令)。我从来没有这样做过,但我确实发现了一个plugin,看起来可能会更容易。提供了一些例子。

9

我用下面的代码为:

vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR> 
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR> 

    function! VisualSearch(dirrection) 
     let l:[email protected]@ 
     normal! gvy 
     let l:search=escape(@@, '$.*/\[]') 
     if a:dirrection=='/' 
      execute 'normal! /'.l:search 
     else 
      execute 'normal! ?'.l:search 
     endif 
     let @/=l:search 
     normal! gV 
     let @@=l:register 
    endfunction 
+0

如果不清楚,可以让你选择一些可视模式的文本,并使用*或#来搜索该文本。 – 2013-11-11 23:37:03

23

如果你没有使用任何寄存器来存储抽出文本VIM使用0寄存器。您可以在/之后输入Ctrl-R 0来搜索。

一个更复杂的例子。说,你要在另一个缓冲区来搜索引号内的文字是光标下现在:

  • 你可以做到这一点与yi"(抽出内报价)
  • 转到缓冲区要搜索
  • 类型/Ctrl-R 0
1

搜索选择:

如果你想先抽出一条线的部分,然后用“v”,并与移动

光标,直到您标记你想要什么,然后按y键拷贝文本,现在的选择是寄存器0

然后你可以键入/Ctrl-R 0