web-dev-qa-db-ja.com

Vimを使用したHTMLおよびPHPの正しいインデント

私はしばらく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
}
?>

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

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

49
Sasha

これはまだ気になります。私だけjust最良の回避策(個人的には)はこれだと決めました:

:set filetype=html

次に、テキストを強調表示して=。ブーム! HTMLフォーマットは成功します。 (理想的ではありませんが、少なくとも動作します。)

54
steve

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

同じコードを使用する Vundle/Pathogen Plugin もありますが、インストールが簡単で、.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
20
Brian Carper

すべてのソリューションを真剣に検討した後、このプラグインを見つけました。

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

それは私の問題を解決したようです!!!!!

19
alessioalex

私にとっては、最初に:set ft=html その後 :set syn=php

9
gitaarik

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
5
shin

このソリューションの方がはるかに優れていることがわかりました。 http://www.vim.org/scripts/script.php?script_id=112

hEREDOC htmlスタイルのサポート。私のコードで頻繁に発生します。
BTW:古いバージョンよりも多くのバージョンがあります(スクリプトID 604、アレックスが上記に投稿)

1
xinquan

php-correct-indentingは、PHPのみを考慮し、HTMLの可読性は重要ではないと想定します。 XMLインデンターはタグを適切に配置しますが、<?php>処理命令のコンテンツをインデントして一致させることはできません。多分PHPプログラミング言語と[X] [HT] MLテンプレート化されたマークアップ言語の両方のCのような構文を理解するインデントスクリプトがありますが、私はまだ1つに会ったことがありません- ごめんなさい。

それでも、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 } ?>
1
bobince

.vimrc内:

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

ctrl-shift-L(または何でも)を使用してインデントする

nnoremap <C-S-l> :call IndentPHPHTML()<cr>
0
Ricardo Schalch

解決策を数日間探した後、何も機能せず、最終的にこれが機能したので、これをvimrcに追加してください

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