If you are used to using the quickfix list in VIM there are times when you want to filter certain things out of the quickfix list to narrow it down to relevant results that you need. Rather than firing the quickfix command all over again with a refined expression, it is easier & often faster to simply remove items from the list. I wrote this simple vimscript to do just that.

function! s:FilterQuickfixList(bang, pattern) let cmp = a:bang ? '!~#' : '=~#' call setqflist(filter(getqflist(), "bufname(v:val['bufnr']) " . cmp . " a:pattern")) endfunction command! -bang -nargs=1 -complete=file QFilter call s:FilterQuickfixList(<bang>0, <q-args>) 1 2 3 4 5 function ! s:FilterQuickfixList ( bang , pattern ) let cmp = a:bang ? '!~#' : '=~#' call setqflist ( filter ( getqflist ( ) , "bufname(v:val['bufnr']) " . cmp . " a:pattern" ) ) endfunction command ! - bang - nargs = 1 - complete = file QFilter call s:FilterQuickfixList ( < bang > 0 , < q - args > )

Using the above now allows you to filter the quickfix list by calling :QFilter pattern. By default it filters the list to keep results matching the pattern but if you call it :QFilter! pattern. it will remove results that match the pattern.