Vì nó không được phép làm ảnh hưởng đến danh sách đệm với một :bufdo
lệnh -argument (xem :help :bufdo
), chúng ta phải sử dụng nhiều dài dòng nhưng khá đơn giản kịch bản Vim.
Hàm dưới đây liệt kê tất cả các số đệm hiện và xóa những người mà không có một tên (hiển thị như [No Name]
trong giao diện ) và bất kỳ thay đổi chưa được lưu. (Sau này được đảm bảo bởi lệnh :bdelete
, mà không có dấu hiệu !
, không xóa bộ đệm đã sửa đổi).
function! DeleteEmptyBuffers()
let [i, n; empty] = [1, bufnr('$')]
while i <= n
if bufexists(i) && bufname(i) == ''
call add(empty, i)
endif
let i += 1
endwhile
if len(empty) > 0
exe 'bdelete' join(empty)
endif
endfunction
Nếu bạn muốn xoá bộ đệm rỗng hoàn toàn, bao gồm bốc dỡ người, xem xét (cẩn thận!) Thay thế bdelete
với bwipeout
(xem :help :bd
, :help :bw
).
Để kiểm tra nội dung của bộ đệm cần xóa, hãy sử dụng chức năng getbufline()
. Ví dụ: để chắc chắn rằng bộ đệm không chứa văn bản trong đó, hãy sửa đổi câu lệnh if
bên trong vòng lặp while
như sau.
if bufloaded(i) && bufname(i) == '' && getbufline(i, 1, 2) == ['']
Lưu ý rằng bufexists()
được đổi thành bufloaded()
tại đây. Nó là cần thiết vì chỉ có thể lấy nội dung của những bộ đệm được tải (đối với bộ đệm chưa tải getbufline()
trả về danh sách trống bất kể nội dung của chúng).
Nguồn
2011-07-03 04:24:04
Lưu ý rằng lệnh ': bufdo'-argument không được thêm hoặc xóa bộ đệm (xem': help: bufdo'). –