是否有可能grep Vim的quickfix?

时间:2013-03-14 10:01:55

标签: vim grep

因此,假设我使用ag.vim通过文件搜索“禁用”。它在quickfix窗口中返回了一些结果:

1 first_file.rb|1 col 1| disabled something something
2 second_file.rb|1 col 2| disabled another something

是否可以选择quickfix结果作为输入,grep通过它并在新的quickfix中打开结果?所以,如果我输入:quickfix_grep first_file,新的quickfix只会弹出一个条目:

1 first_file.rb|1 col 1| disabled something something

4 个答案:

答案 0 :(得分:18)

更新

已针对此要求编写了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>)

然后在你的quickfix中你的grep / ack /任何显示内容之后,你可以输入

:GrepQF <regex>

在你的quickfix中进行过滤。

这里我添加了一个GIF动画。我使用Ack代替grep,但它没有任何区别。给定的正则表达式将匹配文件名和quickfix中显示的文本。我做了两次过滤来表明这一点。

enter image description here

希望它有所帮助。

答案 1 :(得分:5)

我对此问题的解决方案一直是制作quickfix缓冲区 默认情况下可修改:

:autocmd BufReadPost quickfix set modifiable

这样做可以为任何适当的方式打开各种可能性 编辑,例如添加注释,手动删除不相关的条目或 通过使用:global:vglobal命令进行过滤。

答案 2 :(得分:2)

这是一个更短的&amp;整洁的@ Kent的回答:

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

它是相同的代码,只是更整洁,更短,我不相信它值得一个单独的插件。

答案 3 :(得分:1)

新的官方vim插件cfilter

21.8.2018 (patch: 8.1.0311)起,插件 cfilter $VIMRUNTIME中的vim一起分发。它记录在:h cfilter-plugin下。

在需要时加载插件 cfilter 或始终将其加载到vimrc中

:packadd cfilter

使用...过滤快速修复列表

:Cfilter DPUST