È 'foldmethod'
un'opzione finestra locale; impostarlo dal tuo ~/.vimrc
non ha necessariamente l'effetto giusto.
Poiché la piegatura della sintassi è legata al tipo di html
file , queste impostazioni appartengono a ~/.vim/after/ftplugin/html.vim
:
setlocal foldmethod=syntax
Dipende dall'avere filetype plugin on
nel tuo ~/.vimrc
, che probabilmente hai. È inoltre possibile configurare altre opzioni correlate lì, ad es foldcolumn=4
.
Si noti inoltre che finora (a partire da Vim 7.4.1830), lo script di sintassi HTML predefinito piega solo un tag multilinea stesso, non il testo tra il tag di apertura e chiusura .
Quindi, questo viene piegato:
<div
class="foo"
style="width: 100"
>
Ma questo non:
<div>
<b>stuff in between</b>
</div>
Per ottenere ciò, è necessario estendere lo script di sintassi, ad esempio tramite quanto segue, collocato in modo ottimale in ~/.vim/after/syntax/html.vim
:
Alternativa 1
La piegatura viene eseguita tra tutti gli elementi html tranne quelli vuoti (quelli che non hanno un fratello di chiusura, come <br>
). Contributo di @zanona; Grazie!
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
La piegatura viene eseguita tra determinati tag HTML strutturali (ad es. <head>
), A livello di paragrafo (ad es <p>
. <li>
) E ausiliari (ad es. <script>
).
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