所以我们可以说我用ag.vim通过文件中搜索“已禁用”。 它返回我在quickfix窗口的一些结果:
1 first_file.rb|1 col 1| disabled something something
2 second_file.rb|1 col 2| disabled another something
是否有可能通过它在新的quickfix开放成果挑选的quickfix结果作为输入,grep的? 所以,如果我想进入:quickfix_grep first_file
,新的quickfix会弹出只有1项:
1 first_file.rb|1 col 1| disabled something something
更新
Vim的插件已经为这个要求写: https://github.com/sk1418/QFGrep
原来的答案:
我对你的目标的理解是:
你grep的结果是在你的quickfix不知何故巨大,要缩小它的观点。 通过输入与正则表达式的指令,过滤器上的grep结果。 过滤后的结果也应显示在quickfix窗口,这样你就可以打开/跳到文件。
如果上面是你想要的,检查以下内容:
源此函数和的命令行:
function! GrepQuickFix(pat)
let all = getqflist()
for d in all
if bufname(d['bufnr']) !~ a:pat && d['text'] !~ a:pat
call remove(all, index(all,d))
endif
endfor
call setqflist(all)
endfunction
command! -nargs=* GrepQF call GrepQuickFix(<q-args>)
再经过你的grep / ACK /不管展现在您的quickfix东西,你可以键入
:GrepQF <regex>
做过滤在你的quickfix。
这里我想补充一个GIF动画。 我使用的Ack
,而不是grep
,但它没有什么区别。 给定的正则表达式匹配文件名,并进入到quickfix显示文本。 我没有过滤两次,以显示。
希望能帮助到你。
我对这个问题的解决方案一直是在默认情况下做出的quickfix缓冲区修改:
:autocmd BufReadPost quickfix set modifiable
这样做打开的像手动添加注释,除去无关的条目或通过与过滤任何适当的修改可能性的整个范围:global
和:vglobal
命令。
这里的@肯特的回答更短和更简洁的版本:
function! GrepQuickFix(pat)
call setqflist(filter(getqflist(), "bufname(v:val['bufnr']) !~# a:pat"))
endfunction
command! -nargs=* GrepQF call GrepQuickFix(<q-args>)
这是相同的代码,只是整洁和更短的,我不相信它需要单独的插件。
新的官方VIM插件CFILTER
自2018年8月21日(补丁:8.1.0311)的插件CFILTER分布在VIM $VIMRUNTIME
。 它是根据记录:h cfilter-plugin
。
需要或在vimrc总是加载时加载插件CFILTER
:packadd cfilter
滤波器quickfix表
:Cfilter DPUST