当我有一个新的临时缓冲区/窗口而我只做:q
时,它会退出窗口但不清理缓冲区。当我退出Vim时,它会弹出并告诉我有No write since last change for buffer [No Name]
。
我可以选择隐藏和bufhidden
set hidden
set bufhidden=wipe
它在没有警告的情况下关闭窗口,但在关闭整个Vim程序时仍会弹出。
我尝试添加autocmd:
au BufLeave * bw
当我退出窗口时它会工作,但是当我想打开一个新的窗口/标签时它会清理缓冲区(因为它不区分开关窗口和关闭窗口)。我还尝试了BufWinLeave
和WinLeave
,但我没有达到我的目标。
我想出了类似的东西:
function! OnBufHidden()
if expand("<afile>") == ""
execute ":bw! " . expand("<abuf>")
endif
endf
set hidden
autocmd BufHidden * call OnBufHidden()
它应该有效,但事实并非如此。 execute
被执行是因为我尝试了内部的一些回声,但不确定为什么bw!
没有被执行。
答案 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的答案)。然后,你永远不会得到确认。