Recently I picked up some minor configs for ruby from Tim 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 1 2 3 4 5 6 7 8 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:

