Cada janela pode ter seu próprio valor local de 'foldmethod'
; o que você define em ~/.vimrc
é apenas o padrão global. Existem várias maneiras de definir um valor local diferente para um determinado buffer :
- manualmente com
:setlocal foldmethod=marker
- Para um tipo de arquivo específico (por exemplo, arquivos Java):
:autocmd FileType java setlocal foldmethod=marker
(ou em~/.vim/after/ftplugin/java.vim
) - Para arquivo (s) específico (s):
:autocmd BufRead /path/to/file setlocal foldmethod=marker
- Dentro do próprio arquivo por meio de uma modeline (já que você precisa adicionar os marcadores de qualquer maneira, eu preferiria isso):
/* vim: set fdm=manual : */
Ainda pode haver apenas um método de dobra dentro de uma única janela. Se você quiser empregar estratégias diferentes, terá que escolher um método mais flexível (por exemplo, expr
) e reimplementar o (s) outro (s) método (s) (por exemplo, fazendo com que 'foldexpr'
considere o recuo). Ou você usa duas divisões de janela para o mesmo buffer e define diferentes métodos de dobra para cada divisão.
Como provavelmente não é isso que você deseja ouvir, você pode hackear algo junto com um :autocmd CursorMoved
que alterna o método de dobra com base na linha atual:
" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')