vim:合計バッファ数


12

vimで

:buffers

私はすべてのバッファの数を同じにしています

:ls

しかし、
どうすればバッファの総数を取得できますか?

回答:


9

ヘプタイトのソリューションと同じアイデアですが、1つのライナーとして。他の多くのことがこの方法で行われる可能性があります:バッファーの名前を取得(マップのおかげで)、パターン一致するワイプアウトバッファーhttps://stackoverflow.com/questions/2974192/how-can-i-pare-down- vims-buffer-list-to-only-include-active-buffers / 2974600#2974600nなど

echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

14

これまでの回答はあまりにもハッキリです。vimの組み込み方法は次のとおりです。

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

いつものよう:h getbufinfo()に、公式説明についてはvimのヘルプ()を参照してください。


3
これが尋ねられたとき、Vimはそれをサポートしていなかったので、あなたの答えは不可能だったでしょう。今ではおそらくそれが最適なソリューションです。
ヘプタイト2017年

4

私の知る限り、Vimにはこれを行うための組み込みメソッドはありませんが、関数を作成できます。

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

上記のファイル名を.vim、:sourceで終わるテキストファイルに入力すると、次のようになります。

:let buffer_count = NrBufs()
:echo buffer_count

6月21日注: 2017年の時点でVimの最新バージョンをお持ちの場合、以下のGidの回答が最適なソリューションです。


1
これを見つける他の人のための注意:私は「私は> 0ながら」、バッファ番号は1から開始するので、それがあるべきだと思う、ない0を
メタ

@Meta:私は私の答えを修正しました。ありがとう。ただし、少なくとも1つのバッファが常に存在するため、実際には問題にはなりません。
ヘプタイト2013

3

あなたはおそらく探していますか?

:echo(bufnr('$'))

これは、Vimがバッファー番号をリサイクルしないため、アンロードされたバッファーを「カウント」します。さらに、次のようにする必要があります:echo bufnr( '$')
Heptite

(さて、あなたのバージョンは最後にロードされたバッファの数を正しくエコーしますが、構文は少し混乱しています。)
Heptite

@ヘプタイト-はい、それは間違いでした。構文の問題については、2つの間に違いはありません。
2010年

それらは同じことを行いますが、:echoはコマンドであり関数ではなく、関数のように使用することはできません(独自のユーザー定義関数を:echoでラップしない限り)。VimLの多くのコンテキストでは、違いが重要です。
ヘプタイト2011年

@Heptite-私はあなたが今言ったことを私は知らないことを認めなければなりません...(ここではダクトテープエンジニアのより多く、「コードは美しい」プログラマーのより少ない)
Rook

2

Heptiteのソリューションをコマンドとして使用する場合は、.vimrcファイルに以下を追加します。

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.