2017-09-04 112 views
0

我有一個調試文件看起來像這樣摺疊:VIM有多於一個的標誌

==>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