2013-02-19 53 views
3

我此行我的vimrc:如何消除重定向到Vim文件的延遲?

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

但消息沒有在這個文件後立即將是generated--當我在shell中運行tail -f .vimmessages顯示,消息顯示慢,有點不正常。當我運行:messages命令時,我得到一大堆信息有時,但我無法弄清楚模式是什麼。是否有辦法將每個消息立即附加到文件末尾?

回答

3

全球:redir的問題是它不會嵌套,所以它也會導致使用:redir的映射和函數的錯誤。相反,使用

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

捕獲所有消息。因爲Vim的實現使用了緩衝輸出,不過你仍然會經歷一些分塊。

您沒有提及您打算使用此輸出的位置,因此很難提供更好的建議。如果您確實需要立即輸出到外部文件,則必須使用writefile()或使用嵌入式腳本語言來寫入和刷新文件。

+0

謝謝Ingo,很高興知道'redir'。我的意圖是使用輸出作爲調試的控制檯。在測試函數時,我想將其打開爲split或在相鄰的shell窗口中打開。 ':messages'命令總是在列表頂部打開,並在一個緩衝區中打開,我無法弄清楚如何拆分(只是說「按ENTER鍵或鍵入命令繼續」,並關閉它) – 2013-02-20 14:08:47

+1

有一個看看Chip的[Decho插件](http://vim.sourceforge.net/scripts/script.php?script_id=120)。沒有使用它,但它允許查看消息並排和其他花哨的東西。對我而言,臨時插入':echomsg'就足夠了。 – 2013-02-20 15:18:51

1

這似乎更可能是簡單的數據緩衝,而不是任何特定的時間延遲。

我通過Vim的7.3源grepped,它看起來像redir的fopen完成,提出,和putc將,和FCLOSE(即標準輸入輸出)。有沒有出現任何調用fflushsetbuf以setbuffersetlinebuf與,或setvbuf用來所以重定向將始終使用由系統的標準輸入輸出的(可能是「塊緩衝」提供的默認緩衝一些方便的大小)。

您可以定期停止並重新啓動重定向有效地刷新數據:

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

短,似乎沒有成爲一個很好的方法,你想和redir到一個文件中的內容。

+0

嗯,我可能會最終實現啓動/停止包裝函數來生成調試消息。謝謝 – 2013-02-20 14:10:17