如何消除Vim中消息重定向到文件的延迟?

如何消除Vim中消息重定向到文件的延迟?,vim,Vim,我的vimrc中有一行: redir! >/Users/seanmackesey/.vim/.vimmessages 但是消息不会在生成后立即显示在这个文件中——当我在shell中运行tail-f.vimmessages时,消息显示缓慢且有些不稳定。有时,当我运行:messages命令时,我会收到大量的消息,但我无法准确地找出模式是什么。有没有一种方法可以在消息出现时立即将其附加到文件末尾?全局的:redir的问题是它没有嵌套,因此它也会导致使用:redir的映射和函数出错。相反,使用

我的vimrc中有一行:

redir! >/Users/seanmackesey/.vim/.vimmessages

但是消息不会在生成后立即显示在这个文件中——当我在shell中运行
tail-f.vimmessages
时,消息显示缓慢且有些不稳定。有时,当我运行
:messages
命令时,我会收到大量的消息,但我无法准确地找出模式是什么。有没有一种方法可以在消息出现时立即将其附加到文件末尾?

全局的
:redir
的问题是它没有嵌套,因此它也会导致使用
:redir
的映射和函数出错。相反,使用

:set verbosefile=/Users/seanmackesey/.vim/.vimmessages
捕获所有消息。因为Vim的实现使用缓冲输出,所以您仍然会经历一些分块


您没有提到要在何处使用此输出,因此很难给出更好的建议。如果确实需要立即输出到外部文件,则必须使用
writefile()
或使用嵌入式脚本语言来写入和刷新文件。

这似乎更可能是简单的数据缓冲,而不是任何特定的时间延迟

我浏览了Vim 7.3源代码,它看起来像是用fopen、put、putc和fclose(即stdio)完成了redir。似乎没有任何对fflush、setbuf、setbuffer、setlinebuf或setvbuf的调用,因此重定向将始终使用系统stdio提供的默认缓冲(可能是一些方便大小的“块缓冲”)

您可以定期停止并重新启动重定向以有效刷新数据:

redir END | redir! >>~/.vim/.vimmessages

除此之外,似乎没有一种很好的方法来实现您对文件的
redir
操作。

谢谢Ingo,很高兴了解
redir
。我的意图是将输出用作调试的控制台。在测试函数时,我希望将其作为一个拆分窗口或在相邻的shell窗口中打开。
:messages
命令总是在列表顶部打开,在一个我不知道如何分割的缓冲区中(只说“按ENTER键或键入命令继续”,然后执行任一操作将其关闭),请查看芯片的。没有使用过它,但它允许并排查看消息和其他有趣的东西。对我来说,临时插入
:echomg
就足够了。Hmmm我可能最终在包装器函数中实现start/stop以生成调试消息。谢谢