No estoy seguro de cómo obtener los buffers más antiguos con respecto al tiempo de edición, pero uno podría, en cambio, tratar de cerrar los buffers más antiguos sin editar. Algo como:
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()
Notas:
vim.buffers
es una lista de cada búfer abierto en la sesión actual, por lo que también incluye búferes no listados. No es lo mismo que la lista devuelta por :ls
.
- Por lo tanto, debemos filtrar los búferes ocultos o eliminados. Esto se puede verificar usando
options['buflisted']
.
- Del mismo modo,
options['modified']
nos permite verificar si el búfer está modificado.
N
es la cantidad de búferes listados no modificados que desea abrir.
Gracias a la respuesta de Luc Hermitte de la que aprendí cómo obtener las marcas de tiempo, podría usar lo siguiente en su lugar, para eliminar primero al inactivo más antiguo:
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))