Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the :compiler command do in Vim?

I recently found that there is a command in Vim called compiler. You can call it with any common compiler (for example, :compiler gcc, :compiler php, etc.), but it doesn't seem to have any immediate effect.

I searched on the manpages but didn't find anything useful about what it actually does, nor does the Vim Wiki. Does anyone know what that command actually does?

like image 965
Martín Fixman Avatar asked Jun 13 '10 03:06

Martín Fixman


3 Answers

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
like image 151
John Kugelman Avatar answered Oct 05 '22 23:10

John Kugelman


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
like image 10
Pierz Avatar answered Oct 05 '22 23:10

Pierz


:help compiler

It sets the options for the selected compiler for the current buffer.

like image 1
Nick Bastin Avatar answered Oct 05 '22 23:10

Nick Bastin