是否有可能到grep Vim中的QuickFix?(Is it possible to grep V

2019-07-21 14:22发布

所以我们可以说我用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

Answer 1:

更新

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显示文本。 我没有过滤两次,以显示。

希望能帮助到你。



Answer 2:

我对这个问题的解决方案一直是在默认情况下做出的quickfix缓冲区修改:

:autocmd BufReadPost quickfix set modifiable

这样做打开的像手动添加注释,除去无关的条目或通过与过滤任何适当的修改可能性的整个范围:global:vglobal命令。



Answer 3:

这里的@肯特的回答更短和更简洁的版本:

function! GrepQuickFix(pat)
  call setqflist(filter(getqflist(), "bufname(v:val['bufnr']) !~# a:pat"))
endfunction
command! -nargs=* GrepQF call GrepQuickFix(<q-args>)

这是相同的代码,只是整洁和更短的,我不相信它需要单独的插件。



Answer 4:

新的官方VIM插件CFILTER

自2018年8月21日(补丁:8.1.0311)的插件CFILTER分布在VIM $VIMRUNTIME 。 它是根据记录:h cfilter-plugin

需要或在vimrc总是加载时加载插件CFILTER

:packadd cfilter

滤波器quickfix表

:Cfilter DPUST


文章来源: Is it possible to grep Vim's quickfix?
标签: vim grep