Vim - 変更されていない場合に隠されたバッファを削除する

Vim - 変更されていない場合に隠されたバッファを削除する

私は別のVimバッファに開いているファイルを切り替える傾向があります。

ファイルをすばやく切り替えると(たとえば、クイックフィックスリスト、結果の確認、タグなど)、ファイルが開いてすぐに非表示になることがよくあります。ただし、バッファは開いたままで、開いているバッファのリストが汚染されます。

バッファが何らかの方法で変更されていない場合、バッファを非表示にせずに閉じるように設定するにはどうすればよいですか?

答え1

ほとんどの場合、欠点があるため、これに対する優れた解決策はありません。

試してみることができます:set bufhidden=delete(参照'bufhidden'詳しくはこちらをご覧ください。 )これはあなたが望むものと非常に似ているようです。

ただし、'bufhidden'設定はバッファに対してローカルなので、新しいバッファごとに設定する必要があります。非表示のときにバッファを削除する必要がある基準に応じて、これらのバッファの1つまたは複数でautocmdこれを行うことができます。

さらに、Vimのドキュメントではこのオプションを使用しないことを強くお勧めします!

注意深い:unloaddeleteまたはを使用すると、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()

関連情報