簡體   English   中英

使用Vim正確地縮進HTML和PHP

[英]Correct indentation of HTML and PHP using Vim

我使用Vim已有一段時間了,在PHP文件中無法正常使用HTML縮進。

例如,我想要的是讓每個孩子都比其父縮進一個標簽,如下所示。

<?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的縮進格式?

這仍然困擾着我。 只是認為最好的解決方法(對我個人而言)是這樣的:

:set filetype=html

然后突出顯示您的文本並點擊= 繁榮! HTML格式成功。 (我知道這並不理想,但至少可以奏效。)

Vim Wiki上有一套vimrc指令,稱為“ 更好地支持HTML對PHP的縮進” ,將根據塊使用正確的插件。

還有一個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壓痕器可以很好地定位標簽,但不能壓痕<?php>處理指令的內容以進行匹配。 也許有一個縮進腳本既可以理解編程語言PHP的C語法,也可以理解正在模板化的標記語言[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 } ?>

我發現此解決方案更好。 http://www.vim.org/scripts/script.php?script_id=1120

支持HEREDOC html樣式。 在我的代碼中經常發生
順便說一句:它的版本比舊版本的版本多(腳本ID 604,Alex在上面發布)

在您的.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個空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM