by W. Jason Gilmore
How much of your average work day is lost to hard-to-avoid distractions? Given the ubiquity of ringing cell phones and e-mail alerts, the allure of checking Facebook and Twitter
just one more time, and the sounds and sights surrounding those of us who work in non-traditional environments such as the local coffee shop, you probably lose hours rather than minutes.
When you choose a streamlined
IDE, you forfeit the visual bells and whistles usually found in many commercial products but you gain the ability to write, organize and refactor code as quickly as you can type. For millions of developers around the globe, that IDE is
Vim, and in this article I'll show you how Vim can help you to write PHP code faster than ever before.
Introducing Vim
Vim is a descendant of
vi, the now legendary text editor that has been a mainstay of Unix-based operating systems since technology luminary
Bill Joy released the first version in 1976. Vim, which stands for "
Vi i
mproved," is also not exactly a new entrant to the software community, having been first released by Bram Moolenar in 1991. Despite the age, Vim remains under active development today, with a new version released in August of 2010.
An open source project, Vim is available on all major platforms, Windows included. You can download the latest version from
the official Vim website, or if you're running an operating system such as Ubuntu, you'll find it within your package manager.
Vim, like vi, is a
modal editor, meaning its behavior is dependent upon the use of
meta keys, which determine whether the editor is in
insert mode. This sounds confusing, but it's precisely this feature that allows you to write code and navigate the editor's features with incredible speed.
Vim for PHP Development
Presuming you've installed Vim, follow along as I create a simple PHP script using the editor.
Begin by opening a command prompt and navigating to a convenient location within your development Web server's root directory. Then execute the following command to begin editing a PHP script named
books.php
within Vim:
The Vim editor will open, although except for the status bar at the bottom you'll hardly be able to distinguish it from the command line. When in insert mode, Vim is indistinguishable from other editors in that you'll type as normal, using the
Enter
key to proceed to the next line and the
Backspace
key to delete characters. To enter insert mode, press
i
. Once done, the status bar will indicate that insert mode is enabled.
Next, type the following script into the editor.
<?php $books = array( "The Sun Also Rises", "The Dome", "The Jackal" ); if (count($books) > 0) { echo "You must like to read!"; } else { echo "Want to play video games?"; } ?>
If you make a mistake while typing, try undoing your changes using the undo command (
Esc
followed by
u
). Press
u
multiple times to undo more than one change.
Vim Command-mode Tasks
To save the file, you'll need to leave insert mode and enter
command mode. Do this by pressing the
Esc
key. Then press the colon (
:
) key and finally the
w
key to write, or save, the file. While this sequence may at first seem awkward, the task will soon become second nature.
If you wanted to save the file and quit Vim, press
Esc
followed by the sequence
:wq
.
Now suppose you were doing a bit of refactoring and wanted to change the variable name
$books
to
$library
. You can use Vim's global search-and-replace feature to perform this task with amazing speed. To do so, enter command mode (again by pressing the
Esc
key) and type:
This command tells Vim to search (
%s
) for the string
$books
and replace it with the string
$library
(doing so globally
%g
).
This is just one of literally hundreds of command-mode tasks at your disposal. For instance, suppose you wanted to edit two files simultaneously within Vim. Given the sparse interface, this seems impossible, right? Once again enter command mode (
Esc
) and type
:new
. This will open a second "window" within Vim, as depicted in Figure 1.
To switch between these windows, you'll use the command mode sequence
Ctrl+w
and then either
k
to enter the top window or
j
to enter the bottom window.
Incidentally, if you prefer a tabbed interface, try opening a second file using the command
:tabe filename.php
. You can then switch between tabs while in command mode using the sequence
gt
.:tab.
Even with 13 years of experience developing websites with PHP, I still manage to forget the name or parameter ordering of various native functions regularly. Vim removes the need to refer to the manual constantly thanks to its native omni completion feature, which supports command completion for dozens of languages, PHP included. To enable this feature, create a new file named .vimrc
in your home directory and add the following line:
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
The
.vimrc
file is useful for managing configuration settings, which Vim will read each time the program is started. The above command will enable code completion for the PHP language. Once saved, restart Vim and open the
books.php
script again. Enter insert mode and type
da
, followed by
Ctrl+x, Ctrl+o
, and you'll see a select box similar to that shown in Figure 2.
Use your arrow keys to select the desired function, pressing enter to insert it into the text. Experienced PHP developers will recognize that the five functions shown in this list are just a few supported by PHP 5.3.X. This is because the command-completion file tends to lag behind the latest release, so if you suspect that the command you're looking for isn't in the select box, refer to the manual just to be sure.
Taking Advantage of Vim Plugins
Vim is an extensible IDE and developers around the world have created hundreds of useful plugins that make your life as a developer much easier.
Project is one such plugin, which allows you to manage and access files associated with a particular project easily. Figure 3 illustrates how Project will provide you with immediate and convenient access to a project's files. (See the
Project homepage for configuration instructions.)
Conclusion
As this tutorial demonstrated, when you become familiar with Vim's command sequences, it's possible to write and manage scripts with amazing speed.