我最近发现Vim中有一个叫做编译器的命令。您可以使用任何常见的编译器调用它(例如,:编译器gcc,编译器php等),但它似乎没有立即生效。
我搜索了这些联机帮助页,但没有发现它实际上有什么用处,Vim Wiki也没有。有谁知道那个命令实际上做了什么?
答案 0 :(得分:17)
它为该编译器设置选项,例如用于:make
的程序和错误消息的格式,以便vim可以将您跳转到错误位置。在$VIMRUNTIME/compiler/
中查找可以获取的不同.vim文件。
:help write-compiler-plugin
编译器插件设置用于特定编译器的选项。用户可以 使用
:compiler
命令加载它。主要用途是设置 'errorformat'和'makeprg'选项。
另请参阅:help errorformat
和:help makeprg
。
这是我机器上的GCC编译器文件,例如:
" 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
答案 1 :(得分:10)
如上所述,Vim通常安装了许多常见的编译器配置,因此它会自动选择合适的编译器配置。要实际使用编译器配置,您还需要使用Vim:make函数,但是默认的操作模式需要Makefile
存在。
如果您只是想对当前文件/缓冲区(没有现有的Makefile)进行快速编译,那么如果您安装了GNU make,则可以像这样编译它(如here所述):
:make %:r
它将编译文件并向vim提供错误/警告,以便您可以使用 quickfix (:help quickfix
)列表导航每个文件 - :cn
下一个错误, :cp
上一个错误,:cw
新窗口列出错误。
如果你没有安装GNU make,你可以设置这个变量 - 在当前会话中立即设置如下:
:se makeprg=gcc\ -o\ %<\ %
或者把它放在〜/ .vimrc文件中:
set makeprg=gcc\ -o\ %<\ %
然后你可以输入:
:make
它将编译文件并在Vim中为您提供 quickfix 错误/警告列表。
编辑:如果您还想从vim中运行已编译的可执行文件,您可以执行('!'执行,'%:r'是不带后缀的文件名):
:!./%:r
答案 2 :(得分:1)
:help compiler
它为当前缓冲区设置所选编译器的选项。
答案 3 :(得分:-1)
如果你编辑一个java文件,你可以这样做:编译器javac然后,:make%来编译当前文件......