VIM: Search only between specific line numbers?

前端 未结 7 947
余生分开走
余生分开走 2020-12-13 09:06

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

相关标签:
7条回答
  • 2020-12-13 09:12

    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
    
    0 讨论(0)
  • 2020-12-13 09:23

    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
    
    0 讨论(0)
  • 2020-12-13 09:24
    :help search-range
    

    and then

    :help /\%>l
    

    so essentially:

    /\%>12l\%<24lsearch
    
    0 讨论(0)
  • 2020-12-13 09:32

    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.

    0 讨论(0)
  • 2020-12-13 09:33

    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.

    0 讨论(0)
  • 2020-12-13 09:35

    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.

    0 讨论(0)
提交回复
热议问题