2011-09-15 45 views
4

返回值我想這樣做從內部Vim命令獲得Vimscript中

let colors = execute(":highlight") 

這顯然是不正確的,所有我能做的就是execute(":highlight")這將打開一個窗口,但我真正需要的是將該窗口的內容變爲一個變量 - 很像system()調用將爲外部命令執行的操作。這可以做到嗎?

回答

5

有一個叫做:redir的命令,它專門設計用來捕獲一個或多個命令在一個文件,一個寄存器或一個變量中的輸出。在後一種情況下,用法如下面的示例 。

:redir => colors 
:silent highlight 
:redir END 

要查看調用命令的方式完整列表,請參閱 :help :redir。關於:redir的實際用途,請參見my answerExtending a highlighting group in Vim的問題。

3
let colors = lh#askvim#exe(':hi') 

Which只是封裝:redir。甚至更好:

let colors = lh#askvim#execute(':hi') 

which返回結果爲列表變量,無論是通過:redir如果我們別無選擇,或者通過execute()時,它的定義。這種新方法是首選,因爲它具有較少的不良副作用。