plug open nerd vim grep

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.