Vim-进入搜索寄存器


79

有什么简单/快捷的方法可以“拉”入vim的“ last search”寄存器(“ /)?

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

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个单词并将其放在最后一个搜索缓冲区中

另外,如果有一种方法可以搜索命名寄存器的内容,那也可以。换句话说,如果可以的话:

"A5yw

然后搜索寄存器A中的内容,也可以使用。

我能找到的最接近的是拉入命名寄存器,然后将该寄存器复制到最后一个搜索寄存器,例如

"A5yw
:let @/=@A

冒一个较长问题的风险,我想指出的是,我并不总是希望“拉动并搜索”这5个字-有时是17个字符,有时是在行尾,等等。所以硬编码的宏并没有给我我想要的灵活性。

Answers:


109

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

例如。

  • 首先,"Ayw 将一个单词放入寄存器A
  • 然后, / ^R A 将寄存器A的内容放入搜索字符串中。

1
这当然可以,但是听起来OP可能实际上并不想要搜索,只是要突出显示即可。如果是这样的话,自定义运算符将是您的最佳选择。
卡斯卡贝尔

1
超级-谢谢。。。这正是我所需要的(嗯,在最初实际上不可能有完美解决方案的约束下。)谢谢您的简洁解决方案。

11
只是一个评论...“ayw的不猛拉字到寄存器‘A’....它附加的东西被猛拉至‘A’注册。
jkerian

1
+1一直在寻找,这是我要解决的问题的完美解决方案-谢谢。
iblamefish 2011年

8
为了清楚起见-vim使用寄存器的大小写来确定它是追加还是替换内容,因此"ayw(小写)将替换寄存器“ a”的内容,而"Ayw追加到寄存器“ a”
Peter Gibson

38

如果您没有使用任何寄存器来存储被选中的文本,那么vim将使用0寄存器。您可以通过键入搜索该Ctrl-R 0/

一个更复杂的例子。假设您想在另一个缓冲区中搜索当前光标所在的引号内的文本:

  • 你可以用yi"(内部引用)
  • 转到要搜索的缓冲区
  • 类型 /Ctrl-R 0

1
我发现此解决方案比a'r的解决方案更有用,因为反复执行"Ayw 会在寄存器A中产生一个附加的字符串。但是简单地键入yw然后在键入Ctrl-R 0之后/总是得到我想要的结果。
David Jung

10

我为此使用以下代码:

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

    function! VisualSearch(dirrection)
        let l:register=@@
        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

如果不清楚,可以在可视模式下选择一些文本,然后使用*或#搜索该文本。
爱德华·安德森

6

搜索选择:

如果要首先拉动一行的一部分,然后使用“ v”并用光标移动,直到标记了所需的内容,然后按y来拉动,现在选择在寄存器0中

然后您可以输入 /Ctrl-R 0


5

所以基本上是#和*命令的扩展版本,对吗?听起来您想定义一个自定义运算符(一个期望运动的命令)。我从来没有真正做到过,但是我确实找到了一个看起来更容易做的插件。提供了一些示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.