Правильные отступы HTML и PHP с помощью Vim
-
19-08-2019 - |
Вопрос
Я использую 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-правильный отступ скрипт, код будет отформатирован следующим образом:
<?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?
Решение
Это все еще беспокоит меня. Я только просто решил, что лучший обходной путь (лично для меня) заключается в следующем:
:set filetype=html
А затем выделите текст и нажмите =
. БУМ! Успешное форматирование HTML. (Не знаю, я знаю, но, по крайней мере, это работает.)
Другие советы
В Vim Wiki есть набор инструкций vimrc под названием Улучшенная поддержка отступов для PHP с HTML. который будет использовать правильный плагин в зависимости от блока.
Существует также Плагин 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
После тщательного изучения всех решений я обнаружил этот плагин:
http://www.vim.org/scripts/script.php? script_id = 604 р>
Кажется, это решило мои проблемы !!!!!
Для меня это будет хорошо, если я сначала сделаю :set ft=html
, а затем :set syn=php
.
В 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
php-correct-indenting заботится только о вашем PHP и предполагает, что читаемость HTML не представляет интереса. Индентор XML хорошо разместит теги, но не сможет сделать отступ для содержимого & Lt;? Php & Gt; обработка инструкции для соответствия. Возможно, есть сценарий отступа, который понимает как C-подобный синтаксис PHP как язык программирования, так и [X] [HT] ML язык шаблонов разметки, но я еще никогда не встречал его - извините.
Тем не менее, я хотел бы поиграть с отступом в вашем примере еще до того, как php-correct-indenting исказил его! & Lt; div & Gt; Элемент находится внутри внешнего оператора if, но у меня нет возможности увидеть это из отступа. Я бы предложил что-то вроде:
<?php if(isset($sports)) { ?>
<?php
// Do something
?>
<div>
<label>Uniform Size</label>
<ul>
<li>etc. etc.</li>
</ul>
</div>
<?php } ?>
я нашел это решение намного лучше. http://www.vim.org/scripts/script.php?script_id=1120 р>
поддержка HEREDOC в стиле html. которые часто встречаются в моем коде.
Кстати, у него больше версий, чем у старого (идентификатор скрипта 604, Алекс разместил его выше)
внутри вашего .vimrc:
:function IndentPHPHTML()
: set ft=html
: normal gg=G
: set ft=php
:endfunction
используйте ctrl-shift-L (или любой другой) для отступа
nnoremap <C-S-l> :call IndentPHPHTML()<cr>
После нескольких дней поиска решения ничего не получилось, и наконец это сработало, добавьте это в свой vimrc
au BufEnter,BufNew *.php :set filetype=html
В вашем ~/.vimrc
файле:
set expandtab
set sw=4
set ts=4
Параметр expandtab
преобразует вкладки в пробелы, параметр sw
устанавливает ширину сдвига равной 4, а ts
устанавливает положение табуляции в 4 интервала.