vim 是否仅在特定行号之间搜索?

pnwntuvh  于 2022-11-11  发布在  其他
关注(0)|答案(7)|浏览(209)

我知道,使用Vim的替换命令,您可以指定一系列行:

:12,24s/search/replace

我希望能够指定一个范围,以及正常的搜索。

:12,24/search

因为这似乎不起作用(至少在我的Vim配置上),有人知道如何实现这一点吗?

j5fpnvbx

j5fpnvbx1#

Akira的回答很棒。但经过一番研究,我找到了一个替代方法。它不那么优雅,但更容易输入:

:12,24g/search/

这将给你一个恼人的提示,但它将结束在第一行的范围内包含所寻求的字符串。

3npbholx

3npbholx2#

:help search-range

然后再

:help /\%>l

所以本质上:

/\%>12l\%<24lsearch
c7rzv4ha

c7rzv4ha3#

您真的需要行号吗?另一种方法是可视地选择范围。
1.使用v、V或其他参数选择范围
1.按ESC键取消选择该范围

  1. search使用/\%Vwhat_to_search在先前选择的范围中搜索“what_to_search”。
    这是较小的类型,但不是直接你所要求的;- )
    请参阅:帮助%V
    [编辑]太好了,我刚刚了解到,搜索的范围可以在搜索后通过选择另一个范围来改变,通过按ESC键再次取消选择这个范围,然后按n键重复搜索。Vim真的总是很好的惊喜。
gojuced7

gojuced74#

继续使用替换命令,但将gc标志附加到原始示例中。
:12,24s/search//gc
:help search-range开始
[To在一个范围内搜索]使用带有'c'标志的“:substitute”命令。
示例::.,300s/Pattern//gc
此命令将从光标位置开始搜索“Pattern”,直到第300行为止。在找到匹配项时,您可以键入“q”停止搜索,或键入“n”查找下一个匹配项。

5n0oy7gb

5n0oy7gb5#

如果存在标记a和B,则可以使用以下公式将搜索限制在a和b之间的区域

/\%>'a\%<'bSearchText

这可以通过cmap来简化

cmap vmsab /\%>'a\%<'b
cmap vmscd /\%>'c\%<'d
rfbsl7qr

rfbsl7qr6#

如果要搜索到文件的结尾,请使用$:

:3,$s/pattern//gn

这将从三维线搜索到结束

mepcadol

mepcadol7#

使用Narrow Region plugin,我们可以打开一个临时缓冲区,其中包含需要搜索或更改的范围

:900,1000NarrowRegion

然后我们可以进行搜索

/thing

或更改并写回缓冲区

:%s/this/that/g
:wq

相关问题