Vim - 拉入搜索寄存器

Posted

技术标签:

【中文标题】Vim - 拉入搜索寄存器【英文标题】:Vim - yank into search register 【发布时间】:2011-01-19 17:58:32 【问题描述】:

是否有任何简单/快速的方法可以“拉”到 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.

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

"/5yw

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

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

"A5yw

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

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

"A5yw
:let @/=@A

冒着使长问题更长的风险,我想声明它并不总是 5 个字我想“拉 & 搜索”——有时是 17 个字符,有时是到行尾,等等...所以硬编码的宏不能给我想要的灵活性。

【问题讨论】:

【参考方案1】:

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

例如。

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

【讨论】:

这当然有效,但听起来 OP 可能实际上并不想搜索,只是突出显示。如果是这种情况,自定义运算符将是可行的方法。 超级 - 谢谢你...这正是我所需要的(好吧,在完美的解决方案实际上是不可能的约束下。)感谢简洁的解决方案。 只是一个评论...“Ayw 不会将单词拉入寄存器'A'....它将被拉入的东西附加到'a'寄存器中。 +1 一直在寻找这个,完美解决我试图解决的问题 - 谢谢。 为了清楚起见 - vim 使用寄存器的大小写来确定它是附加还是替换内容,所以"ayw(小写)将替换寄存器'a'的内容,而"Ayw 将附加到寄存器'a'【参考方案2】:

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

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

您可以使用 yi" 来做到这一点(抽出内引号) 转到要搜索的缓冲区 输入/Ctrl-R 0

【讨论】:

我发现这个解决方案比 a'r 的解决方案更有用,因为重复执行 "Ayw 会在寄存器 A 中生成一个附加字符串。但只需键入 yw 然后在 / 之后键入 Ctrl-R 0 总是给出了我拉的东西。【参考方案3】:

我正在使用以下代码:

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

【讨论】:

如果不清楚,这允许您在可视模式下选择一些文本,并使用 * 或 # 搜索该文本。【参考方案4】:

搜索选择:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于Vim - 拉入搜索寄存器的主要内容,如果未能解决你的问题,请参考以下文章

谁自动写入 vim 寄存器?

如何在 VIM 中保存寄存器 [关闭]

在vim中组合寄存器

vim 从嫌弃到依赖(15)——寄存器

vim 全选并复制到系统剪切板

第八章vim编辑器