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 any开发者_Go百科thing useful about what it actually does, nor does the Vim Wiki. Does anyone know what that command actually does?
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 <now@bitwi.se>
" 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
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
:help compiler
It sets the options for the selected compiler for the current buffer.
If you edit a java file, you can do :compiler javac and then, :make % to compile the current file...
精彩评论