Vim Folds for Python
After spending the last couple of nights fiddling with my
.vimrc, I think I’ve come up with a no-nonsense set of fold settings.
My philosophy for a
.vimrc has always been a self-contained single file that doesn’t depend on plugins. This way, I can copy and paste it into a new environment and be comfortable with light to heavy editing.
Here are my new fold settings in its full glory:
set foldmethod=expr set foldlevelstart=99 set foldexpr=FoldFunc(v:lnum) set foldtext=getline(v:foldstart) hi Folded ctermbg=0 ctermfg=96 nnoremap zc :%foldc<cr> nnoremap zv zR nnoremap zx za function! FoldFunc(lnum) if getline(a:lnum) =~? '\v^\s*$' return '-1' elseif getline(a:lnum) =~? '\v^\s*(def|class)\s' return '>' . (indent(a:lnum) / &shiftwidth + 1) else return '=' endif endfunction
I’ve limited myself to 3 patterns: close everything, open everything, and toggle current function / class. This will make it easier to add to my muscle memory and covers my main use case for folds which is “hide that huge function, because I don’t need to see it right now.”