我想要一个函数将文本附加到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
Run Code Online (Sandbox Code Playgroud)
因为my.log可以增长很大,所以当我想添加一行时,我宁愿不读写整个文件.所以,我想出了另一个"解决方案":
fu! TQ84_log (S)
silent execute "!echo " . a:S . ">> my.log"
endfu
Run Code Online (Sandbox Code Playgroud)
这可以正常工作(在Windows上).然而,当我调用时TQ84_log(),该cmd.exe窗口弹出一小段时间.这有点让人分心.
对我的问题有更好的解决方案吗?
ben*_*her 12
如果当前缓冲区中有一系列要追加到日志文件的行,那么
:[range]w >> my.log
Run Code Online (Sandbox Code Playgroud)
完全符合你的要求.(好吧,也许不完全一样.例如,它具有制作my.log备用文件的副作用,如果你打算使用:e#或者某些东西,它可能会搞砸你.)
如果您已在变量中包含日志消息,则可以打开暂存缓冲区,使用append()或:put将行添加到暂存缓冲区,然后:w >> my.log关闭暂存缓冲区.
:help special-buffers
:help :put
:help :w
Run Code Online (Sandbox Code Playgroud)
这是一个完整的日志功能.还有改进的余地:如果你有分割窗口,可能会恢复布局:new,:q也可能不会恢复布局,而:put在空缓冲区上会留下你可能不想要的空白行.
function! Mylog(message, file)
new
setlocal buftype=nofile bufhidden=hide noswapfile nobuflisted
put=a:message
execute 'w >>' a:file
q
endfun
Run Code Online (Sandbox Code Playgroud)
根据: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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |