VIM Markify
Recently I picked up some minor configs for ruby from Time Pope’s vimrc. Here’s the code :
autocmd FileType ruby
\ if expand('%') =~# '_test\.rb$' |
\ compiler rubyunit | setl makeprg=testrb\ \"%:p\" |
\ elseif expand('%') =~# '_spec\.rb$' |
\ compiler rspec | setl makeprg=rspec\ \"%:p\" |
\ else |
\ compiler ruby | setl makeprg=ruby\ -wc\ \"%:p\" |
\ endif
What this does is given the filetype is Ruby, it correctly sets up the
compiler and makeprg such that it allows you to run your tests via :make!
This is pretty neat I must say :), because it correctly loads the quickfix
list with the errors and I can actually traverse them in order and fix them.
All this without needing any plugin whatsoever :).
Ever since I started using this, I always wanted to mark the lines with errors
/ warnings with nice signs to highlight lines with errors instantly after
I ran :make or :lmake, something similar to what Syntastic does but
not just for syntax errors, actual test run errors. As I searched for similar
plugins, although I found a bunch of them, I didn’t find them to be very
intuitive or simple enough.
Hence I started exploring through vim’s help in an attempt to trying and understanding how I can tap into quickfix & location lists and process them. As it turns out, it’s quite simple and I ended up developing Vim Markify overnight.
I’ve made it quite flexible and it works quite well with all quickfix commands
:make, :lmake, :grep, :lgrep, :grepadd, :lgrepadd, :vimgrep,
:lvimgrep, :vimgrepadd, :lvimgrepadd, :helpgrep, :lhelpgrep, by
tapping into the QuickFixCmdPost autocmd event which triggers right after
you run any of the previously mentioned quickfix commands. Although you can
choose to disable the autocmd by putting let g:markify_autocmd=0 in your
vimrc so that it doesn’t do this automatically and you can trigger :Markify,
:MarkifyClear or :MarkifyToggle commands or their corresponding mappings
<Leader>mm, <Leader>mc or <Leader>M which can of course be changed. And
I was able to achieve all this under 170 sloc :). A lot more things are
configurable, I would encourage you to check :h markify.txt within vim or
refer to the code at Github
Screenshot: