Ich neige dazu, zwischen Dateien zu wechseln, die in verschiedenen Vim-Puffern geöffnet sind.
Beim schnellen Wechseln zwischen Dateien (z. B. aus der Quickfix-Liste, Ack-Ergebnissen, Tags) werden Dateien häufig geöffnet und dann sofort wieder ausgeblendet. Der Puffer bleibt jedoch geöffnet und verunreinigt meine Liste geöffneter Puffer.
Wie kann ich einstellen, dass die Puffer geschlossen statt ausgeblendet werden, wenn sie in keiner Weise geändert wurden?
Antwort1
Dafür gibt es keine wirklich gute Lösung, da die meisten von ihnen Mängel aufweisen.
Sie könnten versuchen :set bufhidden=delete
(siehe'bufhidden'
für weitere Einzelheiten.) Das sieht ziemlich genau nach dem aus, was Sie wollen.
Es handelt sich jedoch 'bufhidden'
um eine Einstellung, die lokal für den Puffer gilt. Sie müssen sie also für jeden neuen Puffer oder für die Puffer festlegen, die, wie von Ihnen beschrieben, flüchtig sein sollen. Sie könnten dies möglicherweise von einem autocmd
oder vielleicht mehreren von ihnen aus tun, abhängig von Ihren Kriterien, welche Puffer gelöscht werden sollen, wenn sie ausgeblendet sind.
Beachten Sie auch, dass in der Vim-Dokumentation dringend von der Verwendung dieser Option abgeraten wird!
VORSICHTIG:Wenn oder verwendet wird
unload
, gehen Änderungen in einem Puffer ohne Warnung verloren. Außerdem können diese Werte Autobefehle beschädigen, die vorübergehend zwischen Puffern wechseln.delete
wipe
Das ist also vermutlich ein aussichtsloses Unterfangen ...
Es gibt auch :set nobuflisted
(siehe'buflisted'
. In diesem Fall ist der Puffer vorhanden, wird aber in der :ls
Ausgabe nicht aufgeführt.
Da es sich außerdem um eine lokale Einstellung für einen Puffer handelt, müssen Sie autocmd
sie für neue Puffer festlegen.
Dieser hier scheint nicht so gefährlich zu sein und scheint fast das zu tun, was Sie verlangt haben. Aber dieser hier wird sogar dieaktuellPuffer oder Puffer für die geöffneten Fenster, sodass im Wesentlichen sichergestellt wird, dass er :ls
immer leer ist, was ihn nutzlos macht. Ist es in diesem Fall wirklich besser, als Puffer herumliegen zu lassen?
Schließlich können Sie Puffer nach einer großen Operation (z. B. mit :args
oder ohne Quickfix) bereinigen. Wenn Sie fertig sind und alles gespeichert haben, können Sie Folgendes verwenden:
:%bd
Dadurch werden alle Puffer geschlossen und Sie erhalten eine neue leere Datei zum Bearbeiten. (Siehe Dokumentation für:bdelete
.)
Dies kann ein nützlicher Befehl sein, wenn Sie zu etwas Neuem wechseln und nur eine kleine Handvoll Puffer behalten möchten, sodass Sie mithilfe kurzer Teilzeichenfolgen ihrer Dateinamen oder :bnext
Ähnlichem schnell zwischen ihnen wechseln können.
Antwort2
Das ist, was mir eingefallen ist, ich bin bisher zufrieden damit.
" 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()