如何在 Vim 中搜索选定的文本?

Den*_*aia 78 vim

我知道我可以使用/后跟正则表达式来搜索某些内容。我可以?用来向后搜索。我可以使用n和N向前和向后重复搜索。

还有两个不错的快捷方式:*or#将搜索光标下的单词(向前/向后)。这非常有用!(也有g*和g#变体)

但是...一旦我使用可视模式 ( v)选择了文本,我如何让 Vim 准确地搜索该文本?快速浏览:help并没有...呵呵...帮帮我。

小智 77

您可以先猛拉突出显示的文本。然后

  • /

  • Ctrlr

  • "

这将粘贴您在/.

  • 好主意......除了粘贴的文本将被解释为正则表达式,这是不希望的。:-( (8认同)
  • @DenilsonSá - 您可以使用此解决方案,但不要使用`/` 进行搜索,而是使用`?`,因为默认情况下反向搜索会转义斜杠。然后您可以点击“N”继续向前搜索。 (7认同)
  • 如果这对你来说已经足够好了,那么你可以做 `/\V<Cr>"` 代替。通过在你的搜索查询前面加上 `\V`,你告诉 vim 使用“非常没有魔法”。反斜杠可能仍然导致你的问题。见`:help \V` (4认同)
  • 这可能有助于解释“Ctrl+R” 是您访问寄存器的方式,而“*” 只是系统剪贴板寄存器。例如,您还可以执行以下操作: ``yaw`` 将单词拖入寄存器 ``"``(默认寄存器),然后使用 ``/<Cr>"`` 搜索该字符串。 (3认同)

gle*_*nsl 42

给定已选择的文本块,以下序列将执行您想要的操作:

  • y(猛拉选中的文本,"默认进入寄存器)
  • / (进入搜索模式)
  • ( \ V) (可选,进入“非常没有魔法”模式*)
  • Ctrl+ r "(插入来自"寄存器的文本)
  • Enter (从事!)

(*) “非常没有魔法”模式将以下文本解释为纯文本而不是正则表达式。但是请注意,\和/仍然很特殊,必须以其他方式处理。如果文本中没有任何被视为特殊的字符,则可以跳过此步骤。

来源:Vim Tips Wiki


小智 10

我从来没有觉得需要这样的功能,但是,考虑到你可以在 Vim 上找到任何功能的需求,我认为Vim Wiki 上的这个应该会有所帮助:

vnoremap // y/\V<C-R>=escape(@",'/\')<CR><CR>
Run Code Online (Sandbox Code Playgroud)

我没有测试它,但是查看代码,它似乎正是您要搜索的内容。


akf*_*akf 5

您可以在 vim wiki 中找到创建此行为的方法。