2017-09-04 24 views
0

하나 개 이상의 마커 접는 : 기본적으로정력이 나는이처럼 보이는 디버그 파일이

==>func1: 
..... 
.. 
==>func2: 
...... 
... 
<==func2 
.. 
<==func1 
==>func3: 
...... 
... 
<==func3 

을, 나는 결국이 같은 것을 볼 수있는 기능 하나 하나를 접을 수 있도록하고 싶습니다 : 여전히

+-- x lines: ==> func1: 
+-- x lines: ==> func3: 

하지만 func1을 확장 func2가 접힌 볼 수 :

==>func1: 
..... 
.. 
+-- x lines: ==> func2: 
.. 
<==func1 

그렇게 할 방법이 있습니까? 감사.

답변

0

타의 추종을 불허 마커 추가 핸들을 필요는 여기 EXPR 솔루션 (:h fold-expr 참조)입니다 :

setlocal foldmethod=expr 
setlocal foldexpr=GetFoldlevel(v:lnum) 

function GetFoldlevel(lnum) 
    let line = getline(a:lnum) 

    let ret = '=' 
    if line[0:2] == '==>' 
     let name = matchstr(line, '^==>\zs\w*') 
     let has_match = HasMarkerMatch(a:lnum, name) 
     if has_match 
      let ret = 'a1' 
     endif 
    elseif line[0:2] == '<==' 
     let ret ='s1' 
    endif 

    return ret 
endfunction 

function HasMarkerMatch(lnum, name) 
    let endline = line('$') 
    let current = a:lnum + 1 

    let has_match = 0 
    while current <= endline 
     let line = getline(current) 

     if line =~ '^<=='.a:name 
      let has_match = 1 
      break 
     endif 

     let current += 1 
    endwhile 

    return has_match 
endfunction 
+0

내 문제는 디버그 파일에, 예를 들어 func4에 대한 같은 함수가있을 것이다 경우가있을 수 있다는 것입니다 마커를 열지 않고 마커를 닫으면 모든 접기가 파괴됩니다 : ==> func1 : ..... .. ==> func2 : ...... ==> func4 : ... <== func2. <==func1 ==> func3 : ...... ... <== func3. 당신의 해결책은 func4 오프닝 마커가 func2의 닫는 마커로 접혀지는 문제를 제외하고는 거의 필요한 것 같습니다. 거기에 약간의 솔루션을 접는 방법을 정확하게 기능 이름에 따라 변경됩니다? –

+0

이 쌍이 된 마커 만 접으려면 답변이 업데이트됩니다. – leaf