我傾向於在不同 Vim 緩衝區中開啟的檔案之間切換。
當在檔案之間快速切換時(例如,從快速修復清單、確認結果、標籤),檔案通常會被打開,然後立即隱藏。然而緩衝區仍然打開,污染了我的開啟緩衝區清單。
如果緩衝區沒有以任何方式修改,如何將緩衝區設定為關閉而不是隱藏。
答案1
對此並沒有一個很好的解決方案,因為大多數都有缺點。
你可以嘗試:set bufhidden=delete
(參見'bufhidden'
了解更多詳細資訊。
但是'bufhidden'
是緩衝區本地的設置,因此您必須為每個新緩衝區或您所描述的想要短暫的緩衝區設置它。您可以從其中一個autocmd
或幾個緩衝區執行此操作,具體取決於隱藏時應刪除哪些緩衝區的標準。
另請注意,Vim 文件強烈建議不要使用該選項!
小心:當使用
unload
、delete
或wipe
時,緩衝區中的變更將遺失且不會發出警告。此外,這些值可能會破壞暫時在緩衝區之間切換的自動命令。
所以這可能是個無用的開始...
還有:set nobuflisted
(參見'buflisted'
,在這種情況下,緩衝區存在,只是未在:ls
輸出中列出。
它也是緩衝區的本地設置,因此您需要autocmd
在新緩衝區上設置它。
這似乎沒有那麼危險,而且似乎幾乎達到了你的要求。但這甚至會取消列出目前的緩衝區,或打開視窗的緩衝區,因此這本質上確保:ls
始終為空,這使其毫無用處,在這種情況下,您真的比保留緩衝區更好嗎?
最後,您可以在大型操作(例如涉及:args
或快速修復)後清理緩衝區,完成並保存所有內容後,您可以使用:
:%bd
這將關閉所有緩衝區並留下一個新的空白檔案供您編輯。 (請參閱文檔:bdelete
.)
一旦您切換到新的內容並且您希望能夠僅保留少量緩衝區,這可能是一個有用的命令,這樣您就可以使用檔案名稱或:bnext
朋友的短子字串在它們之間快速切換。
答案2
這就是我想到的,到目前為止我對此感到滿意。
" Unlist unchanged buffers if they are hidden
function! BufferUnchanged()
return exists("b:undo_seq_load") && b:undo_seq_load==changenr()
endfunction
function! UnlistUnchangedBuffer()
if BufferUnchanged()
set nobuflisted
endif
endfunction
" Save the undo sequence position on buffer load
autocmd BufReadPost * let b:undo_seq_load=changenr()
autocmd BufWinLeave * call UnlistUnchangedBuffer()