Правильный отступ HTML и PHP с помощью Vim - PullRequest
48 голосов
/ 20 января 2009

Я уже некоторое время использую Vim и не могу заставить работать HTML-отступ в файлах PHP.

Например, я хочу, чтобы у каждого ребенка был отступ на одну вкладку больше, чем у его родителя, как показано ниже.

<?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 без каких-либо отступов.

Итак, есть ли способ получить формат отступа для работы с HTML в файлах PHP с помощью Vim?

Ответы [ 10 ]

53 голосов
/ 03 ноября 2010

Это все еще беспокоит меня. Я только просто решил, что лучший обходной путь (лично для меня) такой:

:set filetype=html

А затем выделите текст и нажмите =. БУМ! Успешное форматирование HTML. (Не знаю, я знаю, но, по крайней мере, это работает.)

20 голосов
/ 20 января 2009

В Vim Wiki есть набор инструкций vimrc под названием Лучшая поддержка отступов для PHP с HTML , который будет использовать правильный плагин в зависимости от блока.

Существует также Vundle / Pathogen Plugin , который использует тот же код, но проще в установке и поддерживает ваш .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'

Запустить в vim

:BundleInstall
19 голосов
/ 14 мая 2011

После тщательного изучения всех решений я обнаружил этот плагин:

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

Кажется, это решило мои проблемы !!!!!

9 голосов
/ 19 ноября 2014

Для меня это работает хорошо, если я сначала сделаю :set ft=html, а затем :set syn=php.

5 голосов
/ 07 января 2014

В 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
1 голос
/ 21 сентября 2011

я нашел это решение намного лучше. http://www.vim.org/scripts/script.php?script_id=1120

поддержка HEREDOC в стиле html. которые часто встречаются в моем коде.
Кстати, у него больше версий, чем у старой (идентификатор скрипта 604, Алекс разместил его выше)

1 голос
/ 20 января 2009

php-correct-indenting заботится только о вашем PHP и предполагает, что читаемость HTML не представляет интереса. Индентор XML хорошо разместит теги, но не сможет сделать отступ для содержимого инструкции обработки <? Php>. Возможно, есть сценарий отступа, который понимает как C-подобный синтаксис PHP как язык программирования, так и [X] [HT] ML язык шаблонов разметки, но я еще не встречал его - извините.

Тем не менее, я хотел бы поиграть с отступом в вашем примере еще до того, как php-correct-indenting исказил его! Элемент

находится внутри внешнего оператора if, но у меня нет способа увидеть это из отступа. Я бы предложил что-то вроде:
<?php if(isset($sports)) { ?>
    <?php
        // Do something
    ?>
    <div>
        <label>Uniform Size</label>
        <ul>
            <li>etc. etc.</li>
        </ul>
    </div>
<?php } ?>
0 голосов
/ 30 декабря 2016

После поисков решения в течение нескольких дней ничего не получалось и, наконец, это сработало, добавьте это в свой vimrc

au BufEnter,BufNew *.php :set filetype=html
0 голосов
/ 28 марта 2016

внутри вашего .vimrc:

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

используйте Ctrl-Shift-L (или любой другой) для отступа

nnoremap <C-S-l> :call IndentPHPHTML()<cr>
0 голосов
/ 20 января 2009

В вашем ~/.vimrc файле:

set expandtab
set sw=4
set ts=4

Опция expandtab преобразует табуляцию в пробелы, опция sw устанавливает ширину вашего сдвига в 4, а ts устанавливает остановку табуляции в 4 интервала.

...