vile's programming assistance capabilities are discussed in this section.
vile uses two straightforward vi mode commands to manage program development, shown in Table 12.6.
Command | Function |
---|---|
^X ! command [RETURN] | Run command,
saving the output in a buffer
named |
^X ^X | Find the next error. vile parses the output and moves to the location of each successive error. |
vile understands the Entering directory XXX and Leaving directory XXX messages that GNU make generates, allowing it to find the correct file, even if it's in a different directory.
The error messages are parsed using regular expressions in the
buffer [Error Expressions]
.
vile automatically creates this buffer, and then it uses the buffer
when you use ^X ^X
.
You can add expressions to it as needed, and it has an extended
syntax that allows you to specify where filenames, line numbers,
columns and so on appear in the error messages.
Full details are provided in the online help, but
you probably won't need to make any changes, as it works
pretty well "out of the box."
vile's error finder also compensates for changes in the file, keeping track of additions and deletions as you progress to each error.
The error finder applies to the most recent buffer created
by reading from a shell command.
For example, ^X!command
produces a buffer named [Output]
, and
:e !command
produces a buffer named [!command]
.
The error finder will be set appropriately.
You can point the error finder at an arbitrary buffer (not just
the output of shell commands) using
the :error-buffer
command.
This lets you use the error finder on the output of previous
compiler or egrep runs.
vile relies on help from an external program to provide syntax coloring. In fact, there are three programs: one for C programs, one for Pascal programs, and one for UNIX man pages. The vile documentation provides this sample macro for use in a .vilerc file:
30 store-macro write-message "[Attaching C/C++ attributes...]" set-variable %savcol $curcol set-variable %savline $curline set-variable %modified $modified goto-beginning-of-file filter-til end-of-file "vile-c-filt" goto-beginning-of-file attribute-cntl_a-sequences-til end-of-file ~if ¬ %modified unmark-buffer ~endif %savline goto-line %savcol goto-column write-message "[Attaching C/C++ attributes...done ]" ~endm bind-key execute-macro-30 ^X-q
This runs vile-c-filt over the C source code. This program in turn relies upon the contents of $HOME/.vile.keywords, which specifies the attributes to provide to different text. (B for bold, U for underlined, I for italic, and C for one of 16 different colors.) This is Kevin Buettner's version:
Comments:C2 Literal:U Cpp:CB if:B else:B for:B return:B while:B switch:B case:B do:B goto:B break:B
Syntax coloring works on the X11 interface with both Versions 7.4 and 8.0 of vile. Getting it to work on a Linux console is a bit more complicated. It depends upon which screen handling interface it was compiled with.
Configure vile with
--with-screen=ncurses
and rebuild.
This will then work out of the box.
This is the default way that vile is configured. Using this version requires you to have a correct /etc/termcap entry for the Linux console. The following termcap entry works:[5]
console|linux|con80x25|dumb:\ :do=^J:co#80:li#25:cl=\E[H\E[J:sf=\ED:sb=\EM:\ :le=^H:bs:am:cm=\E[%i%d;%dH:nd=\E[C:up=\E[A:\ :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[27m:us=\E[4m:ue=\E[24m:\ :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:is=\E[1;25r\E[25;1H:\ :ll=\E[1;25r\E[25;1H:al=\E[L:dc=\E[P:dl=\E[M:\ :it#8:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:kb=^H:ti=\E[r\E[H:\ :ho=\E[H:kP=\E[5~:kN=\E[6~:kH=\E[4~:kh=\E[1~:kD=\E[3~:kI=\E[2~:\ :k1=\E[[A:k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[17~:\ :k7=\E[18~:k8=\E[19~:k9=\E[20~:k0=\E[21~:K1=\E[1~:K2=\E[5~:\ :K4=\E[4~:K5=\E[6~:\ :pt:sr=\EM:vt#3:xn:km:bl=^G:vi=\E[?25l:ve=\E[?25h:vs=\E[?25h:\ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:\ :r1=\Ec:r2=\Ec:r3=\Ec:\ :vb=\E[?5h\E[?5l:\ :ut:\ :Co#8:\ :AF=\E[%a+c\036%dm:\ :AB=\E[%a+c\050%dm:
[5] This entry courtesy of Kevin Buettner. Note that Linux distributions will vary. This was tested under Redhat Linux 4.2; you may not need to change your /etc/termcap file.
On the one hand, because syntax highlighting is accomplished with an external program, it should be possible to write any number of highlighters for different languages. On the other hand, because the facilities are rather low-level, doing so is not for non-programmers. The online help describes how the highlight filters should work.
The directory ftp://ftp.clark.net/pub/dickey/vile/utilities contains user-contributed filters for coloring makefiles, LaTeX input, Perl, HTML, and troff. It even contains a macro that will color the lines in RCS files according to their age!