VIM:仅在特定行号之间搜索?

Tho*_*mas 39 vim search

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

:12,24s/search/replace
Run Code Online (Sandbox Code Playgroud)

我希望能够指定具有正常搜索的范围.就像是

:12,24/search
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Car*_*icz 37

akira的答案很棒.但经过一番挖掘,我找到了另一种选择.它不是那么优雅,但更容易输入:

 :12,24g/search/
Run Code Online (Sandbox Code Playgroud)

这会给你一个恼人的提示,但它会在包含所搜索字符串的范围内的第一行结束.


aki*_*ira 33

:help search-range
Run Code Online (Sandbox Code Playgroud)

然后

:help /\%>l
Run Code Online (Sandbox Code Playgroud)

基本上:

/\%>12l\%<24lsearch
Run Code Online (Sandbox Code Playgroud)

  • @chernevik:检查答案的时间戳. (7认同)

Hab*_*abi 21

你真的需要行号吗?另一种方法是可视地选择范围.

  1. 使用v,V或其他任何选择范围
  2. 按ESC键取消选择范围
  3. 搜索使用/\%Vwhat_to_search以搜索先前选择的范围中的"what_to_search".

这是键入的较小,但不是直接你要求的;-)

请参阅:help%V

[编辑]很好,我刚刚了解到搜索范围可以通过选择另一个范围进行搜索后更改,再次通过按ESC并按n重复搜索来取消选择此范围.Vim真的总是很好的惊喜.


mic*_*ael 16

继续使用替换命令,但将gc标志附加到原始示例.

:12,24s/search//gc

:help search-range

[要在范围内搜索]使用带有'c'标志的":substitute"命令.

例: :.,300s/Pattern//gc

该命令将从光标位置搜索,直到第300行为"Pattern".在比赛中,您可以输入'q'来停止,或者'n'来找到下一场比赛.


小智 5

如果有标记说 a 和 b,那么搜索可以限制在 a 和 b 之间的区域使用

/\%>'a\%<'bSearchText
Run Code Online (Sandbox Code Playgroud)

这可以用 cmap 简化

cmap vmsab /\%>'a\%<'b
cmap vmscd /\%>'c\%<'d
Run Code Online (Sandbox Code Playgroud)