What does the :compiler command do in Vim?
Vim typically has a number of common compiler configurations installed, as mentioned, so it will automatically choose the appropriate one. To actually use the compiler configuration you need to use the Vim :make function, as also mentioned, but the default mode of operation expects a Makefile
to exist.
If you're just trying to do a quick compile on the current file/buffer (without an existing Makefile) then if you have GNU make installed you can just compile it like this (as explained here):
:make %:r
And it will compile the file and provide vim with the errors/warnings so you can navigate each one using the quickfix (:help quickfix
) list - :cn
Next error, :cp
Previous error, :cw
New window listing errors.
If you don't have GNU make installed you can set this variable - either immediately in the current session like this:
:se makeprg=gcc\ -o\ %<\ %
Or put it in your ~/.vimrc file:
set makeprg=gcc\ -o\ %<\ %
Then you can type:
:make
And it will compile the file and provide you with the quickfix list of errors/warnings in Vim.
EDIT: If you also want to run the compiled executable from within vim you can do ('!' executes, '%:r' is the filename without its suffix):
:!./%:r
It sets options for that compiler, such as the program to use for :make
and the format of error messages so vim can jump you to error locations. Look in $VIMRUNTIME/compiler/
for the different .vim files that can be sourced.
:help write-compiler-plugin
A compiler plugin sets options for use with a specific compiler. The user can load it with the
:compiler
command. The main use is to set the 'errorformat' and 'makeprg' options.
See also :help errorformat
and :help makeprg
.
Here's the GCC compiler file on my machine, for example:
/usr/share/vim/vim72/compiler/gcc.vim
" Vim compiler file
" Compiler: GNU C Compiler
" Maintainer: Nikolai Weibull <[email protected]>
" Latest Revision: 2006-12-20
if exists("current_compiler")
finish
endif
let current_compiler = "gcc"
let s:cpo_save = &cpo
set cpo-=C
CompilerSet errorformat=
\%*[^\"]\"%f\"%*\\D%l:\ %m,
\\"%f\"%*\\D%l:\ %m,
\%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
\%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
\%f:%l:\ %m,
\\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
\%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
\%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
\%D%*\\a:\ Entering\ directory\ `%f',
\%X%*\\a:\ Leaving\ directory\ `%f',
\%DMaking\ %*\\a\ in\ %f
if exists('g:compiler_gcc_ignore_unmatched_lines')
CompilerSet errorformat+=%-G%.%#
endif
let &cpo = s:cpo_save
unlet s:cpo_save