Sintaxe HTML dobrável no VIM?


9

Fiquei me perguntando qual é a melhor maneira de usar dobrar sintaxe para arquivos HTML. Especialmente se conseguir reconhecer o código javascript nas <script>tags.

Eu digitei, set foldmethod=syntaxmas não parece dobrar. Tenho que adicionar outra coisa ao meu .vimrc?

Conheço javascript, por exemplo, preciso adicionar, let javaScript_fold=1mas não tenho certeza se tenho que adicionar algo semelhante ao HTML.

Obrigado!


5
Sim, o script de sintaxe HTML padrão fornece dobragem. A menos que você usar um script alternativa, que é a maneira de fazer sintaxe dobrável. Ele reconhece JavaScript? Por que você simplesmente não tenta? Então, qual é a sua pergunta ?!
Ingo Karkat

Você está certo. Eu editei a pergunta, quero habilitar a dobra de sintaxe HTML padrão. Estou esquecendo de algo?
21315 Sergio Sergio

Respostas:


10

A 'foldmethod'é uma opção local da janela; defini-lo a partir do seu ~/.vimrcnã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 onno 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

Ei Ingo, não tenho certeza se estou fazendo algo errado, mas não há como eu conseguir dobrar HTML com base no método de sintaxe, nada acontece? Eu tenho um exprmétodo personalizado que eu uso, no entanto, que desabilitado dobrar sintaxe para css e javascript. Ao usar syntaxjavascript e css, tem dobras conforme o esperado, mas nenhuma das tags HTML possui? Alguma ideia?
Zanona 30/05

1
@zanona: as tags HTML estão coloridas adequadamente? Às vezes, um elemento CSS ou JavaScript incorreto interrompe a sintaxe para o restante do documento. O SyntaxAttr.vim - Mostrar sintaxe, destacando atributos de caracteres no plug-in do cursor, ajuda na solução de problemas. Verifique o grupo de sintaxe da tag HTML (falhando em dobrar) e verifique se a regra de sintaxe correspondente está foldnela.
Ingo Karkat

Obrigado Ingo! Vou tentar isso. Eu tentei muitas variações de começar com um arquivo html novo, removendo todos os plugins, etc., mas ainda não tenho como dobrar em HTML. Vou dar uma olhada no plugin que você enviou. Espero que isso possa ajudar na depuração. Obrigado novamente por sua ajuda.
Zanona 31/05

1
@zanona: Obrigado pela análise detalhada; Acho que sei agora qual é o problema. A sintaxe HTML padrão apenas dobra as tags de várias linhas, mas você deseja dobrar as coisas entre as tags de abertura e fechamento. Isso precisa de uma extensão simples do script de sintaxe; veja minha edição. Na verdade, eu tive isso na minha configuração do Vim por tanto tempo que esqueci!
Ingo Karkat

1
@zanona: Obrigado! Sua idéia de reverter os critérios de seleção para as tags HTML adiciona um toque agradável. Eu adicionei isso à resposta como uma (melhor) alternativa.
Ingo Karkat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.