我有这个 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?
最佳答案
正如我在评论中所说,这是正在讨论的 :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
一起放置。
关于redirect - 在 vim 中,如何重定向 vimscript 函数的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626155/