2012-01-06 21 views

Odpowiedz

1

Najprawdopodobniej można utworzyć funkcję, aby sprawdzić, czy plik ma żadnych zagięć, jak:

function HasFoldedLine() 
    let lnum=1 
    while lnum <= line("$") 
     if (foldclosed(lnum) > -1) 
      return 1 
     endif 
     let lnum+=1 
    endwhile 
    return 0 
endfu 

teraz można używać go z jakimś autocommand, np:

au CursorHold * if HasFoldedLine() == 1 | set fdc=1 | else |set fdc=0 | endif 

HTH

+0

To jest raczej powolne. –

+0

Masz rację, pokaż nam teraz lepsze rozwiązanie. –

+0

Mam zamiar, później :) –

4

Moja metoda jest szybsza niż @Zsolt Botykai, gdy pliki stają się wystarczająco duże. W przypadku małych plików wyobrażam sobie, że różnica czasu jest niewielka. Zamiast sprawdzać każdą linię pod kątem, funkcja po prostu próbuje przechodzić między fałdami. Jeśli kursor się nie porusza, nie ma fałd.

function HasFolds() 
    "Attempt to move between folds, checking line numbers to see if it worked. 
    "If it did, there are folds. 

    function! HasFoldsInner() 
     let origline=line('.') 
     :norm zk 
     if origline==line('.') 
      :norm zj 
      if origline==line('.') 
       return 0 
      else 
       return 1 
      endif 
     else 
      return 1 
     endif 
     return 0 
    endfunction 

    let l:winview=winsaveview() "save window and cursor position 
    let foldsexist=HasFoldsInner() 
    if foldsexist 
     set foldcolumn=1 
    else 
     "Move to the end of the current fold and check again in case the 
     "cursor was on the sole fold in the file when we checked 
     if line('.')!=1 
      :norm [z 
      :norm k 
     else 
      :norm ]z 
      :norm j 
     endif 
     let foldsexist=HasFoldsInner() 
     if foldsexist 
      set foldcolumn=1 
     else 
      set foldcolumn=0 
     endif 
    end 
    call winrestview(l:winview) "restore window/cursor position 
endfunction 

au CursorHold,BufWinEnter ?* call HasFolds() 
0

(Shameless własnym wtyczki)

stworzyłem wtyczki, aby to zrobić o nazwie Auto Origami, na wzór na answer @ SnoringFrog.

Rzuć następujący przykład do swojego vimrc po zainstalowaniu go zobaczyć magię (i czytać :help auto-origami aby dowiedzieć się, jak dostroić IT):

augroup autofoldcolumn 
    au! 

    " Or whatever autocmd-events you want 
    au CursorHold,BufWinEnter * let &foldcolumn = auto_origami#Foldcolumn() 
augroup END