Я не впевнений, як отримати найстаріші буфери щодо часу редагування, але натомість можна спробувати закрити найстаріші нередаговані буфери. Щось на зразок:
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()
Примітки:
vim.buffers
- це список кожного буфера, відкритого в поточному сеансі, тому він також включає буфери, які не є в списку. Це не те саме, що список, повернутий :ls
.
- Тому ми повинні відфільтрувати приховані або видалені буфери. Це можна перевірити за допомогою
options['buflisted']
.
- Аналогічно
options['modified']
давайте перевірити, чи буфер модифікований.
N
- кількість немодифікованих, перелічених буферів, які ви хочете відкрити.
Завдяки відповіді Люка Ермітта, з якої я дізнався, як отримати часові позначки, ви можете скористатися наступним, щоб першим вигнати найстаршого неактивного:
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))