53

我使用 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 获得我想要的缩进格式?

4

9 回答 9

64

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

:set filetype=html

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

于 2010-11-03T07:49:30.797 回答
27

Vim Wiki 上有一组 vimrc 指令,称为Better indent support for PHP with HTML,它将根据块使用正确的插件。

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

病原

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

文德尔

放在 .vimrc 中

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

在 vim 中运行

:BundleInstall
于 2009-01-20T18:44:05.043 回答
19

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

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

好像解决了我的问题!!!!

于 2011-05-13T20:31:13.063 回答
14

对我来说,如果我先做:set ft=html然后再做,效果很好:set syn=php

于 2014-11-19T12:45:15.020 回答
6

在 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
于 2014-01-07T13:05:31.097 回答
2

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

尽管如此,即使在 php-correct-indenting 破坏它之前,我还是想摆弄你的例子中的缩进!<div> 元素位于外部 if 语句内,但我无法从缩进中看到这一点。我建议像:

<?php if(isset($sports)) { ?>
    <?php
        // Do something
    ?>
    <div>
        <label>Uniform Size</label>
        <ul>
            <li>etc. etc.</li>
        </ul>
    </div>
<?php } ?>
于 2009-01-20T01:51:56.383 回答
1

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

支持 HEREDOC html 样式。这在我的代码中经常出现。
顺便说一句:它的版本比旧版本多(脚本 id 604,alex 在上面发布)

于 2011-09-21T03:10:05.447 回答
1

在你的 .vimrc 里面:

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

使用 ctrl-shift-L (或其他)缩进

nnoremap <C-S-l> :call IndentPHPHTML()<cr>
于 2016-03-28T16:05:26.277 回答
0

在搜索了几天的解决方案后,没有任何效果,最后这有效,将其添加到您的 vimrc

au BufEnter,BufNew *.php :set filetype=html
于 2016-12-30T02:47:51.903 回答