当我们在 vim 中使用 cscope 去定义一个符号时,结果窗口中可能会显示很多候选项。我想在窗口中执行搜索以快速找到我需要的内容。但是搜索功能 (/) 似乎在结果窗口中不起作用,只有几个键可用,j、k、gg、G 等。
无论如何要在 cscope 结果窗口中搜索吗?或者任何人都可以分享一些在这种情况下如何更有效地工作的经验。
谢谢。
您可以使用以下内容:
" 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
跳转之前的快速修复列表。