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

如何使用vim脚本将文本附加到文件中?,vim,Vim,我想要一个函数将文本附加到vim中的文件(而不是缓冲区)。据我所知,没有appendfile()。但是所需的功能可以通过readfile()和writefile()进行仿真: 由于my.log可能会变得相当大,因此当我想添加一行时,我宁愿不读写整个文件。因此,我提出了另一个“解决方案”: 这项工作(即在windows上)与预期一样有效。然而,当我调用TQ84_log()时,cmd.exe窗口会短时间弹出。这有点让人分心 有更好的解决方案吗?如果当前缓冲区中有一系列要附加到日志文件的行,那么 :[

我想要一个函数将文本附加到vim中的文件(而不是缓冲区)。据我所知,没有
appendfile()
。但是所需的功能可以通过
readfile()
writefile()
进行仿真:

由于
my.log
可能会变得相当大,因此当我想添加一行时,我宁愿不读写整个文件。因此,我提出了另一个“解决方案”:

这项工作(即在windows上)与预期一样有效。然而,当我调用
TQ84_log()
时,
cmd.exe
窗口会短时间弹出。这有点让人分心


有更好的解决方案吗?

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

:[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

根据
:help writefile()


如果找不到替代方法,可以避免使用cmd.exe窗口。应使用
函数
而不是
fu
,并使用可读性更强的变量名。如果你不为别人这样做,至少为你自己这样做。这太完美了,现在我可以给我的FIFO easy peasy写信了。我使用先进先出(fifo)通过ssh将文本传递给另一台计算机。这是在我回答问题几个月后发布的2014-11-05版7.4.503中添加的。不过,很高兴知道这一点,值得投一票。
:help special-buffers
:help :put
:help :w
function! Mylog(message, file)
  new
  setlocal buftype=nofile bufhidden=hide noswapfile nobuflisted
  put=a:message
  execute 'w >>' a:file
  q
endfun
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")