Vim - 猛进搜索注册

Dan*_*Dan 74 vi vim editor

是否有任何简单/快捷的方式"猛烈"进入vim的"最后搜索"注册表("/)?

从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.
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想做的是:

"/5yw
Run Code Online (Sandbox Code Playgroud)

这会将光标下的下5个单词拉出来并将它们放在最后一个搜索缓冲区中

或者,如果有办法搜索命名寄存器的内容,那也可以.换句话说,如果我能做到:

"A5yw
Run Code Online (Sandbox Code Playgroud)

然后搜索寄存器A中的内容,这也可以.

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

"A5yw
:let @/=@A
Run Code Online (Sandbox Code Playgroud)

冒更长时间问题的风险,我想说的是,我并不总是5个单词,我想"猛拉和搜索" - 有时它是17个字符,有时它是在行尾,等等......所以一个硬编码的宏并没有给我我想要的灵活性.

a'r*_*a'r 99

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

例如.

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

  • 只是一个评论......"Ayw没有把这个词拉进注册'A'......它将那个东西放在'a'寄存器上. (8认同)
  • 为了清楚起见 - vim使用寄存器的大小写来确定它是附加还是替换内容,所以``ayw`(小写)将替换寄存器'a'的内容,而``Ayw`会追加注册'a' (5认同)

csi*_*rra 33

如果你没有使用任何寄存器来存储被拔出的文本vim使用0寄存器.您可以通过键入Ctrl-R 0后搜索/.

一个更复杂的例子.假设您要在另一个缓冲区中搜索当前位于光标下的引号内的文本:

  • 你可以用yi"(猛烈的内部报价)做到这一点
  • 转到要搜索的缓冲区
  • 类型 /Ctrl-R 0

  • 我发现这个解决方案比 a'r 更有用,因为重复执行 `"Ayw` 会在寄存器 A 中生成一个附加字符串。但只需输入 `yw`,然后在 `/` 之后输入 `Ctrl-R 0` 总是会给出我想要的结果。猛拉。 (2认同)
  • 这个解决方案更好。大多数时候,我在拉取时不会指定寄存器。 (2认同)

Nik*_*sev 9

我正在使用以下代码:

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
Run Code Online (Sandbox Code Playgroud)


ser*_*rup 7

搜索选择:

如果你想先拉出一行的一部分,然后使用“v”并用光标移动直到你标记了你想要的东西,然后按 y 拉出,现在选择在寄存器 0 中

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


Cas*_*bel 5

所以基本上是#和*命令的扩展版本,对吧?听起来你想要定义一个自定义操作符(一个需要运动的命令).我从来没有真正做到这一点,但我找到了一个插件,看起来它可能会更容易这样做.提供了一些示例.