2013-09-27 2 views
0

Vim이 실제로 표시 할 버퍼의 행 수를 계산할 수 있기를 원합니다. 특히 : 그것은 같은 것을 보이도록Vim에서 표시되는 줄 수를 어떻게 계산합니까?

나는, 하나 개의 루트 요소와 나는 한 줄에 모든 필드 요소를 접혀이

<fields> 
    <field field="Delegation"> 
    ... 
    </field> 
    <field field="Assignment"> 
    ... 
    </field> 
    ⋮ 
</fields> 

과 같은 동일한 유형의 여러 하위 요소 인 XML 파일이 이 :

<fields> 
+-- 12 lines: <field field="Delegation"> 
+-- 7 lines: <field field="Assignment"> 
    ⋮ 
</fields> 

결과는 파일의 필드 요소 수를 세는 것입니다. 이제 나는 :g/field field/p 또는 다른 vim 명령이나 외부 프로그램 등으로이 작업을 수행 할 수 있음을 알고 있습니다. 그러나 set number과 마찬가지로 정보의 대략적인 아이디어를 얻기 위해 어딘가를 볼 수 있기를 바랍니다. set relativenumber, 실행할 명령을 생각할 필요가 없습니다.

내가하는 일은 vim이 현재 창에 얼마나 많은 "표시 줄"이 있는지, 또는 현재 "표시된 줄"이 무엇인지를 알려주는 것입니다.

내가 알 수있는 것부터, vim은 현재이 상자를 지원하지 않습니다. 내가 이런 식으로 우연히 만났던 유일한 참조는 this question이었습니다. 두 답변을 통해 vim이이를 수행 할 수 없다고 명시되어있는 것처럼 보였습니다.

어떤 종류의 마술 플러그인이 있더라도 vim이이를 수행 할 수없는 경우가 있습니까? 필요하다면 나는 자기 자신을 쓰는 것에 싫어하지 않을 것이다. 그러나 나는 그런 것을 쓰기 위해 무엇이 필요한지를 찾기 시작 해야할지조차 모른다.

다시 말하지만, "xml 요소의 하위 요소 수를 세는"쉬운 방법은 수백 가지가 있다는 것을 알고 있습니다. 이처럼 파일을 편집 할 때 내가 사용하고있는 숫자 요소 (예 : # 23/100)를 대략 알고 싶습니다.

답변

0

글쎄, 보이는 선을 계산해야합니다. 정상적으로 작동해야합니다.

fu! VisibleLines(start, end) 
let result=0 
let i=a:start 

while (i <= a:end) 
if foldclosed(i) > 0 
    let i = foldclosedend(i)+1 
    continue 
    endif 
    let i+=1 
    let result += 1 
endw 
return result 
endfu 
com! -range VisibleLines :echo VisibleLines(<line1>,<line2>) 
+0

고마워요! 이것은 - 거의 - 완벽하게 작동합니다. 나는 방금 if 블럭 안의 결과를 증가시킬 필요가있어서 각 폴딩 된 블럭을 0 대신에 1 줄로 계산한다. (내가 보았던 것이기 때문에 내가 가진 접은 태그의 수를 세는 것이다.) – Danwizard208

+0

물론 당신이 옳습니다. –

0

ingo-library plugin에는이를 계산하는 기능이 있습니다. 시작 및 끝 줄 번호를 전달해야하며 표시되고 펼쳐진 줄 수를 반환합니다. 현재 시각적 선택의 예 :

:echo ingo#window#dimensions#NetVisibleLines(line("'<"), line("'>")) 
+0

감사합니다. 라이브러리의 개별 기능에 대한 문서를 얻는 좋은 방법이 있습니까? 이 경우 함수는 알아낼 수있을 정도로 단순합니다 (위의 기독교 기능과 거의 동일하게 보입니다). 그러나 라이브러리의 다른 함수가 도움이 될지 궁금합니다. 나는 그리스도인의 대답을 받아 들였습니다. 어떻게 완성 되었는가에 대한 세부 사항을 보여줌으로써 우리는 좀 더 복잡한 것을 원한다면 나와 다른 사람들에게 도움이 될 것이라고 생각합니다. – Danwizard208

+0

@ Danwizard208 나는 그들을 소스 코드에서 직접적으로 문서화하려하지만, 현재 레벨은 다양하다. 대중 소비를위한 것보다 내 플러그인에 대한 지원 라이브러리가 더 많습니다. –

관련 문제