web-dev-qa-db-fra.com

Comment plier/déplier les balises HTML avec Vim

Existe-t-il un plugin pour plier les balises HTML dans Vim? 
Ou existe-t-il un autre moyen de configurer un raccourci pour plier ou déplier les balises HTML? 
Je voudrais plier/déplier les balises HTML comme je le fais avec le pliage par indentation.

54
nsbm

J'ai trouvé que zfat (ou également zfit) fonctionnait bien pour le pliage avec des documents HTML. za basculera (ouvrir ou fermer) un pli existant. zR ouvre tous les plis du document actuel, zM réactive effectivement tous les plis existants marqués dans le document.

Si vous utilisez fréquemment les plis, vous pouvez créer des combinaisons de touches pratiques dans votre .vimrc.

74
James Lai

Si vous indenter votre code HTML, ceci devrait fonctionner:

set foldmethod=indent

Je trouve que le problème avec ceci est qu'il y a trop de plis. Pour résoudre ce problème, j'utilise zO et zc pour ouvrir et fermer les plis imbriqués, respectivement.

Voir help fold-indent pour plus d'informations:

The folds are automatically defined by the indent of the lines.

The foldlevel is computed from the indent of the line, divided by the
'shiftwidth' (rounded down).  A sequence of lines with the same or higher fold
level form a fold, with the lines with a higher level forming a nested fold.

The nesting of folds is limited with 'foldnestmax'.

Some lines are ignored and get the fold level of the line above or below it,
whichever is lower.  These are empty or white lines and lines starting
with a character in 'foldignore'.  White space is skipped before checking for
characters in 'foldignore'.  For C use "#" to ignore preprocessor lines.

When you want to ignore lines in another way, use the 'expr' method.  The
indent() function can be used in 'foldexpr' to get the indent of a line.
18
ihohbeto

Pliage html avec la syntaxe foldmethod, qui est plus simple.

Cette réponse est basée sur la syntaxe HTML est pliée dans vim . l'auteur est @Ingo Karcat.

  1. définissez votre méthode fold comme syntaxe avec les éléments suivants:

    ligne de commande vim :set foldmethod=syntax

    ou mettez le paramètre dans ~/.vim/after/ftplugin/html.vim

    setlocal foldmethod=syntax
    
  2. Notez également que jusqu'à présent, le script de syntaxe par défaut ne plie qu'une balise multi-lignes , Et non le texte situé entre les balises d'ouverture et de fermeture.

        So, this gets folded:
    
            <div
                class="foo"
                id="bar"
            > 
    
        And this doesn't
    
            <div>
                <b>text between here</b>
            </div>
    
  3. Pour être plié entre les balises, vous devez étendre le script de syntaxe, via , Le meilleur endroit dans ~/.vim/after/syntax/html.vim

    Le repliement de la syntaxe est effectué entre tous les éléments sauf les éléments vides html (Ceux qui n'ont pas de frère proche, comme <br>)

    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
    
4
soarinblue

Installer js-beautify command (version JavaScript)

npm -g install js-beautify  
wget --no-check-certificate https://www.google.com.hk/ -O google.index.html  
js-beautify -f google.index.html  -o google.index.bt.html  

http://www.google.com.hk orignal html:

http://www.google.com.hk orignal

js-beautify et vim fold:

js-beautify and vim fold

3
kainan

Ajoutez ensuite James Lai à la réponse . Au départ, ma méthode foldethod = afin que zfat ne fonctionne pas . La solution est de définir le foldemethod sur manuel

:setlocal foldmethod=manual

vérifier quelle méthode de pliage est utilisée,

:setlocal foldmethod?
2
ken

Premièrement set foldmethod=syntax et essayez zfit de plier la balise de début et zo de déplier les balises, Cela fonctionne bien sur mon vim.

1
Ryan Chou