A 'foldmethod'
é uma opção local da janela; defini-lo a partir do seu ~/.vimrc
não necessariamente tem o efeito certo.
Como o dobramento de sintaxe está vinculado ao html
tipo de arquivo , essas configurações pertencem a ~/.vim/after/ftplugin/html.vim
:
setlocal foldmethod=syntax
Isso depende de ter filetype plugin on
no seu ~/.vimrc
, o que você provavelmente tem. Você também pode configurar outras opções relacionadas, por exemplo foldcolumn=4
.
Observe também que, até o momento (no Vim 7.4.1830), o script de sintaxe HTML padrão apenas dobra uma marca de várias linhas, não o texto entre a marca de abertura e fechamento .
Então, isso é dobrado:
<div
class="foo"
style="width: 100"
>
Mas isso não acontece:
<div>
<b>stuff in between</b>
</div>
Para conseguir isso, você precisa estender o script de sintaxe, por exemplo, através do seguinte, melhor colocado ~/.vim/after/syntax/html.vim
:
Alternativa 1
A dobragem é realizada entre todos os elementos html, exceto nulos (aqueles que não têm um irmão de fechamento, como <br>
). Contribuição de @zanona; obrigado!
syntax region htmlFold start="<\z(\<\(area\|base\|br\|col\|command\|embed\|hr\|img\|input\|keygen\|link\|meta\|para\|source\|track\|wbr\>\)\@![a-z-]\+\>\)\%(\_s*\_[^/]\?>\|\_s\_[^>]*\_[^>/]>\)" end="</\z1\_s*>" fold transparent keepend extend containedin=htmlHead,htmlH\d
Alternativa 2
A dobragem é realizada entre determinadas tags HTML estruturais (por exemplo <head>
), de nível de parágrafo (por exemplo <p>
, <li>
) e auxiliares (por exemplo <script>
) explicitamente nomeadas .
syntax region htmlFold start="<\z(p\|h\d\|i\?frame\|table\|colgroup\|thead\|tfoot\|tbody\|t[dhr]\|pre\|[diou]l\|li\|span\|div\|head\|script\|style\|blockquote\|form\)\%(\_s*\_[^/]\?>\|\_s\_[^>]*\_[^>/]>\)" end="</\z1\_s*>" fold transparent keepend extend containedin=htmlHead,htmlH\d