open - vim nerd tree
¿Es posible grep quickfix de Vim? (3)
Aquí hay una versión más breve y ordenada de la respuesta de @ Kent:
function! GrepQuickFix(pat)
call setqflist(filter(getqflist(), "bufname(v:val[''bufnr'']) !~# a:pat"))
endfunction
command! -nargs=* GrepQF call GrepQuickFix(<q-args>)
Es el mismo código, simplemente más ordenado y más corto, no creo que merezca un complemento por separado.
Entonces digamos que uso ag.vim para buscar ''deshabilitado'' a través de archivos. Me devuelve algunos resultados en la ventana quickfix:
1 first_file.rb|1 col 1| disabled something something
2 second_file.rb|1 col 2| disabled another something
¿Es posible elegir resultados quickfix como entrada, grep a través de él y abrir resultados en una nueva solución rápida? Entonces, si ingresara :quickfix_grep first_file
, la nueva solución rápida aparecería con solo 1 entrada:
1 first_file.rb|1 col 1| disabled something something
Mi solución a este problema siempre ha sido hacer que el búfer quickfix modificable de forma predeterminada:
:autocmd BufReadPost quickfix set modifiable
Al hacerlo, se abre un amplio abanico de posibilidades para las ediciones apropiadas, como agregar comentarios, eliminar entradas no relacionadas manualmente o filtrar con los comandos :global
y :vglobal
.
Actualizar
Se ha escrito un complemento vim para este requisito: https://github.com/sk1418/QFGrep
Respuesta Original:
Mi comprensión de tu objetivo es:
Su resultado grep es de alguna manera enorme en su quickfix, quiere restringir su vista de él. ingresando un comando con expresiones regulares, filtra el resultado de grep. El resultado filtrado también se debe mostrar en la ventana de QuickFix, para que pueda abrir / saltar al archivo.
Si lo anterior es lo que desea, revise lo siguiente:
fuente esta función y la línea de comando:
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>)
luego de tu grep / ack / lo que sea que muestres en tu quickfix, podrías escribir
:GrepQF <regex>
para hacer el filtrado en su quickfix.
Aquí agrego una animación GIF. Estoy usando Ack
lugar de grep
, pero no hace diferencia. La expresión regular dada coincidirá con el nombre del archivo y el texto que se muestra en quickfix. Lo hice filtrando dos veces para mostrar eso.
Espero eso ayude.