我有一个与用户交互的脚本(将一些问题打印到stderr并从stdin获取输入)然后将一些数据打印到stdin。我想将脚本的输出放到vimscript中的变量中。它可能应该是这样的:
let a = system("./script")
假设的行为是脚本运行,与用户交互,并且在将所有a
的输出分配给stdout之后。但是,a
同时分配了stdout和stderr的输出,因此用户没有提示。
你能帮我解决一下吗?
答案 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
我认为这就是你的意思。