如何在vim cscope结果窗口中搜索

时间:2011-01-10 07:43:59

标签: vim cscope

当我们使用cscope来定义vim中的符号时,很多候选者可能会显示在结果窗口中。我想在窗口内进行搜索,以便快速找到我需要的东西。但搜索功能(/)似乎在结果窗口中不起作用,只有几个键可用,j,k,gg,G等。

无论如何都要在cscope结果窗口中搜索?或者,任何人都可以分享一些如何在这种情况下更有效地工作的经验。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

" 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

然后定义四个映射(用适合你的东西替换ø,我的开头用ð,我认为可能在键盘上不可用)分别映射到:

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>

这样您就可以使用任何模式过滤快速修复列表(您具有vim reg.exps的强大功能)。使用:cnewer:colder跳转以前的quickfix列表。