VIM: Search only between specific line numbers?
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.
Solution 1:
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:
:help search-range
and then
:help /\%>l
so essentially:
/\%>12l\%<24lsearch
Solution 3:
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:
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.