如何搜索所选文本?

21

我该如何搜索所选字符串(vy)? 我通常使用/进行搜索,但我不能在/之后粘贴选择的字符串。


相关问题:https://dev59.com/YW865IYBdhLWcg3wFqdV - HaskellElephant
5个回答

25
在插入模式下,您可以使用CTRL-R来插入Vim寄存器的内容。默认情况下,复制的文本会被放入未命名的寄存器"中,所以在插入模式下插入该文本,您需要输入<C-R>"。搜索提示使用命令行模式,该模式具有自己的CTRL-R,其几乎与插入模式中的相同。
因此,如果我刚刚复制了文本foo,则键入/<C-R>"将在我按enter键后搜索文本foo

1
严格来说,这不是插入模式,而是命令行模式。关于这个问题,可以参考这个答案:查看这个其他回答,它更深入地解释了寄存器的使用。 - Benoit
@Benoit 我知道那种模式一定有一个名称。我更新了我的答案。 - David Brown
1
只是一条注释。按下 Ctrl R 在命令行上显示了一个“,然后我需要输入“才能得到搜索词... - 576i

4
:set hls
:vmap * y:let @/ = @"<CR>
  • set hls (高亮搜索)
  • v => hjkl (选择某个内容)
  • 按下*,将选中的文本复制到寄存器"
  • 将寄存器/的内容设置为"
  • 按下n/N进行导航

2

我在我的vimrc中定义了以下映射,它将*映射为将搜索模式定义为当前高亮显示的内容(转义所有可能危险的字符,并将高亮显示的空格转换为任意一系列空格)。

xnoremap * :<C-U>let old_reg=getreg('"')|let old_regtype=getregtype('"')<CR>gvy/<C-R><C-R>=substitute(substitute(escape(@", '/\.*$^~['), '\s\+', '\\s\\+', 'g'), '\_s\+', '\\_s*', 'g')<CR><CR>gV:call setreg('"', old_reg, old_regtype)<CR>:let v:searchforward=1<CR>

为了使用它,使用 v 开始可视化模式,然后高亮你想要搜索的内容,按下 * 而不是 y
当然,你可以将 # 映射到向后搜索(完全相同,除了需要将 v:searchforward 设置为 0)。

那个映射在 nvim 中出现了错误(“未定义变量 CR”)。我使用 Vim Wiki 上的 这个 替代品,它使得搜索 URL 成为可能,例如:vnoremap // y/\V<c-r>=escape(@",'/\')<cr><cr> - Matthias Braun

0

如果你只关心搜索,你可以使用我使用的作弊方法。通过vy+w抓取一个单词,然后发出命令

:%s//XYZ/gc 

这将搜索最后一次搜索的单词。然后当您找到它时,它会要求确认以用XYZ替换,并且您只需按q退出即可。


0

首先使用y命令复制所需文本。然后执行以下操作:

  • /
  • Ctrl + r
  • "

以上命令将在/后粘贴您复制的内容。最后按下ENTER键即可。


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