我有一个vim脚本,我正在采购--cmd "source path/to/file.vim"
。完整的命令有点长,最后的命令是像这样退出vim。从Vim捕获标准输出的回显
vim --cmd 'source path/to/file1.vim' [... source other files] --cmd ':q'
在这些文件中,我做了一些处理,输出信息与echomsg
Vim的。我想要将这些消息捕获到stdout
。
问题是这种处理中的一些需要睡一会儿sleep
。但是,执行sleep
会导致vim重新绘制屏幕。因此,最初回显的消息在此屏幕重绘中部分清除。
一旦我退出Vim,我可以看到消息在shell中按顺序正确输出,但是间歇性重画使得显示乱了。
我想到的一种解决方法是使用writefile
将消息写入文件而不是使用stdout,但后来我失去了显示进度的能力。
有没有更好的方法从vimscript捕获到标准输出的echo'ed消息?我想在消息发生时显示这些消息,因为这些消息都是进度消息。
谢谢。
的可能重复[重定向前命令STDOUT在vim(http://stackoverflow.com/questions/16739300/redirect -EX-命令到标准输出入-VI m) – glts
另请参阅[Vim执行命令并通过stdout发送缓冲区](http://stackoverflow.com/q/17266098)。 – glts
这两个都是很好的答案,但不能解决问题。对于1.我不能使用'-s',因为vimrc抑制。 2. vim退出后,管道将无法工作。我希望屏幕在发送消息时进行更新,以显示进度。主要问题是'睡眠'触发器重绘,清除之前发送的回显消息。 –