在可视模式下复制一行文本后,使用vim搜索模式的方法是什么?

5

我正在尝试在VIM的可视模式下搜索某一行中复制的部分。

在VIM中,最快的方法是什么?例如,

Hello, #{1} world.

我按下 v 进入可视模式并选择第一行的 llo, #{1} wor。然后我按下 y 复制所选文本,接着,我想通过按下 / 来搜索被选中的文本。这引发了以下问题:

A: 当我处于搜索模式时,如何粘贴复制的文本?

B: 如何避免在搜索模式下转义字符?


更正标题为“可视化模式”(之前是“虚拟模式”) - eckes
3个回答

13

A:

Ctrl-r 0.

B:

除了Ctrl-r 0技巧外,还有Ctrl-r =,它允许您输入要计算的表达式并扩展为结果。

/(现在提示看起来像/
Ctrl-R =(现在提示看起来像=
escape(@0, '\^$*.~[') Enter(现在提示看起来像/llo, #{1} wor
Enter

请注意,@reg表示“寄存器reg的内容”,寄存器0是最后一次yank或delete。 我认为逃脱了vi正则表达式中的所有特殊字符……无论如何,您可能更喜欢创建映射而不是键入所有内容。


如果我拽了整行,我必须在搜索之前删除末尾的 ^M^@ - manav m-n

6

当你剪切一些文本(并且没有指定要剪切到哪个寄存器),它会被放入寄存器 0 中。因此,如果你想搜索该剪贴板中的文本,请按 ESC 进入正常模式,然后执行

/CTRL-r0

按下/,然后按CTRL+r,再按0,即可将寄存器0的内容拉入搜索模式。
一些注意事项:
  • 要搜索其他存储在其他寄存器中的模式,您可以键入:reg并查看寄存器内容,然后决定使用哪个寄存器内容进行搜索。
  • 要复制到不同于0(例如2)的寄存器中,您可以键入"2y:he v_y)。
  • 要直接搜索所选文本,您可以使用此处描述的映射,该映射使您可以在视觉模式下只需按下X(大写字符X)即可搜索该文本。
  • 对于常规搜索,这个vimcast为您介绍了具有搜索历史记录的非常强大的命令行窗口(我两周前发现它,绝对喜欢它!)。

3

谢谢。我将函数lh#visual#selection复制到了v_star.vim中。它运行得非常好! - SunLiWei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接