2014-04-15 90 views
3

我想要一個函數將文本附加到vim中的文件(而不是緩衝區)。據我所知,沒有appendfile()。但所需的功能可以與readfile()writefile()效仿:如何使用vim腳本將文本附加到文件?

fu! TQ84_log (S) 

    let l:f = readfile('my.log') 
    call add(l:f, a:S) 
    call writefile(l:f, 'my.log') 

endfu 

由於my.log可以變得非常大,我寧願不讀,當我想添加一行寫整個文件。所以,我想出了另一種「解決方案」:

fu! TQ84_log (S) 
    silent execute "!echo " . a:S . ">> my.log"  
endfu 

這個工程(在Windows上,這是)如預期。然而,當我調用TQ84_log()時,該窗口會彈出一小段時間。這有點讓人分心。

對我的問題有更好的解決方案嗎?

+0

如果您沒有找到替代方法,可以使用[shell.vim plugin](http://www.vim.org/scripts/script.php?script_id=3123)避開cmd.exe窗口。 。 – mMontu

+3

您應該使用'function'而不是'fu'並使用更多可讀的變量名稱。如果你不這樣做,至少爲了你自己。 – romainl

回答

7

如果你有一個範圍在當前的緩衝區,你要追加到日誌文件中的行,然後

:[range]w >> my.log 

不正是你想要的。 (好吧,也許不完全是。例如,它具有使my.log輪換文件的副作用,如果你打算使用:e#什麼的,它可以把你弄得一團糟。)

如果你已經有日誌消息在一個變量中,你可以打開一個暫存緩衝區,使用append():put將行添加到你的暫存緩衝區,然後:w >> my.log並關閉暫存緩衝區。

:help special-buffers 
:help :put 
:help :w 

這是一個完整的日誌功能。還有改進的空間:如果您有拆分窗口,則:new:q的組合可能無法恢復佈局,並且空的緩衝區上的:put會留下空白行,而您可能不想要。

function! Mylog(message, file) 
    new 
    setlocal buftype=nofile bufhidden=hide noswapfile nobuflisted 
    put=a:message 
    execute 'w >>' a:file 
    q 
endfun 
+0

這是完美的,現在我可以寫入我的FIFO容易peasy。我使用fifo通過ssh將文本傳遞給另一臺計算機。 – Sukima

相關問題