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.

  1. select the range using v, V or whatever
  2. press ESC to unselect the range
  3. 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.