如何在vimscript中与外部命令交互?

时间:2013-12-15 18:11:36

标签: scripting vim

我有一个与用户交互的脚本(将一些问题打印到stderr并从stdin获取输入)然后将一些数据打印到stdin。我想将脚本的输出放到vimscript中的变量中。它可能应该是这样的:

let a = system("./script")

假设的行为是脚本运行,与用户交互,并且在将所有a的输出分配给stdout之后。但是,a同时分配了stdout和stderr的输出,因此用户没有提示。

你能帮我解决一下吗?

3 个答案:

答案 0 :(得分:2)

system()(以及:!)捕获的内容由'shellredir'选项控制。它的通常值>%s 2>&1捕获stdout以及stderr。您的脚本需要为其输出选择一个(例如stdout),而另一个用于用户交互,并且调用它的Vimscript包装器必须(暂时)更改选项。

:let save_shellredir = &shellredir
:set shellredir=>
:let a = system('./script') " The script should interact via stderr.
:let &shellredir = save_shellredir

答案 1 :(得分:2)

最好避免在Vim中使用交互式命令;特别是使用GVIM(在Windows上),会弹出一个新的控制台窗口;你可能没有一个功能齐全的终端,......

更好地查询Vimscript本身中的任何所需参数(使用input();或者从自定义Vim :command传递它们),并且只是以非交互方式使用外部脚本,为其提供所需的一切。

答案 2 :(得分:0)

在另一个内部调用脚本,

. ./script.sh

我认为这就是你的意思。