Исправлен отбор HTML и PHP с помощью Vim

Я использую 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 script, код будет отформатирован следующим образом:

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

+43
источник поделиться
10 ответов

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

:set filetype=html

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

+49
источник

Существует набор инструкций vimrc на Vim Wiki под названием Лучшая поддержка отступа для 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
источник

После того, как я действительно посмотрел на все решения, я узнал этот плагин:

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

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

+19
источник

В 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
источник

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

+5
источник

php-correct-indenting заботится только о вашем PHP и предполагает, что читаемость HTML не представляет интереса. Индентор XML позиционирует теги красиво, но не сможет отступать от содержимого инструкции обработки <php> . Возможно, есть отступ script, который понимает как синтаксис C-типа PHP, язык программирования, так и [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 } ?>
+1
источник

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

поддерживает стиль HEREDOC html. которые часто встречаются в моем коде.
BTW: у него больше версий, чем у старого (script id 604, alex отправил его выше)

+1
источник

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

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

используйте ctrl-shift-L (или что-то еще) для отступа

nnoremap <C-S-l> :call IndentPHPHTML()<cr>
0
источник

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

au BufEnter,BufNew *.php :set filetype=html
0
источник

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

set expandtab
set sw=4
set ts=4

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

-7
источник

Посмотрите другие вопросы по меткам или Задайте вопрос