Question

J'utilise Vim depuis un moment et je ne parviens pas à obtenir une indentation HTML appropriée dans les fichiers PHP.

Par exemple, ce que je veux, c'est que chaque enfant soit mis en retrait d'un onglet 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 du script PHP-correct-Indent , les résultats du code en étant 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 le HTML indenté auquel j'ajoute ensuite du code PHP, l'indentation est ignorée, ce qui déplace de nouvelles lignes de code HTML sans aucune indentation.

Alors, est-il possible d'obtenir le format d'indentation que je souhaite utiliser avec HTML dans les fichiers PHP, à l'aide de Vim?

Était-ce utile?

La solution

Cela me dérange toujours. Je viens à juste de décider que la meilleure solution (pour moi personnellement) est la suivante:

:set filetype=html

Sélectionnez ensuite votre texte et appuyez sur =. BOOM! Le formatage HTML réussit. (Pas idéal, je sais, mais au moins ça marche.)

Autres conseils

Il existe un ensemble d’instructions vimrc sur le wiki Vim appelé meilleure prise en charge de PHP avec HTML qui utilisera le bon plugin en fonction du bloc.

Il existe également un plug-in Vundle / Pathogen utilise le même code mais est plus facile à installer et maintient votre .vimrc propreté.

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

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

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

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

Pour moi, cela fonctionne bien si je fais d'abord :set ft=html puis :set syn=php.

En php + html, j’ai trouvé ce qui suit me convenait bien.

: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

php-correct-indenting ne se soucie que de votre PHP et suppose que la lisibilité du code HTML n’a aucun intérêt. Un pénétrateur XML positionnerait bien les balises, mais ne pourrait pas indenter le contenu d'un & Lt;? Php & Gt; instruction de traitement pour correspondre. Il existe peut-être un script d'indentation qui comprend à la fois la syntaxe C-like de PHP, le langage de programmation, et le langage de balisage [X] [HT] ML, mais je n'en ai jamais rencontré - désolé.

Néanmoins, je voudrais jouer avec l'indentation de votre exemple avant même que l'indentation php-correct-correct ne soit modifiée! Le & Lt; div & Gt; L'élément est à l'intérieur d'une déclaration if externe, mais je n'ai aucun moyen de voir cela à 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 } ?>

J'ai trouvé cette solution beaucoup mieux. http://www.vim.org/scripts/script.php?script_id=1120

prenant en charge le style html HEREDOC. qui apparaissent fréquemment dans mon code.
BTW: il a plus de versions que l'ancien (script ID 604, alex l'a posté ci-dessus)

dans votre .vimrc:

:function IndentPHPHTML()
:  set ft=html
:  normal gg=G
:  set ft=php
:endfunction

utilisez ctrl-shift-L (ou autre) pour mettre en retrait

nnoremap <C-S-l> :call IndentPHPHTML()<cr>

Après avoir cherché pendant des jours la solution, rien ne fonctionnait et enfin, cela a fonctionné, ajoutez ceci à votre vimrc

au BufEnter,BufNew *.php :set filetype=html

Dans votre ~/.vimrc fichier:

set expandtab
set sw=4
set ts=4

L’option expandtab convertit les tabulations en espaces, l’option sw définit la largeur de votre décalage sur 4 et la ts définit la butée sur 4 interlignes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top