2

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

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

谢谢。

4

1 回答 1

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跳转之前的快速修复列表。

于 2011-01-10T07:56:53.423 回答