我有這個vim腳本功能在vim中,如何重定向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'真實正在討論[所述vim_dev郵件列表中(https://groups.google.com/d/ MSG/vim_dev/H3Z3ChSUh_4/beZs6KzYdBsJ)。總之,嵌套':redir'是不可能的。 – glts
我編輯了我的問題---有沒有辦法修改'Env()'輸出到一個寄存器或全局變量,我可以在'env()'調用命令後訪問? – Ein
請注意':redir @ A' *追加*以註冊「a。如果您想覆蓋它,請使用小寫:':redir @ a'。 –