VIM: Etsitkö vain tiettyjen rivinumeroiden välillä?

original title: "VIM: Search only between specific line numbers?"


Translate

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.



Tiedän, että Vimin korvaavalla komennolla voit määritellä rivialueen:: 12,24s / etsi / korvata Haluan pystyä määrittämään alueen myös tavallisilla hauilla. Jonkin verran...

Tämä on yhteenveto käännöksen jälkeen. Jos haluat tarkastella koko käännöstä, napsauta käännä-kuvaketta


Kaikki vastaukset
  • Translate
    :help search-range
    

    and then

    :help /\%>l
    

    so essentially:

    /\%>12l\%<24lsearch
    

  • Translate

    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.


  • Translate

    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.


  • Translate

    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.


  • Translate

    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
    

  • Translate

    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
    

  • Translate

    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