VIM: Search only between specific line numbers?
SearchVimSearch Problem Overview
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?
Thank you.
Search Solutions
Solution 1 - Search
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.
Solution 2 - Search
:help search-range
and then
:help /\%>l
so essentially:
/\%>12l\%<24lsearch
Solution 3 - Search
Do you really need line numbers? Another way could be to select the range visually.
- select the range using v, V or whatever
- press ESC to unselect the range
- search using
/\%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.
Solution 4 - Search
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.
Solution 5 - Search
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
Solution 6 - Search
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
Solution 7 - Search
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