在Vim中搜索选定内容

123

在编写C++时,我使用Vim和Visual Studio的Vim插件。经常情况下,我想要在函数内部搜索一个字符串,例如每次调用object->public_member.memberfunc()

我知道Vim提供了一种方便的方式来搜索单词,只需按下*#即可,还可以使用普遍存在的斜杠/命令搜索键入的字符串。但是,尝试搜索类似上面那样的较长字符串时,需要重新输入,这需要一些时间。

是否有一种方法可以搜索选定内容?例如,用v高亮显示,然后用y复制,有没有一种方法可以在/之后粘贴?是否有更简便的快捷键?


可能是如何搜索所选文本?的重复问题。 - acm
还有一个名为 visual-star-search 插件 可以完美地实现这个功能。 - mattb
还有一个名为 https://github.com/junegunn/vim-slash 的插件,它可以实现这个功能以及其他一些功能。 - Marc Mezzarobba
6个回答

164

看看这个 Vim 技巧:查找可视化选择的文本

或者你可以简单地用y复制所选的文本,然后进入搜索模式/,接着你可以使用Ctrl+R 0粘贴最后一次复制的文本


5
谢谢您的夸奖!使用":reg"查看寄存器中的内容,然后使用"ctrl-R N"获取寄存器N中的内容是非常好的技巧! - Rob Wells

110

答案

  1. 复制要搜索的文本
  2. q/p
  3. Enter

解释

q/ 的工作方式类似于普通搜索 /,但您处于命令模式,因此 p 实际上是 "粘贴" 而不是键入字符 p。 因此,上述操作将复制要搜索的文本并将其粘贴到搜索中。

有关更多详细信息,请键入 :help q/


4
我喜欢这个选项,因为我觉得打<ctrl-r>太不方便了。 - Jan
太好了!在evil-mode中使用emacs,这实际上是有效的,而被接受的答案则失败了(可能是因为使用了Ctrl键)。 - eestrada
2
适用于简单字符串,但不会转义正则表达式的特殊字符,如此其他答案的评论所述。 - Bluu
2
你甚至不需要拉动它。在可视模式下选择它,使用 q/gvp 命令,其中 gv 代表上一次的可视选择... - user2231796
1
@nwildner,q/gvp 对我不起作用。您能否澄清一下您的建议? - bam
这正是我所需要的。 - Sergius

40

使用q/代替仅使用/。(q:同理)。现在您可以通过命令和搜索历史进行VIM编辑!(有空试试Ctrl-N和Ctrl-P)。


12

我刚学到(通过优秀的书籍实用Vim)有一个相应的插件。 您可以在GitHub上找到插件

该插件可让您使用*#搜索视觉选择。


7
注意,其他答案没有进行任何转义。使用这些方法,任何选定的元字符都不会被按照字面意思搜索,这取决于当前的 magic 设置。这甚至可能导致需要平衡的元字符搜索失败。在搜索选定文本之前,本文提到的插件将进行转义。 - Kurt Hutchinson
1
它可以工作,但不幸的是,您不能使用“n”键转到下一个找到的项目,而Cory和CMS的方法确实允许这样做。 - Ayrat
2
这个在github上的插件版本更加新(https://github.com/bronson/vim-visual-star-search)。`n`和`N`按预期工作,用于下一个和上一个。 - Christian Long
我冒昧地将存储库的链接更改为https://github.com/bronson/vim-visual-star-search(正如Christian Long所指出的那样,这是插件的更新版本)。如果有人感兴趣,旧链接指向https://github.com/nelstrom/vim-visual-star-search。 - Raven

3
你实际上可以通过视觉选择文本,然后按 * 和 # 搜索下一个出现的位置... 它的工作方式是相同的,唯一需要注意的是:
在搜索时,选择中的空格将匹配任何空格(搜索“hello world”也会找到行尾的“hello”,并在下一行的开头找到“world”)。

http://vim.wikia.com/wiki/Search_for_visually_selected_text


3
对我来说,通过视觉选择文本然后按* 只会扩展我的视觉选择。 - martin jakubik
2
除非你在vimrc中映射了页面,否则默认情况下无法实现。 - Ayrat

0

--> 如果你想在 gvim 中突出显示文本出现的位置

  1. 选择文本并复制
  2. 然后?粘贴所选的文本(注意:这对插入模式无效)

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