Tuesday, October 9, 2012

Re: How to "destructive vimdiff" ;) two files ?

Hi Ben!

On Di, 09 Okt 2012, Ben Fritz wrote:

> On Tuesday, October 9, 2012 8:10:29 AM UTC-5, Christian Brabandt
> wrote:
> >
> > You need to loop over each line and get the diff_hlID() for that
> > position.
> >
> > Each line, where diff_hlID() returns zero you need to delete.
> >
> >
> >
> > Of course, you can do it in one step ;)
> >
> >
> >
> > exe ':g/'. join(map(filter(range(1,line('$')), '!diff_hlID(v:val,
> > 0)'), '
> >
> > ''\%''.v:val."l"'), '\|'). '/d'
> >
> >
> >
> > But, this works only once, you can't do this for all buffers at the
> >
> > same time, since after you changed the first buffer the syntax
> > highlighting
> >
> > for the other will be completely different and there will be no more
> >
> > items being in common at the following buffers.
> >
>
> But, you could next undo the (single) change in the first buffer,
> repeat the process on the second buffer, then redo the change in the
> first buffer.

Even better, store the result for each window and execute it afterwards:

:let delete={}
:windo if &diff |:let delete[bufnr('')]=
join(map(filter(range(1,line('$')), '!diff_hlID(v:val, 0)'),
'''\%''.v:val."l"'), '\|')|endif
:windo if &diff | exe ":g/". delete[bufnr('')]."/d"|endif
:unlet delete

(each line starting with ':' is a single line, no linewraps)


regards,
Christian
--
Unter Rationalisierung verstehen die meisten Postminister, daß man
die Gebühren laufend erhöht und die Zustellung ständig verschlechtert.
-- Cyril Northcote Parkinson

--
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: