53 votes

Indentation correcte du HTML et du PHP à l'aide de Vim

J'utilise Vim depuis un certain temps, et je n'arrive pas à faire fonctionner l'indentation HTML correcte dans les fichiers PHP.

Par exemple, ce que je veux, c'est que chaque enfant soit indenté d'une tabulation de plus que son parent, comme indiqué ci-dessous.

<?php
if(isset($sports)) {
    //Do something
?>
<div>
    <label>Uniform Size</label>
    <ul>
        <li class="left"><label for="s" class="small">S</label><input type="radio" name="size[]" value="S" id="s" class="radio" /></li>
        <li class="left"><label for="m" class="small">M</label><input type="radio" name="size[]" value="M" id="m" class="radio" /></li>
        <li class="left"><label for="l" class="small">L</label><input type="radio" name="size[]" value="L" id="l" class="radio" /></li>
        <li class="left"><label for="xl" class="small">XL</label><input type="radio" name="size[]" value="XL" id="xl" class="radio" /></li>
    </ul>
</div>
<?php
}
?>

Utilisation de la PHP-correct-Indent script, le résultat du code est formaté comme suit :

<?php
if(isset($sports)) {
    //Do something
?>
<div>
<label>Uniform Size</label>
<ul>
<li class="left"><label for="s" class="small">S</label><input type="radio" name="size[]" value="S" id="s" class="radio" /></li>
<li class="left"><label for="m" class="small">M</label><input type="radio" name="size[]" value="M" id="m" class="radio" /></li>
<li class="left"><label for="l" class="small">L</label><input type="radio" name="size[]" value="L" id="l" class="radio" /></li>
<li class="left"><label for="xl" class="small">XL</label><input type="radio" name="size[]" value="XL" id="xl" class="radio" /></li>
</ul>
</div>
<?php
}
?>

Même avec du HTML indenté auquel j'ajoute ensuite du code PHP, l'indentation est ignorée, déplaçant de nouvelles lignes de code HTML sans aucune indentation.

Existe-t-il donc un moyen d'obtenir le format d'indentation que je souhaite pour travailler avec du HTML dans des fichiers PHP, en utilisant Vim ?

64voto

steve Points 1140

Cela me dérange toujours. J'ai seulement juste J'ai décidé que la meilleure solution de contournement (pour moi personnellement) est la suivante :

:set filetype=html

Ensuite, mettez votre texte en surbrillance et appuyez sur = . BOOM ! Succès du formatage HTML. (Pas idéal, je sais, mais au moins ça marche).

0 votes

Merci pour ça. Au bout d'un moment, je trouve qu'il est plus facile de faire ce genre de choses que de se battre contre des solutions de contournement automatiques.

1 votes

Après plus d'un an d'utilisation de Vim, j'ai changé de point de vue. Basculer entre :set ft=php y :set ft=html est une meilleure solution au problème.

41 votes

Pour obtenir un meilleur support php, vous pouvez essayer :set ft=phtml

27voto

Brian Carper Points 40078

Il existe un ensemble d'instructions vimrc sur le Wiki Vim appelé Meilleur support des indentations pour PHP avec HTML qui utilisera le bon plugin en fonction du bloc.

Il existe également un Plugin Vundle/Pathogen qui utilise le même code mais qui est plus facile à installer et qui conserve votre .vimrc propre.

Agent pathogène

cd ~/.vim/bundle
git clone https://github.com/captbaritone/better-indent-support-for-php-with-html.git

Vundle

Placer dans .vimrc

Bundle 'captbaritone/better-indent-support-for-php-with-html'

Exécuter dans vim

:BundleInstall

0 votes

Cela fonctionne également sous Cygwin - le fichier doit être situé à l'adresse suivante ~/.vim/indent/php.vim . Si vous collez cette page dans Cygwin, vérifiez que le code collé n'a pas été altéré (sauts de ligne incorrects et guillemets superflus) au cours du processus.

0 votes

Merci Brian. Cela semble fonctionner presque exactement comme je le souhaite. Merci également à Naum et Bobince pour leurs réponses.

0 votes

J'ai suivi le conseil, mais ça ne fonctionne pas pour moi. Dois-je appeler explicitement la fonction ou est-elle censée fonctionner d'emblée ? Si je dois l'appeler, quel paramètre dois-je passer ?

19voto

alessioalex Points 27001

Après avoir cherché très sérieusement toutes les solutions, j'ai découvert ce plugin :

http://www.vim.org/scripts/scripts.php?script_id=604

Il semble avoir résolu mes problèmes !!!!!

8 votes

Les instructions manquent, mettez cela dans le ~/.vim/indents dossier

1 votes

Cela a bousillé l'indentation dans mes fichiers de code php... d'une certaine manière, cela a fixé le tabstop à 3 espaces. Pas la peine, IMHO

3 votes

@mblackwell8 Vous pouvez modifier le php.vim ligne 27, pour contrôler l'espacement des retraits. Vous pouvez le régler sur le nombre d'espaces que vous préférez ou si vous préférez les tabulations, il suffit de supprimer la ligne.

6voto

shin Points 6280

Dans php+html, j'ai trouvé ce qui suit qui me convient.

:set ft=html # Change the file type to html
=G # to indent all lines 
:set ft=phtml # Change the file type to phtml
=G # to indent all php lines

0 votes

Ça m'a beaucoup aidé. Pourquoi ça ne devrait pas être la réponse alors ?

0 votes

Il indente seulement la ligne courante et toutes les lignes inférieures jusqu'à la fin du fichier.

2voto

bobince Points 270740

Php-correct-indenting ne se préoccupe que de votre PHP, et suppose que la lisibilité du HTML n'a aucun intérêt. Un indenteur XML positionnerait joliment les balises, mais ne serait pas capable d'indenter le contenu d'une instruction de traitement <?php> pour correspondre. Il existe peut-être un indenteur script qui comprend à la fois la syntaxe de type C de PHP, le langage de programmation, et [X][HT]ML, le langage de balisage qui est modélisé, mais je n'en ai encore jamais rencontré - désolé.

J'aimerais quand même modifier l'indentation dans votre exemple avant même que php-correct-indenting ne le détruise ! L'élément <div> est à l'intérieur d'une déclaration if externe, mais je n'ai aucun moyen de le voir à partir de l'indentation. Je suggérerais quelque chose comme :

<?php if(isset($sports)) { ?>
    <?php
        // Do something
    ?>
    <div>
        <label>Uniform Size</label>
        <ul>
            <li>etc. etc.</li>
        </ul>
    </div>
<?php } ?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X