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.

Also on Fandom

Random Wiki