Reputation: 5856
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 with normal searches as well. Something like
:12,24/search
Since that doesn't seem to work (at least on my Vim configuration), does anybody know how to achieve this?
Upvotes: 58
Views: 36123
Reputation: 2682
If you would like to search to the end of the file, use $:
:3,$s/pattern//gn
This will search from 3-d line to the end
Upvotes: 2
Reputation: 11800
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
Upvotes: 1
Reputation: 51
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
Upvotes: 5
Reputation: 14125
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.
Upvotes: 21
Reputation: 3300
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.
Upvotes: 28
Reputation: 67760
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.
Upvotes: 52
Reputation: 6117
:help search-range
and then
:help /\%>l
so essentially:
/\%>12l\%<24lsearch
Upvotes: 40