我有一个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消息?我希望显示消息,因为这些是进度消息。
感谢。
答案 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