J'utilise Vim depuis un certain temps et je ne parviens pas à obtenir une bonne indentation HTML 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
}
?>
En utilisant PHP-correct-Indent script, le 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.
Alors, est-il possible d'obtenir le format d'indentation que je souhaite utiliser avec HTML dans des fichiers PHP, à l'aide de Vim?
Cela me dérange toujours. J'ai seulement juste décidé que la meilleure solution (pour moi personnellement) est la suivante:
:set filetype=html
Et ensuite mettez en surbrillance votre texte et appuyez sur =
. BOOM! Le formatage HTML est un succès. (Pas idéal, je sais, mais au moins ça marche.)
Il existe un ensemble d’instructions vimrc sur le wiki Vim appelé Meilleur support de mise en retrait pour PHP avec HTML qui utilisera le bon plugin en fonction du bloc.
Il existe également un Vundle/Pathogen Plugin qui utilise le même code mais est plus facile à installer et maintient votre .vimrc
propre.
Agent pathogène
cd ~/.vim/bundle
git clone https://github.com/captbaritone/better-indent-support-for-php-with-html.git
Vundle
Place dans .vimrc
Bundle 'captbaritone/better-indent-support-for-php-with-html'
Courir 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 est bon pour moi.
: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
j'ai trouvé cette solution bien meilleure . http://www.vim.org/scripts/script.php?script_id=1120
supportant le style html HEREDOC. qui se produisent fréquemment dans mon code.
BTW: il a plus de versions que l’ancienne (script id 604, alex l’a posté ci-dessus)
php-correct-indenting ne s'intéresse qu'à votre PHP et suppose que la lisibilité du code HTML ne présente aucun intérêt. Un pénétrateur XML positionnerait bien les balises, mais ne pourrait pas indenter le contenu d'une instruction de traitement <? Php> 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-correcte ne soit modifiée! L'élément <div> est à l'intérieur d'une instruction 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 } ?>
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 n’a fonctionné et finalement cela a fonctionné, ajoutez ceci à votre vimrc
au BufEnter,BufNew *.php :set filetype=html