【发布时间】:2011-03-16 21:37:00
【问题描述】:
我知道使用 Vim 的替换命令可以指定一系列行:
:12,24s/search/replace
我也希望能够指定一个正常搜索的范围。类似的东西
:12,24/search
由于这似乎不起作用(至少在我的 Vim 配置中),有人知道如何实现吗?
谢谢。
【问题讨论】:
我知道使用 Vim 的替换命令可以指定一系列行:
:12,24s/search/replace
我也希望能够指定一个正常搜索的范围。类似的东西
:12,24/search
由于这似乎不起作用(至少在我的 Vim 配置中),有人知道如何实现吗?
谢谢。
【问题讨论】:
:help search-range
然后
:help /\%>l
本质上是这样的:
/\%>12l\%<24lsearch
【讨论】:
akira 的回答很好。但经过一番挖掘,我找到了另一种选择。它没有那么优雅但更容易输入:
:12,24g/search/
这会给你一个烦人的提示,但它会出现在包含搜索字符串的范围内的第一行。
【讨论】:
Press ENTER or type command to continue. 我对 vim 不够精通,无法判断差异可能来自哪里。
你真的需要行号吗?另一种方法是直观地选择范围。
/\%Vwhat_to_search 搜索以在先前选择的范围内搜索“what_to_search”。这更容易输入,但不是你所要求的直接输入;-)
见 :help %V
[编辑] 太好了,我刚刚了解到,在进行搜索后,可以通过选择另一个范围来更改要搜索的范围,按 ESC 并按 n 重复搜索再次取消选择该范围。 Vim 总是能带来惊喜。
【讨论】:
继续使用替换命令,但将 gc 标志附加到您的原始示例中。
:12,24s/search//gc
来自:help search-range
[在一个范围内搜索]使用 带有 'c' 的 ":substitute" 命令 旗帜。
示例:
:.,300s/Pattern//gc
此命令将从 光标位置直到第 300 行 “图案”。在比赛中,您可以输入 'q' 停止,或 'n' 查找下一个 匹配。
【讨论】:
如果有标记说a和b,那么搜索可以限制在a和b之间的区域
/\%>'a\%<'bSearchText
这可以用 cmap 来简化
cmap vmsab /\%>'a\%<'b
cmap vmscd /\%>'c\%<'d
【讨论】:
使用Narrow Region plugin,我们可以打开一个临时缓冲区,其中包含我们需要搜索或更改的范围
:900,1000NarrowRegion
那我们可以搜索一下
/thing
或者更改并写回缓冲区
:%s/this/that/g
:wq
【讨论】:
如果要搜索到文件末尾,请使用 $:
:3,$s/pattern//gn
这将从 3-d 行搜索到末尾
【讨论】: