从Vim捕获到stdout的回声

时间:2013-08-05 18:55:09

标签: vim

我有一个vim脚本,我正在使用--cmd "source path/to/file.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捕获到stdout的echo'ed消息?我希望显示消息,因为这些是进度消息。

感谢。

1 个答案:

答案 0 :(得分:1)

稍后的重绘可能会使消息消失,因此为了避免您强行redraw,例如:

:new | redraw | echo "there is a new window"

或者根据评论检查lazyredraw

要将echo(或其他消息)捕获到标准输出,您可以使用redir命令,例如:

$ ex +"redir>>/dev/stdout | echomsg 'foo' | redir END" -scq!
foo

如果您对有关哪些文件来源的消息感兴趣,请使用-V参数,这样您的消息(echomsg)也会显示,而不需要重定向,例如:

$ ex -V +"echomsg 'foo'" -scq!
...
Searching for "vimfiles/after/plugin/**/*.vim"
Searching for ".vim/after/plugin/**/*.vim" 
foo