窗口关闭时如何删除缓冲区?

时间:2015-03-05 16:41:15

标签: vim

当我有一个新的临时缓冲区/窗口而我只做:q时,它会退出窗口但不清理缓冲区。当我退出Vim时,它会弹出并告诉我有No write since last change for buffer [No Name]

我可以选择隐藏和bufhidden

set hidden
set bufhidden=wipe

它在没有警告的情况下关闭窗口,但在关闭整个Vim程序时仍会弹出。

我尝试添加autocmd:

au BufLeave * bw

当我退出窗口时它会工作,但是当我想打开一个新的窗口/标签时它会清理缓冲区(因为它不区分开关窗口和关闭窗口)。我还尝试了BufWinLeaveWinLeave,但我没有达到我的目标。


我想出了类似的东西:

function! OnBufHidden()
  if expand("<afile>") == ""
    execute ":bw! " . expand("<abuf>")
  endif
endf


set hidden
autocmd BufHidden * call OnBufHidden()

它应该有效,但事实并非如此。 execute被执行是因为我尝试了内部的一些回声,但不确定为什么bw!没有被执行。

2 个答案:

答案 0 :(得分:2)

您可以使用以下命令在垂直临时窗口中创建临时缓冲区:

command! SC vnew | setlocal nobuflisted buftype=nofile bufhidden=wipe noswapfile

答案 1 :(得分:1)

使用:set bufhidden=wipe时,缓冲区的内容会在没有确认的情况下丢失,但只有在隐藏时才会丢失(例如通过:hide); :set hidden不执行此操作,只是启用隐藏功能。如果您使用:q且缓冲区仍然可见,您将收到确认。

为了获得你想要的东西,还要:setlocal buftype=nofile(如@ romainl的答案)。然后,你永远不会得到确认。