问题
When we use cscope to go to definition of a symbol in vim, lots of candidates may be shown in result window. I'd like to perform searching within the window to find what I need quickly. But search function (/) doesn't seem to work in result window, only a few keys are available, j,k,gg,G, etc.
Is there anyway to search in cscope result window? Or can anyone share some experiences with how to work more efficiently in such a situation.
Thanks.
回答1:
You can use the following:
" Filter the quickfix list
function! FilterQFList(type, action, pattern)
" get current quickfix list
let s:curList = getqflist()
let s:newList = []
for item in s:curList
if a:type == 0 " filter on file names
let s:cmpPat = bufname(item.bufnr)
elseif a:type == 1 " filter by line content
let s:cmpPat = item.text . item.pattern
endif
if item.valid
if a:action < 0
" Keep only nonmatching lines
if s:cmpPat !~ a:pattern
let s:newList += [item]
endif
else
" Keep only matching lines
if s:cmpPat =~ a:pattern
let s:newList += [item]
endif
endif
endif
endfor
call setqflist(s:newList)
endfunction
Then define four mappings (replace ø with something that fits for you, mine start with ð which I think might be unavailable on your keyboard) that map respectively to:
nnoremap ø :call FilterQFList(0, -1, inputdialog('Remove file names matching:', ''))<CR>
nnoremap ø :call FilterQFList(0, 1, inputdialog('Keep only file names matching:', ''))<CR>
nnoremap ø :call FilterQFList(1, -1, inputdialog('Remove all lines matching:', ''))<CR>
nnoremap ø :call FilterQFList(1, 1, inputdialog('Keep only lines matching:', ''))<CR>
This way you can filter your quickfix list with any pattern (you have the power of vim reg.exps). Use :cnewer
and :colder
to jump through previous quickfix lists.
来源:https://stackoverflow.com/questions/4644658/how-to-search-in-vim-cscope-result-window