Thomas
Thomas

Reputation: 5856

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?

Upvotes: 58

Views: 36123

Answers (7)

ggguser
ggguser

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

SergioAraujo
SergioAraujo

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

shankar
shankar

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

michaelmichael
michaelmichael

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

Habi
Habi

Reputation: 3300

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.

Upvotes: 28

Carl Smotricz
Carl Smotricz

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

akira
akira

Reputation: 6117

:help search-range

and then

:help /\%>l

so essentially:

/\%>12l\%<24lsearch

Upvotes: 40

Related Questions