Correct indentation of HTML and PHP using Vim
I've been using Vim for a while, and I can't get proper HTML indentation working in PHP files.
For example, what I want is for each child to be indented one tab more than it's parent, as shown below.
<?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
}
?>
Using the PHP-correct-Indent script, the code results in being formatted as follows:
<?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
}
?>
Even with indented HTML which I then add PHP code to, the indentation is ignored, moving new lines of HTML code without any indentation at all.
So, is there any way that I can get the indentation format that I want working with HTML within PHP files, using Vim?
Solution 1:
This still bothers me. I only just decided that the best work-around (for me personally) is this:
:set filetype=html
And then highlight your text and hit =
. BOOM! HTML formatting succes. (Not ideal, I know, but at least it works.)
Solution 2:
There is a set of vimrc instructions on the Vim Wiki called Better indent support for PHP with HTML that will use the correct plugin depending on the block.
There is also a Vundle/Pathogen Plugin that uses the same code but is easier to install and keeps your .vimrc
clean.
Pathogen
cd ~/.vim/bundle
git clone https://github.com/captbaritone/better-indent-support-for-php-with-html.git
Vundle
Place in .vimrc
Bundle 'captbaritone/better-indent-support-for-php-with-html'
Run in vim
:BundleInstall
Solution 3:
After looking really really hard into all solutions, I found out this plugin:
http://www.vim.org/scripts/script.php?script_id=604
It seems to have solved my problems!!!!!