On 11/30/2010 04:01 PM, bboyjkang wrote:
    :g/interesting/sil! ?start?,/end/s/^/XXX/
    :v/^XXX/d
    :%s/^XXX

Is the “start” and “end” something you have to add yourself? Is it
possible to do this: Let’s say that once I find the pattern
“interesting”, I’d like to select the line that contains
“interesting”, or maybe include the line above and the line below that
line that contains “interesting”, for a total of 3 lines, or perhaps
the entire paragraph that contains “interesting”. Then, “start” is
automatically put at the top of the paragraph/line(s), and “end” is
put at the bottom of the paragraph/line(s). Now, I can do pattern
matches or substitutions only on ranges between “start” and “end” that
surround “interesting”.

(Rearranged to trimmed inline-quoting rather than top-posting, as is preferred on the mailing-list)

Yes, you can give other relative ranges.  Note that it breaks down as

  :g/pattern/action_to_perform_on_matching_lines

where action happens to be

  <range>s/foo/bar/

(prefixed with "sil!" as previously detailed) and where <range> happens to be "search backwards for pattern A, through searching forwards to pattern B". For the line above/below version, you could just change the range from the complex searches to ".-1,.+1" or more tersely, "-,+" as searches are relative to the current line (the line found by each :g hit) so the "." is optional, and adding/subtracting lines defaults to 1 if omitted.

  :help :range

That would make the command

  :g/interesting/sil! .-1,.+1s/^/XXX
or
  :g/interesting/sil! -,+s/^/XXX

To adjust the number of lines of context, just change the "-1" to however many lines you want before, and the "+1" to however many lines you want after.

Note that you might hit a fence-posting case if the last "interesting" match, plus whatever forward-context you want (in this case, one line; in the previous case, searching forward to a pattern) puts you beyond the end-of-file. So you might want to hand-verify the final "interesting" match in the file.

-tim



--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to