因此,假设我使用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
答案 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中显示的文本。我做了两次过滤来表明这一点。
希望它有所帮助。
答案 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)
自21.8.2018 (patch: 8.1.0311)起,插件 cfilter 与$VIMRUNTIME
中的vim一起分发。它记录在:h cfilter-plugin
下。
在需要时加载插件 cfilter 或始终将其加载到vimrc中
:packadd cfilter
使用...过滤快速修复列表
:Cfilter DPUST