vim : 총 버퍼 수


12

vim에서

:buffers

나는 모든 버퍼의 수를 동일하게 얻는다.

:ls

하지만
어떻게 총 버퍼 수를 얻을 수 있습니까?

답변:



14

지금까지의 답변은 너무 해킹 적입니다. 다음은 vim의 기본 제공 방법입니다.

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

항상 그렇듯이 :h getbufinfo()공식 설명 은 vim의 도움말 ( )을 참조하십시오 .


3
이 질문을 받았을 때 Vim이 지원하지 않았기 때문에 귀하의 답변이 불가능했을 것입니다. 아마도 아마도 최적의 솔루션 일 것입니다.
Heptite

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 it, 다음과 같이 할 수 있습니다.

:let buffer_count = NrBufs()
:echo buffer_count

참고 : 2017 년 기준 최신 버전의 Vim을 사용하는 경우 아래 Gid의 답변이 최적의 솔루션입니다.


1
이것을 찾는 다른 사람들을위한 참고 사항 : 버퍼 번호는 0이 아닌 1부터 시작하기 때문에 'while i> 0'이어야한다고 생각합니다.
Meta

@Meta : 나는 대답을 고쳤다. 감사. 항상 하나 이상의 버퍼가 있기 때문에 실제로 문제가되지는 않지만.
Heptite

3

당신은 아마 찾고 있습니까?

:echo(bufnr('$'))

Vim은 버퍼 수를 재활용하지 때문에이 언로드 된 버퍼를 "계산"할 것이다, 플러스가 될 것이다 : 에코 bufnr를 ( '$')
Heptite

(좋아, 당신의 버전은 마지막으로로드 된 버퍼의 수를 적절히 반향하지만 구문은 약간 혼란 스럽다.)
Heptite

@ Heptite-네, 그건 실수였습니다. 구문 문제에 관해서는 둘 사이에 차이가 없습니다.
Rook

그들은 같은 일을하지만 : echo는 명령이 아니라 함수이며, 함수처럼 사용할 수 없습니다 (사용자 정의 함수를 : echo를 감싸지 않는 한). VimL의 많은 맥락에서 차이가 중요합니다.
Heptite

; @Heptite - 내가 방금 말한 아무 생각 ...도 없어 인정합니다 (적은의 프로그래머 "코드 아름답다"여기에 덕트 테이프 엔지니어의 이상)
루크

2

Heptite의 솔루션을 명령으로 사용하려면 .vimrc 파일에 다음을 추가하십시오.

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.