我有这个vimscript功能
function! Env()
redir => s
sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
redir END
return split(s)
endfunction
这个功能是从这个问题中获得的:
How to list all the environment variables in Vim?
当我:call Env()
时,我看不到任何输出,但:echo Env()
显示所有环境变量的名称作为输出。
我宁愿以某种方式复制并粘贴此输出。我知道:redir
。但是这不起作用:
:redir @A
:echo Env()
:redir END
"ap
而是粘贴一个空白行。
我已尝试:redir
命令(寄存器和/或文件)的多种组合以及call Env()
上的变体,但没有成功。这是因为生成的输出来自调用函数吗?我认为可能是因为该函数返回了一个列表,但:echo string(Env())
也未捕获:redir
。
编辑: 这是我在下面的答案中使用的修改后的解决方案。
function! Env()
redir => s
sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
redir END
let @s = string(split(s))
endfunction
然后可以执行:call Env()
然后"sp
来粘贴。
相关问题:
How to redirect ex command output into current buffer or file?
答案 0 :(得分:2)
正如我在评论中所说,这是:redir
正在讨论on vim_dev的问题。简而言之,无法使用:redir
进行嵌套重定向。
但是当然你可以简单地修改你的Env()
函数来将输出重定向到寄存器或全局变量。
只需将redir => s
更改为redir => g:s
(全局变量g:s
)或redir @s
(注册s
),然后删除return语句。我们使用寄存器:
function! Env()
redir @s
sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
redir END
endfunction
调用该函数后,输出存储在寄存器s
中,当然可以将其与"sp
放在一起。