echo - In vim, how do I redirect the output of a vimscript function? -


i have vimscript function

 function! env()      redir => s      sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"      redir end      return split(s)  endfunction 

this function obtained question:
how list environment variables in vim?

when :call env() don't see output, :echo env() displays output names of environment variables.

i'd rather copy , paste output somehow. know :redir. doesn't work:

:redir @a :echo env() :redir end "ap 

instead, blank line pasted.

i have tried many combinations of :redir command (to registers and/or files) , variations on call env() without success. because output generated calling function? thought might because function returns list, :echo string(env()) isn't captured :redir either.

edit: modified solution used answer below.

function! env()     redir => s     sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"     redir end     let @s = string(split(s)) endfunction 

one can execute :call env() , "sp paste.

related question:
how redirect ex command output current buffer or file?

as said in comment, problem :redir that's being discussed on vim_dev. in short, nested redirection :redir isn't possible.

but of course can modify env() function redirect output register or global variable.

just change redir => s either redir => g:s (global variable g:s) or redir @s (register s), , remove return statement. let's use register:

function! env()     redir @s     sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"     redir end endfunction 

after calling function, output stored in register s , can put "sp, of course.


Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -