web-mode for PHP coding
PHP code are usually mixed inside HTML markup code. It’s very hard for us to use
php-mode to indent both php code and markup code. However, with the help
web-mode, an autonomous emacs major-mode for editing web templates, you can
achieve it easily. Here is the comparison pictures between 2 modes.
As you can see from the above pictures,
php-mode can indents only in php code,
not the markup code, which make the file become very ugly and hard to read while
web-mode can distinguish between markup block and php block.
web-mode also allows you to specify different indentation level for each type of
code block (markup, css, php). Also, Emacs’ built-in function
make-local-variable helps you to set the indentation level for only .php file
without affecting other kinds of file that also use
Install and Config web-mode for PHP
First, you need to install
web-mode, either using
package.el or cloning it by
yourself. You can also install
emmet-mode for faster markup snippet insertion.
Next, add a function for setting up web-mode for php files
Next, call that function when open any .php file
Syntax Checking for PHP files
For php syntax checking, you need to install php command line tool and an Emacs
flycheck (can be installed through package.el, too). On Linux,
you can easily install it using your system’s package manager. On OSX, the tool
is installed already for you (Apple did that) or you can install it manually
(for newer version) using Macports. Make sure that
php command line executable
is inside you Emacs
load path (or install
exec-path-from-shell package to import the PATH from
your shell automatically).
Flycheck already includes config for checking PHP syntax using php command line. However, the checker is limited for using with php-mode and php+mode only. To use it with web-mode, you need to re-define it by yourself
This is just the code that I copy from flycheck source code. The only change
that I made is to add
web-mode to the allow modes list (the last line).
Next, come back to the
my-setup-php function that we have defined before. Add
these two lines to the end of the function body to activate the new checker
automatically for all .php files
Auto completion and Snippets
In newer version of web-mode, even if you explicitly activate
Auto Complete, you still
cannot get auto complete to work. The reason is the new version of web-mode has
added context-aware auto-completion feature and you need to activate it
manually. Put something like this into your
web-mode-hook or to the
my-setup-php function that we have written before
You can read more about context-aware auto-complete in web-mode on its home page.