使用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是有效的。)
在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个空格。