限制Vim中代码的搜索范围

Wal*_*ter 11 vi vim

如何将Vim中的搜索范围限制为光标当前所在的函数/类/代码块,而不必弄清楚行号是什么?由于存在用于选择当前代码块的方法,因此能够在视觉选择中进行搜索也会这样做.

(与问题类似,但更通用)

Mar*_*off 14

我将复制并粘贴"使用/和搜索"的全部内容.(来自视觉选择)来自Vim Tips Wiki.

在视觉模式下,/并且?将更新可视选择就像任何其他光标移动命令(即,当在视觉模式下,搜索会延长选择).

为了在视觉选择中实际搜索,您将需要使用\%V原子,或使用视觉选择定义的标记\%>'<\%<'>原子.最好Esc在输入搜索之前保留视觉选择.您可能需要考虑映射以自动保留视觉选择并输入适当的原子.例如:

:vnoremap <M-/> <Esc>/\%V
Run Code Online (Sandbox Code Playgroud)

使用此映射,您可以按 Alt- /以便为搜索自动填写"范围",就像使用Ex命令一样:.要使用此功能,请移至第一个感兴趣的行,然后按V以启动逐行视觉选择.向下移动(按j一行或}段落等).选择要搜索的区域后,按Alt- /.视觉选择将被删除,搜索命令将开始.你会看见:

/\%V
Run Code Online (Sandbox Code Playgroud)

添加您要查找的内容,然后按 Enter.例如,您可以输入绿色并查看:

/\%Vgreen
Run Code Online (Sandbox Code Playgroud)

按下时Enter,每次出现的"绿色"都会突出显示,但仅限于您之前选择的区域.

以下是另外两个不使用视觉选择的示例.第一个命令仅搜索第10行到第20行(包括第10行).第二个仅在标记a和b之间搜索.

/\%>9l\%<21lgreen
/\%>'a\%<'bgreen
Run Code Online (Sandbox Code Playgroud)