it-swarm.com.de

Richtige Einrückung von HTML und PHP mit Vim

Ich verwende Vim schon eine Weile und ich kann nicht die richtige HTML-Einrückung in PHP -Dateien erstellen.

Zum Beispiel möchte ich, dass jedes Kind um einen Tab mehr eingerückt wird als das übergeordnete Element, wie unten gezeigt.

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

Unter Verwendung des Skripts PHP-correct-Indent wird der Code wie folgt formatiert:

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

Selbst bei eingerücktem HTML-Code, dem ich dann PHP Code hinzufüge, wird der Einzug ignoriert, wodurch neue Zeilen HTML-Code ohne Einrückung verschoben werden.

Gibt es eine Möglichkeit, das Einrückungsformat zu erhalten, das ich mit HTML in PHP -Dateien verwenden möchte, mit Vim?

48
Sasha

Das stört mich immer noch. Ich habe nur nur entschieden, dass die beste Lösung (für mich persönlich) Folgendes ist:

:set filetype=html

Markieren Sie dann Ihren Text und drücken Sie =. BOOM! HTML-Formatierung ist erfolgreich. (Nicht ideal, ich weiß, aber zumindest funktioniert es.)

53
steve

Es gibt eine Reihe von vimrc-Anweisungen im Vim-Wiki mit der Bezeichnung Bessere Unterstützung für PHP mit HTML , die je nach Block das richtige Plugin verwendet.

Es gibt auch ein Vundle/Pathogen Plugin , das denselben Code verwendet, aber einfacher zu installieren ist und Ihren .vimrc sauber hält.

Erreger

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

Vundle

Platzieren Sie in .vimrc

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

Führen Sie in vim

:BundleInstall
20
Brian Carper

Nachdem ich alle Lösungen wirklich sehr intensiv untersucht hatte, fand ich dieses Plugin heraus:

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

Es scheint meine Probleme gelöst zu haben !!!!!

19
alessioalex

Für mich funktioniert es gut, wenn ich zuerst :set ft=html und dann :set syn=php mache.

9
gitaarik

In PHP + HTML fand ich folgendes gut für mich.

: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

ich fand diese Lösung viel besser . http://www.vim.org/scripts/script.php?script_id=1120

unterstützung von HEREDOC HTML-Stil. die häufig in meinem Code vorkommen.
BTW: es hat mehr Versionen als die alte (Skript-ID 604, Alex hat es oben geschrieben).

1
xinquan

php-correct-indenting kümmert sich nur um Ihr PHP und geht davon aus, dass die Lesbarkeit des HTML-Codes nicht von Interesse ist. Ein XML-Indenter würde die Tags gut positionieren, konnte jedoch den Inhalt einer <? Php> -Verarbeitungsanweisung nicht so einrücken, dass sie übereinstimmt. Möglicherweise gibt es ein Einrückungsskript, das sowohl die C-artige Syntax von PHP der Programmiersprache als auch [X] [HT] ML der Markup-Sprache versteht, die in der Vorlage verwendet wird, aber ich habe noch nie eine getroffen - sorry.

Trotzdem würde ich gerne mit dem Einrücken in Ihrem Beispiel herumfummeln, noch bevor das Einfügen von PHP-Korrekti- ons das Eindringen von Fehlern bewirkt hat. Das <div> -Element befindet sich in einer äußeren if-Anweisung, aber ich habe keine Möglichkeit, dies anhand der Einrückung zu erkennen. Ich würde etwas vorschlagen wie:

<?php if(isset($sports)) { ?>
    <?php
        // Do something
    ?>
    <div>
        <label>Uniform Size</label>
        <ul>
            <li>etc. etc.</li>
        </ul>
    </div>
<?php } ?>
1
bobince

in Ihrem .vimrc:

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

verwenden Sie Strg-Umschalt-L (oder was auch immer) zum Einrücken

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

Nachdem Sie nach Tagen nach der Lösung gesucht haben, hat nichts funktioniert, und schließlich hat dies funktioniert

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