> 1. dog
> 2. cat //<- I want to keep this line and one line above and one line below
> 3. mouse
> 4. cow
> 5. horse
> 6. dolphin
> 7. whale
> 8. cat //<- I want to keep this line and one line above and one line below
> 9. sheep
> 10. bat
I think to do this, it would be easiest to do some sort of
decorate/process/undecorate pass such as
:g/cat/sil! -,+>
:v/^\s/d
:%<
which works with your example (where everything is
left-justified). Your decoration and deletion-of-undecorated
could be any other marker such as
:%s/.*cat/XXX&
:v/^XXX/d
:%s/^XXX
Alternatively, you can do it in one pass:
:v/cat\|.*\n.*cat\|\%(cat.*\n\)\@<=./d
which basically just enumerated the 3 conditions on which a line
can match ("cat" is on the line, there's stuff followed by a
newline followed by stuff containing "cat", or you assert that
the previous line contains "cat").
The first one scales better to greater numbers of context lines
(you can easily adjust the number of lines backwards & forwards,
or do the adjustment with searches rather than relative
line-number offsets); while for your particular case, the
all-in-one might be easier.
> I believe the following command does something similar to what I need
>
> :g/192.168.4.2:5120 ->/z#.3
It warms my grey-beard heart to see other people employing the
very underutilized :z family of commands. :-)
-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
No comments:
Post a Comment