我想要一个函数将文本附加到
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] 举报,一经查实,本站将立刻删除。