我的vimrc中有这一行:
redir! >/Users/seanmackesey/.vim/.vimmessages
但是消息在生成后不会立即显示在此文件中 - 当我在shell中运行tail -f .vimmessages
时,消息显示缓慢而且有些不规律。当我运行:messages
命令时,我得到一大堆消息有时,但我无法确切地知道模式是什么。有没有办法简单地将每条消息立即附加到文件的末尾?
答案 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
对文件执行所需的操作。