Indentation correcte de HTML et PHP en utilisant Vim
J'utilise Vim depuis un moment, et je n'arrive pas à obtenir une indentation HTML correcte dans les fichiers PHP.
Par exemple, ce que je veux, c'est que chaque enfant soit indenté 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 le script PHP-correct-Indent , 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 le HTML indenté auquel j'ajoute ensuite du code PHP, l'indentation est ignorée, déplaçant de nouvelles lignes de code HTML sans indentation à tout.
Alors, est-il possible que je puisse obtenir le format d'indentation que je veux travailler avec HTML dans les fichiers PHP, en utilisant Vim?
10 réponses
Cela me dérange toujours. J'ai seulement Juste décidé que la meilleure solution (pour moi personnellement) est la suivante:
:set filetype=html
Puis mettez en surbrillance votre texte et appuyez sur =
. BOOM! HTML formatage succes. (Pas idéal, je sais, mais au moins ça marche.)
Il y a un ensemble d'instructions vimrc sur le Wiki vim appelé Meilleur support de retrait pour PHP avec HTML qui utilisera le plugin correct en fonction du bloc.
Il existe également un Plugin Vundle/Pathogen 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'
Exécuter dans vim
:BundleInstall
Après avoir regardé vraiment vraiment dur dans 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
et ensuite :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
Php-correct-indenting ne se soucie que de votre PHP, et suppose que la lisibilité du 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 instruction de traitement pour correspondre. Peut-être qu'il y a un script d'indentation qui comprend à la fois la syntaxe de type C de PHP le langage de programmation et [X] [HT]ML le langage de balisage en cours de template , mais je n'en ai jamais rencontré encore-désolé.
Encore, je voudrais jouer avec le indenting dans votre exemple avant même que php-correct-indenting l'ait malmené! L'élément
<?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 est beaucoup mieux. http://www.vim.org/scripts/script.php?script_id=1120
Prise en charge du style HTML HEREDOC. qui se produisent fréquemment dans mon code.
BTW: il a plus de versions que l'ancienne (id de script 604, alex l'a posté ci-dessus)
À l'intérieur de votre .vimrc:
:function IndentPHPHTML()
: set ft=html
: normal gg=G
: set ft=php
:endfunction
Utilisez ctrl-shift - L (ou autre) pour indenter
nnoremap <C-S-l> :call IndentPHPHTML()<cr>
Après avoir cherché des jours pour la solution, rien n'a fonctionné et finalement cela a fonctionné, ajoutez ceci à votre vimrc
au BufEnter,BufNew *.php :set filetype=html
Dans votre fichier ~/.vimrc
:
set expandtab
set sw=4
set ts=4
L'option expandtab
convertit les onglets en espaces, l'option sw
définit la largeur de votre décalage sur 4 et le ts
définit l'arrêt de tabulation sur 4 espaces.