Vim Tips Wiki

Better indent support for php with html

1,624pages on
this wiki
Add New Page
Talk0 Share
Tip 1213 Printable Monobook Previous Next

created 2006 · complexity advanced · author Heptite · version 5.7

This script allows you to indent HTML sections in PHP files. Create file ~/.vim/indent/php.vim ($HOME/vimfiles/indent/php.vim on Windows systems) containing the following:

" Better indent support for PHP by making it possible to indent HTML sections
" as well.
if exists("b:did_indent")
" This script pulls in the default indent/php.vim with the :runtime command
" which could re-run this script recursively unless we catch that:
if exists('s:doing_indent_inits')
let s:doing_indent_inits = 1
runtime! indent/html.vim
unlet b:did_indent
runtime! indent/php.vim
unlet s:doing_indent_inits
function! GetPhpHtmlIndent(lnum)
  if exists('*HtmlIndent')
    let html_ind = HtmlIndent()
    let html_ind = HtmlIndentGet(a:lnum)
  let php_ind = GetPhpIndent()
  " priority one for php indent script
  if php_ind > -1
    return php_ind
  if html_ind > -1
    if getline(a:num) =~ "^<?" && (0< searchpair('<?', '', '?>', 'nWb')
          \ || 0 < searchpair('<?', '', '?>', 'nW'))
      return -1
    return html_ind
  return -1
setlocal indentexpr=GetPhpHtmlIndent(v:lnum)
setlocal indentkeys+=<>>


I personally think it's more straightforward to just :set ft=html while you're editing HTML blocks.

This plugin works for entering new text, but not for using = on a selection, right? Any chance there's a way to fix that as well in the same thing?

I've wrapped this up as a plugin for those who want a cleaner way to use this approach:

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.