Tôi không chắc chắn làm thế nào để có được bộ đệm lâu đời nhất liên quan đến thời gian chỉnh sửa, nhưng thay vào đó, người ta có thể cố gắng đóng bộ đệm cũ nhất chưa được chỉnh sửa. Cái gì đó như:
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()
Ghi chú:
vim.buffers
là danh sách mọi bộ đệm được mở trong phiên hiện tại, do đó, nó cũng bao gồm các bộ đệm chưa niêm yết. Nó không giống như danh sách được trả về :ls
.
- Do đó, chúng ta phải lọc ra các bộ đệm bị ẩn hoặc bị xóa. Điều này có thể được kiểm tra bằng cách sử dụng
options['buflisted']
.
- Tương tự,
options['modified']
cho phép chúng tôi kiểm tra nếu bộ đệm được sửa đổi.
N
là số lượng bộ đệm chưa được sửa đổi, được liệt kê mà bạn muốn mở.
Nhờ câu trả lời của Luc Hermitte mà tôi đã học được cách lấy dấu thời gian, thay vào đó, bạn có thể sử dụng cách sau đây để loại bỏ trạng thái không hoạt động lâu đời nhất trước tiê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))