vim: số lượng bộ đệm


12

trong vim, với

:buffers

Tôi nhận được số lượng của tất cả các bộ đệm giống nhau với

:ls

, nhưng
làm thế nào tôi có thể có được tổng số bộ đệm?

Câu trả lời:



14

Câu trả lời cho đến nay là quá hacky. Đây là cách tích hợp của vim:

len(getbufinfo({'buflisted':1}))

Như mọi khi, hãy xem trợ giúp của vim ( :h getbufinfo()) để được giải thích chính thức.


3
Tại thời điểm này được hỏi, câu trả lời của bạn sẽ không thể thực hiện được vì Vim không hỗ trợ nó. Bây giờ có lẽ là giải pháp tối ưu.
Heptite

4

Theo hiểu biết của tôi, không có phương thức tích hợp nào trong Vim để làm điều này, nhưng bạn có thể tạo một hàm:

function! NrBufs()
    let i = bufnr('$')
    let j = 0
    while i >= 1
        if buflisted(i)
            let j+=1
        endif
        let i-=1
    endwhile
    return j
endfunction

Đặt ở trên trong một tệp văn bản với tên của nó kết thúc bằng .vim ,: nguồn nó, sau đó bạn có thể làm một cái gì đó như:

:let buffer_count = NrBufs()
:echo buffer_count

Lưu ý ngày 21 tháng 6: Nếu bạn có phiên bản Vim gần đây vào năm 2017, câu trả lời của Gid dưới đây là giải pháp tối ưu.


1
Lưu ý cho những người khác tìm thấy điều này: Tôi nghĩ rằng nó phải là 'trong khi i> 0', vì số bộ đệm bắt đầu từ 1, không phải 0.
Meta

@Meta: Tôi đã sửa câu trả lời của mình. Cảm ơn. Mặc dù nó không thực sự là một vấn đề vì sẽ luôn có ít nhất một bộ đệm.
Heptite

3

Bạn đang tìm kiếm có lẽ cho?

:echo(bufnr('$'))

Điều này sẽ "đếm" bộ đệm đã được tải vì Vim không bao giờ tái chế số bộ đệm, cộng với đó sẽ là: echo bufnr ('$')
Heptite

(Được rồi, phiên bản của bạn sẽ lặp lại đúng số lượng bộ đệm được tải cuối cùng, nhưng cú pháp hơi khó hiểu.)
Heptite

@Heptite - Vâng, đó là một sai lầm. Về vấn đề cú pháp, tôi thấy không có sự khác biệt giữa hai.
Rook

Chúng làm điều tương tự, nhưng: echo là một lệnh chứ không phải là hàm và không bao giờ có thể được sử dụng như một hàm (trừ khi bạn bọc hàm do người dùng định nghĩa của riêng bạn xung quanh: echo). Sự khác biệt rất quan trọng trong nhiều bối cảnh của VimL.
Heptite

@Heptite - Tôi phải thừa nhận Tôi không biết bạn vừa nói gì ... (nhiều hơn về một kỹ sư băng keo ở đây; ít lập trình viên "code is beautiful")
Rook

2

Nếu bạn muốn giải pháp của Heptite là một lệnh, hãy thêm dòng sau vào tệp .vimrc của bạn:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.