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


61

我知道我可以使用/后跟一个正则表达式来搜索内容。而且我可以?用来向后搜索。我可以使用nN向前和向后重复搜索。

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

但是... 使用可视模式(v)选择文本后,如何要求Vim精确搜索该文本?快速浏览:help并没有...嗯...帮帮我。



感谢您使用*和的提示 #!如果您的问题也能解释什么g*以及g#将会做什么,那将是很好的;)
winklerrr 18/10/25

Answers:


22

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

  • y(选中的文本,"默认情况下进入寄存器)
  • / (进入搜索模式)
  • \ V)(可选,进入“非常魔幻”模式*)
  • Ctrl+ r "(从"寄存器插入文本)
  • Enter (从事!)

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

资料来源:Vim Tips Wiki


1
谢谢!这比vim.wikia页面上的“操作方法”更容易理解
winklerrr

64

您可以先提取突出显示的文本。然后

  • /

  • Ctrlr

  • "

这将粘贴您在结束之后拉过的内容/


7
好主意...除了将粘贴的文本解释为正则表达式外,这是不希望的。:-(
DenilsonSáMaia

4
如果这对您几乎足够好,那么您可以/\V<C-r>"代替。通过添加\V搜索查询,您可以告诉vim使用“ very no magic”。反斜杠可能仍然会给您带来问题。请参阅:help \V
idbrii

3
可能有助于解释这Ctrl+R是您如何访问寄存器,而*仅仅是系统剪贴板寄存器。例如,您也可以执行以下操作:yaw将单词拉入寄存器"(默认寄存器),然后/<C-r>"搜索该字符串。
本·戴维斯

5
@DenilsonSá-您可以使用此解决方案,但请不要使用/进行搜索,?而应使用,因为默认情况下反向搜索会使用 斜杠转义。然后,您可以点击N以继续向前搜索。
布莱德·帕克斯

7

我从没感觉过需要这种功能,但是考虑到您可以在Vim上找到对任何功能的需求,我认为这应该有所帮助:

搜索视觉选择的文本

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


4

您可以在vim Wiki上找到一种创建此行为的方法。


很好,我发现该版本可以避免使用斜杠。vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
工艺

1

该解决方案即使在使用多行和转义字符的情况下,也可以使您的vim搜索视觉选择的上下文。

在您的代码中添加以下代码.vimrc,并通过搜索您视觉选择的内容//。您也可以用全局替换所选内容/s。或首先在本地替换所选上下文//,然后在视觉上选择一个区域和:'<,'>s//{new_text}

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

上面的配置仅与搜索有关。有关我所有的vim配置,请访问.vimrc


0

在两台不同机器上的配置中,如果我选择了文本然后单击,/则会自动搜索选定的文本。


这不是默认行为。在这里,当我按/(在可视模式下)时,它只显示一个空的正则表达式提示,等待我键入一些内容。
DenilsonSáMaia,2009年

奇怪,因为我从未做过任何事情来启用它。
Nathan Fellman

3
许多发行版都将非标准的vim配置作为默认发行版(可能是因为标准的vim配置禁用了许多有用的功能,主要是为了实现vi兼容性)。
sleske 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.