Validate PHP syntax in VIM

You can execute shell commands in vim. This is the same as calling php -l filename.php from the shell:

:!php -l %

I have this mapped into my ~/.vim/after/ftplugin/php.vim file so that I only have to press F5:

map <F5> :!php -l %<CR>

Use :make with the following php specific settings:

:set makeprg=php\ -l\ %
:set errorformat=%m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G

Your syntax errors will be in the Quickfix window. You can open this buffer with :copen or :cope for short. If you only want to open the window only if their are errors use :cwindow.

You can use :cnext and :cprev to move through the quickfix list to jump to the corresponding errors. I suggest Tim Pope's excellent unimpared.vim plugin to make moving through the list as simple as [q and ]q.

To simplify the workflow I suggest a mapping like this one:

nnoremap <f5> :update<bar>make<bar>cwindow<cr>

Now you can just hit <f5> and the buffer will be updated (if necessary), linted, and any errors will appear in the quickfix window.

To make this a bit more robust, add these commands to ~/.vim/after/ftplugin/php.vim. Example ~/.vim/after/ftplugin/php.vim

setlocal makeprg=php\ -l\ %
setlocal errorformat=%m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G
nnoremap <buffer> <silent> <f5> :update<bar>sil! make<bar>cwindow<cr>

For more information:

:h quickfix
:h makeprg
:h errorformat

To check PHP syntax without having to save first you can use:

map :w !php -l

http://vim.wikia.com/wiki/Runtime_syntax_check_for_php


:w !php -l

The real credit goes to Can I see changes before I save my file in Vim? for the idea so up vote there.

But to explain on this post (mostly taken from above): The above command works as follows:

  1. The syntax for saving a file in vim is:

     :w <filename>
    
  2. The syntax for executing a shell command in vim is:

     :!<command>
    
  3. Executing the save command without a filename but rather a shell command behind it causes vim to write the files content to stdin of the shell instead of saving it in a physical file. You can verify this by executing

     :w !cat
    

    This should always print the files current content (which would have been written to a file instead).

4 You can check code with php -l from STDIN by piping it in

The file is "saved" to stdin, php lint is run with the stdin as input.

Tags:

Php

Syntax

Vim