Não sei como obter os buffers mais antigos em relação ao tempo de edição, mas, em vez disso, é possível tentar fechar os buffers mais antigos não editados. 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
é uma lista de todos os buffers abertos na sessão atual, portanto, também inclui buffers não listados. Não é o mesmo que a lista retornada por :ls
.
- Portanto, devemos filtrar os buffers ocultos ou excluídos. Isso pode ser verificado usando
options['buflisted']
.
- Da mesma forma,
options['modified']
vamos verificar se o buffer está modificado.
N
é o número de buffers listados não modificados que você deseja abrir.
Graças à resposta de Luc Hermitte, da qual aprendi como obter os carimbos de data e hora, você pode usar o seguinte, para eliminar primeiro o inativo mais antigo:
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))