Thursday, June 28, 2012

Re: vim: use external program, but direct output to a new vsplitted buffer

looks like option1 (which I was currently using before sending
consulting email out) is simple for me...
thanks!

On 06/28/2012 11:46 AM, Marc Weber wrote:
> There are many ways to do what you're asking for.
>
> 1) Don't bother because u = undo is that fast and copy the text manually
> to a new buffer (c-w s then paste).
>
> 2) If you really need it that often that you want to write a script for
> this is most simple:
>
> map \doit :%! external-app > foo.txt<cr>u<c-w>s:r foo.txt<cr>
> note that u undoes replacing the lines
>
> now you may want to use a tempfile instead of foo.txt ...
>
> Like this you can use <line1> and <line2> or such see :h command etc and
> use system (which accepts input) which you can get by :h getline()
> and join by :h join() (but \r\n may be replaced by \n then
> thus byte count may differ)..
>
> You can then paste the output of system to the new buffer by
> puts=split(system("command", join(getline(lnum1,lnum2))))
> or by using call append() or the like.
>
> If you don't want to bother about all this lnum1 lnum2 stuff you can
> also just yank to register by y and access that which would be shortest:
>
> map \doit y<c-w>s:call append(split(system('command',@"),"\n"))<cr>
>
> or such - but it pollutes your yank registers .. (you could use other
> registers instead)
>
> Marc Weber
>

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