Saya tidak yakin bagaimana cara mendapatkan buffer tertua sehubungan dengan waktu pengeditan, tetapi orang bisa, sebaliknya, mencoba untuk menutup buffer yang belum diedit yang tertua. Sesuatu seperti:
function CloseLast ()
python <<EOF
import vim
N = 10
listed_buffers = [b for b in vim.buffers if b.options['buflisted'] and not b.options['modified']]
for i in range (0, len (listed_buffers) - N):
vim.command (':bd' + str (listed_buffers[i].number))
EOF
endfunction
autocmd BufNew * call CloseLast()
Catatan:
vim.buffers
adalah daftar setiap buffer yang dibuka di sesi saat ini, sehingga juga termasuk buffer yang tidak terdaftar. Ini tidak sama dengan daftar yang dikembalikan oleh :ls
.
- Karena itu, kita harus memfilter buffer yang tersembunyi atau dihapus. Ini dapat diperiksa menggunakan
options['buflisted']
.
- Demikian pula,
options['modified']
mari kita periksa apakah buffer diubah.
N
adalah jumlah buffer terdaftar yang tidak dimodifikasi yang ingin Anda buka.
Berkat jawaban Luc Hermitte dari mana saya belajar cara mendapatkan stempel waktu, Anda dapat menggunakan yang berikut ini, untuk mengeluarkan yang tidak aktif terlama dulu:
listed_buffers = (b for b in vim.buffers if b.options['buflisted'] and not b.options['modified'])
oldest_buffers = sorted (listed_buffers, key = lambda b: eval('getftime("' + b.name + '")'))
for i in range (0, len (oldest_buffers) - N):
vim.command (':bd' + str (oldest_buffers[i].number))