Use %
as a substitute for your filename. But personally, I really think you can push :make
to do exactly what you want.
I used to do exactly what you want to avoid: just hack out a two-line Makefile for every single folder I was in. I enjoyed :make
's quickfix support so much that whipping out a two-line Makefile just seemed like a small overhead in the big picture.
... I've since learned better. You can use an autocmd or ftplugin to set the makeprg
option, configuring :make
to use your command of choice based on the current filetype. In itself, that saves you a bit of work.
The problem starts when we work a tool whose error messages don't look just like GCC's. To get around this, vim also provides the errorformat
option. errorformat
is very sophisticated. If you really want to learn about it, start with :h error-format
. In the long term, the sophistication is really great. It means that, once you learn how to use it, you can parse virtually any compiler output and format it for viewing with quickfix (:cope
or :cl
).
In the short term, it can be a bit of a bad thing, because it means that the first couple of times you hack an error format together yourself, you're going to be spending a fair bit of time puzzling over the vimdocs and re-loading and building files that will trigger the various error messages your compiler can produce. That's definitely not what you want if you're only briefly working outside your comfort zone, or your boss is over your shoulder urging you to fix this bug now.
Hopefully (and likely), someone has already gone through this pain for you, and either configured errorformat
appropriately for your default ftplugin
, or released it as part of a vim script that they're just waiting for the community to install and adore.
As a quick demonstration, here's a couple of lines I hacked together for my .vim/ftplugin/haskell.vim
file:
setl makeprg=ghc\ --make\ %
setl errorformat=%E%f:%l:%c:,%C\ %.%m,%Z,%f:%l:%c:%m
I use setl
here so that these options are only configured for haskell source files; if I edit a different kind of source file simultaneously, it can use a different configuration instead.
If you end up using :make
, I also recommend configuring your switchbuf
setting. I found it a bit annoying having to press ctrl-O after a build if quickfix gets excited and jumps you to the wrong file. I use:
set switchbuf=useopen,usetab,newtab