微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用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窗口会弹出很短的时间.这有点让人分心.

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

解决方法

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

:[range]w >> my.log

完全符合你的要求. (好吧,也许不完全一样.例如,它有使my.log成为备用文件的副作用,如果你打算使用:e#或其他东西,它可能会搞砸你.)

如果你已经在变量中有了日志消息,那么你可以打开一个临时缓冲区,使用append()或:put将这些行添加到你的暂存缓冲区,然后:w>> my.log并关闭暂存缓冲区.

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

这是一个完整的日志功能.还有改进的余地:如果你有拆分窗口,新的和:q的组合可能无法恢复布局,并且:放在一个空的缓冲区会留下你可能不想要的空白行.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐