Show only lines in quickfix list for current buffer
From Vim Tips Wiki
After executing :make or :grep you can browse the list of errors/matches, and the appropriate source code locations, with commands like :cnext. :help quickfix
This tip folds away lines in the current buffer that have no errors (when using :make), or that do not match the search pattern (when using :grep). See here to fold lines in the quickfix list.
[edit] Fold away misses
The following script can be used to fold away lines with no errors/matches.
Usage
- Create file
~/.vim/plugin/foldmisses.vim(Unix) or$HOME/vimfiles/plugin/foldmisses.vim(Windows) containing the script below, then restart Vim. - Edit a file.
- Enter a command like
:vimgrep /regexp/ %to get a quickfix list. - Enter
:FoldMissesto fold away lines in the current buffer that are not in the quickfix list. - Enter
:FoldLMissesto fold away lines in the current buffer that are not in the buffer's location list. - Optional:
:1FoldMisseswill give 1 extra context line (fewer lines folded). You can set a default vialet g:foldmisses_context = 1 - As normal,
zatoggles a fold, andzRopens all folds.
if ! exists('g:foldmisses_context')
let g:foldmisses_context = 0
endif
" Add manual fold from line1 to line2, inclusive.
function! s:Fold(line1, line2)
if a:line1 < a:line2
execute a:line1.','.a:line2.'fold'
endif
endfunction
" Return list of line numbers for current buffer found in quickfix list.
function! s:GetHitLineNumbers(list)
let result = []
for d in a:list
if d.valid && d.bufnr == bufnr('')
call add(result, d.lnum)
endif
endfor
return result
endfunction
function! s:FoldMisses(list, context)
setlocal foldmethod=manual
normal! zE
let extra = a:context == 99999 ? g:foldmisses_context : a:context
let last = 0
for lnum in s:GetHitLineNumbers(a:list)
let start = last==0 ? 1 : last+1+extra
call s:Fold(start, lnum-1-extra)
let last = lnum
endfor
call s:Fold(last+1+extra, line('$'))
endfunction
":[N]FoldMisses [N] Show only the lines (and surrounding [N] lines
":[N]FoldLMisses [N] of context) in the current buffer that appear
" in the quickfix / location list.
" Missed, error-free lines are folded away.
command! -bar -count=99999 FoldMisses call s:FoldMisses(getqflist(), <count>)
command! -bar -count=99999 FoldLMisses call s:FoldMisses(getloclist(0), <count>)