%20usando%20FZF%3F.png)
Quando executo uma pesquisa em todo o projeto (vários arquivos)FZF, os resultados são inundados com linhas cujascaminho de arquivocorresponde à consulta, eliminando os resultados mais relevantes onde o arquivoconteúdocoincide.
Por exemplo, executando oUm exemplo do wiki,
ag --nobreak --nonumbers --noheading . | fzf
Vou consultar search
e obter algo assim,
plugin/keybindings.vim:cnoremap <expr> <C-Y> refract#if_incsearch("\<C-L>", "\<C-Y>")
plugin/keybindings.vim:cmap <C-P> <Plug>(refract_incsearch_prev)
plugin/coherent.vim:set incsearch
plugin/coherent.vim:setg tags+=./tags;~ " search for tags recursively upwards until ~
plugin/search.vim:" use it for tab-completion instead depending on context of cmdline
plugin/search.vim: autocmd User Hint,listical_next,listical_prev Latitude
plugin/search.vim: autocmd User Grepper call hint#prepare_highlights()
plugin/search.vim:let g:fzf_colors =
plugin/search.vim:" let g:grepper =
plugin/search.vim:\ <q-args>,
plugin/search.vim:\ <bang>0)
plugin/search.vim:augroup END
plugin/search.vim: autocmd!
plugin/search.vim:
plugin/search.vim:
plugin/search.vim:
plugin/search.vim:
> plugin/search.vim:
41/517
> search
O que estou fazendo de errado? Quando executo uma consulta Ag semelhante sem FZF, obtenho apenas os resultados onde minha consulta ocorreu no conteúdo do arquivo (que é o que desejo).
Responder1
Eu estava entendendo mal a interação entre ag e fzf, pensando que a consulta que digitei foi de alguma forma passada por ag antes de canalizar para fzf. Em retrospecto, esse foi um erro bobo de se cometer, já que a filtragem é exatamente o que o fzf faz, e o ag está sendo usado simplesmente como uma forma de gerar toneladas de linhas significativas.
Para conseguir o que queria com isso, olhei o formato das linhas que ag gerou, por exemplo
plugin/coherent.vim:set incsearch
Diga ao fzf para tratar :
como delimitador de campo e que deve restringir o escopo de sua pesquisa aos campos 2, 3, 4,...
ag --nobreak --nonumbers --noheading . | fzf --delimiter=: --nth=2..
Isso será interrompido se algum dos arquivos processados contiver a :
no nome do arquivo, mas isso é algo que não espero que aconteça com muita frequência.
Responder2
Para quem procura um script ripgrep, foi isso que eu criei:
FZF_EDITOR="gvim"
# Fuzzy Ripgrep Ignoring-case
frgi() {
local result
IFS=$'\n' result="$(rg -i --line-number "$@" | fzf --no-sort --tac --delimiter=: --nth=2..)"
local filename
local lineno
local _
if [[ -n "$result" ]]
then
IFS=':' read -r filename lineno _ <<< "$result"
# Vim can accept line-number with +99
# But if your editor cannot, then you had better remove the + argument
verbosely "$FZF_EDITOR" +"$lineno" "$filename"
fi
}