2011-09-15 44 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()时,它的定义。这种新方法是首选,因为它具有较少的不良副作用。