如何使用vim脚本将文本附加到文件?

时间:2014-04-15 16:43:49

标签: vim

我想要一个函数将文本追加到vim中的文件(而不是缓冲区)。据我所知,没有appendfile()。但是,可以使用readfile()writefile()

模拟所需的功能
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()时,cmd.exe窗口弹出一小段时间。这有点让人分心。

我的问题有更好的解决方案吗?

2 个答案:

答案 0 :(得分:12)

如果当前缓冲区中有一系列要追加到日志文件的行,则

:[range]w >> my.log

完全符合您的要求。 (好吧,也许不完全一样。例如,它具有使my.log替换文件的副作用,如果您打算使用:e#或其他东西,它可能会让您感到困惑。)

如果您已在变量中有日志消息,那么您可以打开暂存缓冲区,使用append():put将行添加到暂存缓冲区,然后{{ 1}}并关闭暂存缓冲区。

:w >> my.log

这是一个完整的日志功能。还有改进的余地:如果您有拆分窗口,:help special-buffers :help :put :help :w :new的组合可能无法恢复布局,并且空缓冲区上的:q会留下您可能的空行不想要。

:put

答案 1 :(得分:2)

根据:help writefile()

When {flags} contains "a" then append mode is used, lines are
appended to the file: >
    :call writefile(["foo"], "event.log", "a")
    :call writefile(["bar"], "event.log", "a")