使用Vim正确缩进HTML和PHP

使用Vim正确缩进HTML和PHP,php,html,vim,indentation,Php,Html,Vim,Indentation,我已经使用Vim有一段时间了,我无法在PHP文件中使用正确的HTML缩进 例如,我希望每个子项比其父项缩进一个选项卡,如下所示 <?php if(isset($sports)) { //Do something ?> <div> <label>Uniform Size</label> <ul> <li class="left"><label for="s" class="smal

我已经使用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
}
?>

均匀尺寸
  • S
  • M
  • L
  • XL
使用脚本,代码的格式如下所示:

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

均匀尺寸
  • S
  • M
  • L
  • XL
即使使用缩进的HTML(我随后向其中添加PHP代码),缩进也会被忽略,移动新的HTML代码行而不进行任何缩进


那么,有没有任何方法可以让我使用Vim在PHP文件中使用HTML获得缩进格式?

PHP正确的缩进只关心您的PHP,并且假设HTML的可读性不受关注。XML缩进器可以很好地定位标记,但无法缩进的内容。Vim Wiki上有一组名为的vimrc指令,将根据块使用正确的插件

还有一个使用相同代码但更易于安装并保持
.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'
磨合

:BundleInstall

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


然后突出显示文本并点击
=
。繁荣HTML格式化成功。(我知道这并不理想,但至少它能工作。)

在仔细研究了所有解决方案后,我发现了这个插件:


它似乎解决了我的问题

我发现这个解决方案要好得多。

支持html样式。这在我的代码中经常出现。

顺便说一句:它的版本比旧版本多(脚本id 604,alex在上面发布)

在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

对我来说,如果我先在你的.vimrc中执行
:set ft=html
,然后执行
:set syn=php
,效果会很好

:function IndentPHPHTML()
:  set ft=html
:  normal gg=G
:  set ft=php
:endfunction
使用ctrl-shift-L(或其他)缩进

nnoremap <C-S-l> :call IndentPHPHTML()<cr>
nnoremap:调用indentphtml()

在搜索了数天的解决方案后,没有任何结果,最后,这个结果成功了,请将它添加到您的vimrc中

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


这也适用于Cygwin-文件应位于
~/.vim/indent/php.vim
。如果您从该页面粘贴到Cygwin中,请仔细检查粘贴的代码是否在粘贴过程中出错(错误的换行符和多余的引号)。谢谢Brian。这似乎正是我想要的。谢谢你Naum和bobince的回答。我遵循了提示,但它对我不起作用。我必须显式调用这个函数吗,还是应该开箱即用?如果我必须调用它,我应该传递什么参数?如果你正在使用这个文件,把它放到名为php.vim的autoload/php/indent文件夹中,它应该可以正常工作。如果在MacVim上,请重新加载或重新启动MacVim。这对我来说非常有效。我将其包装在一个与Vundle兼容的插件中,以使其更易于包含:谢谢。经过一段时间,我发现做这类事情要比克服自动解决方法容易得多。在使用Vim一年多之后,我改变了我的观点。在
:set ft=php
:set ft=html
之间切换是解决此问题的更好方法。要获得更好的php支持,您可以尝试:set ft=phtml@JoeMills这听起来不错,下次我写php的时候我会试试看为了减轻这一点痛苦,将其添加到vimrc:
map h:set ft=html
map p:set ft=php
说明缺失,请将其放入
~/.vim/indents
文件夹我的php代码文件中这个错误的缩进。。。以某种方式将tabstop设置为3个空格。不值得,IMHO@mblackwell8您可以编辑
php.vim
文件第27行,以控制缩进间距。你可以将它设置为你喜欢的空格数,或者如果有制表符,只需删除该行即可。这是新的PHP5.4语法,试试看,这对我帮助很大。为什么这不应该是答案呢?它只缩进当前行,所有行都缩进到文件的末尾。我正在使用这个解决方案。唯一不方便的是语言支持(coc phpls)停止工作。这应该是正确的答案。没有插件或脚本,只有vim设置。这将破坏php代码的自动缩进:/n这将破坏php的语法突出显示和缩进
nnoremap <C-S-l> :call IndentPHPHTML()<cr>
au BufEnter,BufNew *.php :set filetype=html