Wiem, że można używaćgvima automatyczny pokaz foldcolumn gdy występują fałdy w pliku
set foldcolumn=1
włączyć krotnie kolumna
ale czy istnieje sposób do automatycznego go włączyć tylko wtedy, gdy istnieją istnieć fałdy w pliku?
Wiem, że można używaćgvima automatyczny pokaz foldcolumn gdy występują fałdy w pliku
set foldcolumn=1
włączyć krotnie kolumna
ale czy istnieje sposób do automatycznego go włączyć tylko wtedy, gdy istnieją istnieć fałdy w pliku?
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
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()
(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
To jest raczej powolne. –
Masz rację, pokaż nam teraz lepsze rozwiązanie. –
Mam zamiar, później :) –