我想要一个函数将文本追加到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
窗口弹出一小段时间。这有点让人分心。
我的问题有更好的解决方案吗?
答案 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")