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

时间:2013-02-19 20:17:14

标签: vim

我的vimrc中有这一行:

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

但是消息在生成后不会立即显示在此文件中 - 当我在shell中运行tail -f .vimmessages时,消息显示缓慢而且有些不规律。当我运行:messages命令时,我得到一大堆消息有时,但我无法确切地知道模式是什么。有没有办法简单地将每条消息立即附加到文件的末尾?

2 个答案:

答案 0 :(得分:3)

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

:set verbosefile=/Users/seanmackesey/.vim/.vimmessages

捕获所有消息。因为Vim的实现使用了缓冲输出,所以你仍然会经历一些分块。

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

答案 1 :(得分:1)

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

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

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

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

除此之外,似乎没有一种很好的方法可以通过redir对文件执行所需的操作。