2010-03-21 2 views
3

현재 diffed되고있는 모든 파일을 확인해야하는 vim 플러그인을 작성 중입니다. 그것은 diff이 설정된 것입니다. 나는 매뉴얼을 훑어 보았지만 많이 찾을 수 없었다.vim에서 현재 diffed중인 파일 목록을 얻는 방법

이렇게 할 수 있습니까?

이 질문은 실제로 질문 : how-to-detect-the-position-of-window-in-vim과 관련이 있습니다. 그 질문에 나는 윈도우의 위치를 ​​얻으려고했는데, 그래서 diffs 중 어느 것이 올바른 것인지 그리고 하나가 남았는지를 탐지했다. solution 나는 winnr()을 사용했습니다.

그 해결책은 단지 2 개의 창 (차이가있는 것) 만있는 경우에만 작동합니다. 나는 여러개의 윈도우가 vim에서 열려 있더라도 어느 것이 왼쪽이고 어느 것이 옳은가를 결정할 수 있도록 일반화하고 싶다. 이 내가 도착에 diff

  • 하면 diff에 대한 1 여부를 결정 버퍼링 (buffering) 문제

    1. 저에게 나열된 모든 버퍼이 각각에 대해
    2. 의 목록을 해결하기 위해 1 사용 bufwinnr()입니다 무슨 생각입니다 그것 창 번호.
    3. 창 번호에서 어느 것이 남았고 어느 것이 옳은지 결정합니다. 왼쪽은 더 작은 윈도우 번호
    4. 그리고 현재 버퍼의 winnr을 사용하여 현재 버퍼 (alt-left`alt-right`가 눌려져 있는지)가 왼쪽 또는 오른쪽인지를 결정합니다.

    이제 조각은 1과 2입니다. 1 ls 사용할 수 있지만 출력을 구문 분석해야합니다. 나열된 모든 버퍼 목록을 가져올 수있는 간단한 방법이 있습니까? 그리고 나서 그 버퍼에 대해 diff이 1인지 아닌지 확인하는 방법이 있습니다.

    간단한 해결책에 대한 제안도 환영합니다. 0에서 bufnr('$') 및 본 bufexists(nr) 버퍼를 사용하여 존재하는지 여부를 확인 가능한 모든 버퍼 번호로

  • 답변

    3
    1. 사이클.
    2. let curbuf=bufnr('%')을 사용하여 현재 버퍼 번호를 저장합니다.
    3. 각 기존 버퍼에 대해 execute "buffer ".bufnumber&diff 변수를 확인하십시오. 두 개의 숫자를 기억하되 bufwinnr()을 확인하지 마십시오.
    4. Do execute "buffer ".curbuf.
    5. 마지막 두 숫자에 대한 bufwinnr(nr) 단계에있는 전화 3

    UPD : 다른 솔루션

    let g:wlist={"0": [], "1":[]} 
    windo call add(g:wlist[&diff], bufnr('%')) 
    let g:diffbuffers=g:wlist.1 
    " here you have list of buffers with &diff option set in g:diffbuffers 
    
    관련 문제