Eu foldmethod=indent
estabeleci no meu ~/.vimrc
, e em geral isso funciona para mim e eu gostaria de mantê-lo.
No entanto, existem alguns arquivos que eu edito regularmente (e que estão sob meu controle exclusivo), onde eu gostaria de adicionar um sistema baseado em marcadores, especialmente para que, quando eu abrir o arquivo, uma seção grande raramente olhar (que já é 'delimitado' pelo recuo) é pré-dobrado. Parece que foldmethod=marker
me permita fazer isso (eu não me importo o comentário estranho no arquivo para indicar esses 'pré-dobras', se necessário), mas eu ainda quero foldmethod=indent
definir para que eu possa usar zc
, zo
e assim por diante, em seguida, dobre ou desdobre seções por recuo. Tanto quanto eu posso dizer, não posso definir foldmethod para vários valores.
Existe outra maneira de conseguir isso (idealmente usando algo incorporado no próprio arquivo)?
Respostas:
Cada janela pode ter seu próprio valor local de
'foldmethod'
; o que você define~/.vimrc
é apenas o padrão global. Existem várias maneiras de definir um valor local diferente para um buffer específico ::setlocal foldmethod=marker
:autocmd FileType java setlocal foldmethod=marker
(ou em~/.vim/after/ftplugin/java.vim
):autocmd BufRead /path/to/file setlocal foldmethod=marker
Ainda pode haver apenas um método de dobra dentro de uma única janela. Se você deseja empregar estratégias diferentes, deve escolher um método mais flexível (por exemplo
expr
) e reimplementar o (s) outro (s) método (s) nele (por exemplo,'foldexpr'
considerando seu travessão). Ou você usa duas divisões de janela para o mesmo buffer e define diferentes métodos de dobra para cada divisão.Como isso provavelmente não é o que você deseja ouvir, você pode hackear algo junto com um
:autocmd CursorMoved
que alterne o método fold com base na linha atual:fonte
zc
,zo
, e assim por diante não funcionará como se pretende em que o tampão. Eu esclareci minha pergunta.