Vim - Puffer beim Ausblenden löschen, wenn nicht geändert

Vim - Puffer beim Ausblenden löschen, wenn nicht geändert

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 autocmdoder 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.deletewipe

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 :lsAusgabe nicht aufgeführt.

Da es sich außerdem um eine lokale Einstellung für einen Puffer handelt, müssen Sie autocmdsie 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 :lsimmer 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 :argsoder 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()

verwandte Informationen