使用Vim修正HTML和PHP的缩进

我一直在使用Vim,并且无法在PHP文件中获得正确的HTML缩进。

例如,我想要的是为每个孩子缩进一个标签多于它的父母,如下所示。

<?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 } ?> 

使用PHP-correct-Indent脚本,代码的格式如下:

 <?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 } ?> 

即使使用缩进的HTML,然后添加PHP代码,缩进也会被忽略,移动HTML代码的新行,而不会有任何缩进。

那么,有没有什么办法可以使用Vim来获取我想要在PHP文件中使用HTML的缩进格式呢?

这仍然困扰着我。 我只是认为最好的解决办法(对我个人而言)是这样的:

 :set filetype=html 

然后突出显示您的文字并点击= 。 繁荣! HTML格式的成功。 (不太理想,我知道,但至less是有效的。)

在看完所有的解决scheme之后,我发现了这个插件:

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

这似乎解决了我的问题!!!!!

在Vim Wiki上有一组vimrc指令,叫做HTML的更好的缩进支持 ,它将根据块使用正确的插件。

还有一个Vundle / Pathogen插件 ,使用相同的代码,但更容易安装,并保持您的.vimrc干净。

病原

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

Vundle

放在.vimrc中

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

在vim中运行

 :BundleInstall 

在php + html中,我发现以下对我有好处。

 :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 

对我来说,如果我第一次做的话,它会很好用:set ft=html ,然后:set syn=php

php-correct-indenting只关心你的PHP,并假设HTML的可读性是没有意义的。 XML压缩器可以很好地定位标签,但不能缩进<?php>处理指令的内容以匹配。 也许有一个缩进脚本可以理解PHP编程语言的类C语法和[X] [HT] ML标记语言是模板化的,但我从来没有遇到过。

不过,即使在php-correct-indenting之前,我也想要在你的例子中缩进缩进! <div>元素在外部的if语句中,但我无法从缩进中看到。 我build议像这样的东西:

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

我发现这个解决scheme好多了。 http://www.vim.org/scripts/script.php?script_id=1120

支持HEREDOC html样式。 这经常发生在我的代码中。
顺便说一句:它有更多的版本比旧的(脚本ID 604,亚历克斯贴在上面)

在你的.vimrc里面:

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

使用Ctrl-Shift-L(或其他)缩进

 nnoremap <CSl> :call IndentPHPHTML()<cr> 

在寻找解决scheme的日子之后,没有任何工作,最后这工作,添加到您的vimrc

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

~/.vimrc文件中:

 set expandtab set sw=4 set ts=4 

expandtab选项将制表符转换为空格, sw选项将你的位移宽度设置为4, ts设置制表位为4个空格。