53

Vim をしばらく使用していますが、PHP ファイルで適切な HTML インデントが機能しません。

たとえば、以下に示すように、各子を親よりも 1 タブ分インデントする必要があります。

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

PHPコードを追加するインデントされたHTMLでも、インデントは無視され、インデントなしでHTMLコードの新しい行が移動します。

では、Vim を使用して、PHP ファイル内で HTML を操作したいインデント形式を取得する方法はありますか?

4

9 に答える 9

64

これは今でも気になります。私は、(個人的には)最善の回避策がこれであると判断しただけです:

:set filetype=html

次に、テキストを強調表示して を押します=。ブーム!HTML フォーマットは成功します。(理想的ではないことはわかっていますが、少なくとも機能します。)

于 2010-11-03T07:49:30.797 に答える
27

Vim Wikiには、ブロックに応じて正しいプラグインを使用するHTML を使用した PHP のより良いインデント サポートと呼ばれる一連の vimrc 命令があります。

同じコードを使用する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 に答える
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、アレックスが上に投稿)

于 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 に答える