3

I have this line in my vimrc:

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

But messages do not show up in this file immediately after they are generated-- when I run tail -f .vimmessages in the shell, messages show up slowly and somewhat erratically. I get a big dump of messages to it sometimes when I run the :messages command, but I can't figure out exactly what the pattern is. Is there a way to simply append each message as it occurs, immediately, to the end of a file?

4

2 回答 2

3

全局的问题:redir在于它没有嵌套,因此它也会导致映射和使用:redir. 而是使用

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

捕获所有消息。因为 Vim 的实现使用缓冲输出,但您仍然会遇到一些分块。

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

于 2013-02-20T07:42:09.093 回答
1

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

我浏览了 Vim 7.3 源代码,看起来好像redir是用fopenputsputc以及fclose(即 stdio)完成的。似乎没有对fflushsetbufsetbuffersetlinebufsetvbuf进行任何调用,因此重定向将始终使用系统 stdio 提供的默认缓冲(可能是某种方便大小的“块缓冲”)。

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

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

除此之外,似乎没有一种很好的方法可以对redir文件执行您想要的操作。

于 2013-02-20T07:43:48.017 回答