I know that with Vim\'s substitution command you can specific a range of lines:
:12,24s/search/replace
I want to be able to specify a range
If there marks say a and b, then the search can be restricted to the region between a and b using
/\%>'a\%<'bSearchText
This can be simplified with a cmap
cmap vmsab /\%>'a\%<'b
cmap vmscd /\%>'c\%<'d
Using Narrow Region plugin we can open a temporary buffer with the range we need to search or change
:900,1000NarrowRegion
Then we can meke a search
/thing
Or a change and write the buffer back
:%s/this/that/g
:wq
:help search-range
and then
:help /\%>l
so essentially:
/\%>12l\%<24lsearch
Keep using the substitution command, but append the gc
flags to your original example.
:12,24s/search//gc
From :help search-range
[To search within a range] use the ":substitute" command with the 'c' flag.
Example:
:.,300s/Pattern//gc
This command will search from the cursor position until line 300 for "Pattern". At the match, you can type 'q' to stop, or 'n' to find the next match.
Do you really need line numbers? Another way could be to select the range visually.
/\%Vwhat_to_search
to search for 'what_to_search' in the previously selected range.This is lesser to type, but not directly what you have asked for ;-)
See :help %V
[EDIT] Great, I have just learned that the range to search in can be changed after doing the search by selecting another range, unselecting this range again by pressing ESC and pressing n to repeat search. Vim is really always good for pleasant surprises.
Great answer from akira. But after some digging, I found an alternative. It's not as elegant but easier to type in:
:12,24g/search/
This will give you one annoying prompt but it will end up on the first line within the range containing the sought string.