VIM: Search only between specific line numbers?

SearchVim

Search 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.

  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 - 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionThomasView Question on Stackoverflow
Solution 1 - SearchCarl SmotriczView Answer on Stackoverflow
Solution 2 - SearchakiraView Answer on Stackoverflow
Solution 3 - SearchHabiView Answer on Stackoverflow
Solution 4 - SearchmichaelmichaelView Answer on Stackoverflow
Solution 5 - SearchshankarView Answer on Stackoverflow
Solution 6 - SearchSergioAraujoView Answer on Stackoverflow
Solution 7 - SearchggguserView Answer on Stackoverflow